k-means及k-means++原理【python代码实现】

前言

k-means算法是无监督的聚类算法,实现起来较为简单,k-means++可以理解为k-means的增强版,在初始化中心点的方式上比k-means更友好。

阅读全文

在jupyter中使用python pdb调试代码

目前在jupyter中还没有可视化调试界面,而python pdb是代码调试的一个不错的选择,它支持设置断点和单步调试,使用起来非常方便

阅读全文

手推公式带你轻松理解L1/L2正则化

前言

L1/L2正则化的目的是为了解决过拟合,因此我们先要明白什么是过拟合、欠拟合。

  • 过拟合:训练出的模型在测试集上Loss很小,在训练集上Loss较大
  • 欠拟合:训练出的模型在测试集上Loss很大,在训练集上Loss也很大
  • 拟合:训练的刚刚好,在测试集上Loss很小,在训练集上Loss也很小

现在,让我们开启L1/L2正则化正则化之旅吧!

阅读全文

numpy和torch数据类型转化问题

在实际计算过程中,float类型使用最多,因此这里重点介绍numpy和torch数据float类型转化遇到的问题,其他类型同理。

阅读全文

Batch Normalization:批量归一化详解

为什么要使用BN

在深度学习中,层数很多,可能有几十层甚至上百层,每次训练激活的过程中,参数不断改变,导致后续每一层输入的分布也发生变化,而学习的过程就是要使每一层适应输入的分布,如果不做BN就会使模型学的很小心,也会使学习速率变慢,因此我们不得不降低学习率、小心地初始化。

那怎么才能让我们的模型学习的更高效呢?
原有的方式可能是歪着学的,学的效果不是很好,如下图B所示,现在我们需要让它激活到一个更适合学习的位置上,那就需要把它放到原点,这个位置更适合,这时候就需要BN了

原点周围更敏感,假定一开始你的数据不在原点周围,后面如果越来越偏,说不定会偏去哪,也就是指W一会大一会小,一会是正值,一会是负值,如下图B所示,也不利于更新。

阅读全文

神经网络之多维卷积的那些事(一维、二维、三维)

前言

一般来说,一维卷积用于文本数据,二维卷积用于图像数据,对宽度和高度都进行卷积,三维卷积用于视频及3D图像处理领域(检测动作及人物行为),对立方体的三个面进行卷积 。二维卷积的用处范围最广,在计算机视觉中广泛应用。

阅读全文

PyTorch之torchvision.transforms详解[原理+代码实现]

前言

我们知道,在计算机视觉中处理的数据集有很大一部分是图片类型的,如果获取的数据是格式或者大小不一的图片,则需要进行归一化和大小缩放等操作,这些是常用的数据预处理方法。如果参与模型训练中的图片数据非常有限,则需要通过对有限的图片数据进行各种变换,如缩小或者放大图片的大小、对图片进行水平或者垂直翻转等,这些都是数据增强的方法。庆幸的是,这些方法在torch.transforms中都能找到,在torch.transforms中有大量的数据变换类,有很大一部分可以用于实现数据预处理(Data Preprocessing)和数据增广(Data Argumentation)

阅读全文

深入理解GAN对抗生成网络

什么是GAN

Generative Adversarial Networks,生成式对抗网络,Ian Goodfellow 在2014 年提出的一种生成式模型
基本思想来自博弈论的二人零和博弈(纳什均衡), 由一个生成器和一个判别器构成,通过对抗学习来训练

  • 生成器的目的是尽量去学习真实的数据分布
  • 判别器的目的是尽量正确判别输入数据是来自真实数据还是来自生成器
  • 生成器和判别器就是一个矛和盾互相PK的过程
  • 为了取得游戏胜利,这两个游戏参与者需要不断优化, 各自提高自己的生成能力和判别能力,这个学习优化过程就是寻找二者之间的一个纳什均衡
    在这里插入图片描述
    G代表生成器,D代表判别器,Z是输入源,称为Noise source,就是一个随机编码。给出一个random code(即Z)由生成器G生成假数据X’,假数据X’和真实数据X喂给判别器D,由D判别出哪个是real,哪个是fake,这个就是gan的基本原理
阅读全文

Pycharm 2020 中导入Anaconda3创建的环境

在pycharm配置环境Anaconda环境

之前用的Anaconda3中的jupyter Lab写python程序,后来根据需要用到pycharm,又不想重新安装python库,直接用到Anaconda3中下载好的库该有多好,现在尝试用pycharm2020配置Anaconda3创建的环境。

阅读全文