Softmax回归
适用于分类问题,使用softmax运算输出类别的概率分布
单层神经网络,输出个数等于分类问题中的类别个数
交叉熵函数适合衡量两个概率分布的差异
通常使用准确率accuarcy来评价模型
交叉熵函数
交叉熵函数
最小化交叉熵函数等价于最大化训练数据集所有标签类别的联合预测概率。
独热编码
即一位有效编码, One-Hot 编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,其中只有一位有效。
对于每一个特征,如果它有m个可能值,那么经过独热编码后,就变成了m个二元特征(如成绩这个特征有好,中,差变成one-hot就是100, 010, 001)。并且,这些特征互斥,每次只有一个激活。因此,数据会变成稀疏的。
链接: https://www.jianshu.com/p/42e93acacc52
如果将标签数字化,分类器往往默认数据数据是连续的,并且是有序的
One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1
性别特征:[“男”,“女”],按照N位状态寄存器来对N个状态进行编码的原理,处理后应该是这样的(这里只有两个特征,所以N=2):
男 => 10
女 => 01
Gluon
链接: https://blog.csdn.net/u012436149/article/details/78047278
MLP多层感知机
多层感知机就是至少一个隐藏层的由全连接层组成的神经网络,且每个隐藏层的输出通过激活函数进行变换。
如果没有非线性变换的话,全连接层也就相当于仿射变换(Affine Transformation)其实是另外两种简单变换的叠加:一个是线性变换,一个是平移变换
这个非线性变换称为激活函数。可对隐藏变量使用按元素运算的非线性函数进行变换,再作为下一个全连接层的输入。
ReLU激活函数
只保留正数,负数清零。即:
输入为负数时,ReLU函数的导数为0,输入为正数时,ReLu的导数为1
sigmoid激活函数
将元素的值变换到0-1之间
当输入接近0时,sigmoid函数接近线性变换,越偏移0,导数越接近0
tanh激活函数
将元素的值变换到-1 ~1之间
和sigmoid函数有点类似
神经网络搭建
大体流程:
搭建模型——初始化模型参数——训练模型参数(将mini_batch数据喂入网络,计算损失,反向传导得到模型参数的梯度信息,更新参数)
#搭建模型
net = nn.Sequential() #Sequential是串联各个层的容器
net.add(nn.Dense(1))
#初始化参数
net.initialize(init.Normal(sigma=0.01)) #用mxnet中的init
#接下来定义损失函数与优化算法。可直接调用库
#训练模型
num_epochs = 3
for eopch in range(0,num_epochs):
for X,y in data_iter:
with autograd.record():
l = loss(net(X),y)
l.backward() #损失回传,是为了优化模型参数
trainer.step(batch_size) #优化函数
l = loss(net(features),labels) #是为了计算每个epoch的损失
调节超参:
如批量大小、迭代周期和学习率