Perceptron
Perceptron
原理
简单的感知机可以看作一个二分类,假定我们的公式为
f(x) = sign(w *x + b)
我们把 -b 做为一个标准,w* x 的结果与 -b 这个标准比较,
w*x > -b, f(x) = +1
w *x < -b, f(x) = -1
不难看出w是超平面的法向量,超平面上的向量与w的数量积为0。因此这个超平面就可以很好的区分我们的数据集。
而感知机就是来寻找w和b
优化方法
优化方法我们现有的方法比较多,诸如GD、SGD、Minibatch、Adam
当然我们的损失函数也包含多种,常见的有MSE, CrossEntropy.
这边简单展示一下MSE以及GD原理。
SoftMax
如果我们输出为多分类,那就成为一个SoftMax回归。
SoftMax回归和线性回归一样将输入特征与权重做线性叠加。与线性回归的一个主要不同在于,SoftMax回归的输出值个数等于标签里的类别数。
MLP
而我们给SoftMax回归增加隐藏层,就是我们所说的多层感知机,而
全连接层只是对数据做仿射变换,我们的方法是引入非线性变换,就是激活函数。
代码实现
这边选用CIFAR10数据集来做演示。CIFAR10包含10个类别,每个类别600张32x32的彩色图像。
1.导入依赖包
1 | import torch |
2.加载数据集
这边对图片进行归一化处理。
1 | transform = transforms.Compose( |
3.定义模型及参数
用Sequential快速构建,对数据进行展平处理输入尺寸为图片尺寸 x 通道数,输出10分类,hidden layer设置为512。
1 | net = nn.Sequential( |
4.训练
损失计算选用交叉熵函数,优化器选用SGD,调用显卡运行。
1 | loss = nn.CrossEntropyLoss() |
结果
可以看出我们的验证准确值过低,这主要是因为数据集特征不明显,我们在更换数据集验证。
更换数据集
选用7分类的海贼王图片进行训练,可以看出训练结果明显优于CIFAR数据集。
同时我们再挑选一张不在训练集的图片进行验证,发现结果正确。