阅读 56

softmax回归模型,softmax逻辑回归

另一方面,Softamx回归模型的原理softmax回归与线性回归一样,是将输入特征和权重进行线性叠加。 与线性回归的主要内容一样,softmax回归的输出值的个数与标签的类别数相等。 例如,在线性回归中常见的问题房价预测中,通常选择面积(平方米)和怡园烟)作为影响价格的两个因素。 在这里以面积和怡园为特征,只输出一个价格的预测值。 对于softmax,这适用于分类预测。 例如,在垃圾邮件分类问题中,需要选择几个主要特征作为系统输入,经过softmax分类算法得到邮件是垃圾邮件还是非垃圾邮件的概率值,其输出是离散值。

现在,我们来具体看看softmax模型是如何得到的。 假设需要对三种动物(狗、猫、鸡)进行分类,选择动物的四个特征作为输入。 此时,共有4种特征和3种输出动物类别,所以权重包含12个标量(下标目标w ),偏差为3个标量)下标目标b ),对每个输入计算o1、o2、o3这3个输出。

图1.1用神经网络图绘制上面的计算。 softmax回归与线性回归一样,也是单层神经网络。 各输出O1、O2、O3的计算依赖于所有的输入x1、x2、x3、x4、softmax回归的输出层也是全连接层。

图1.1 softmax回归是全连接层

因为分类问题需要得到离散的预测输出,一种简单的方法是将输出值Oi作为预测类别为i的可靠度,对应于值最大的输出的类别用于模型的预测即找到argmax Oi,例如O1,O2,O3分别为0.1、10、0.1,O2最大,所以预测类别为2猫。

但是,直接使用输出层的输出存在两个问题。 另一方面,因为已经决定了输出层的输出值的范围,所以很难直观地判断这些值的含义。 例如,刚才示例中的输出值10表示“可靠”图像类别为猫。 这是因为输出值是其他两种输出值的100倍。 然而,如果是O1 =O3 = 10*3,则输出值10表示图像类别为猫的概率较低。 另一方面,由于真正的标号是离散值,所以这些离散值和确定范围的输出值的误差很难均衡。

softmax运算符(softmax operator )解决了这两个问题。 它通过以下公式将输出值转换为值为正且和为1的概率分布:

其中

因此,我们得到了合法的概率分布,此时我们是可以通过直接输出y_hat(y帽)的值来预测的类。

因此,softmax运算不变更预测类的输出。

二、Softmax回归的简单实现我们已经简单理解了Softmax回归模型的原理。 接下来,让我们一起用pytorch实现Softmax回归模型。 首先导入所需的包和模块。

importtorchfromtorchimportnnfromtorch.nnimportinitimportnumpyasnpimportsys.path.append ' . ' ) import D2 lzh _ pytorrrizrimatintimportttinatstinathttthtttthimphon

2.torch.nn只支持一个batch的示例输入,不支持一个示例输入。 如果只有一个示例可以使用input.unsqueeze(0)添加一维。

取得并读取数据。 代码使用Fashion-MNIST数据集,设置了每次读取的批量大小。

batch_size=256train_iter,test _ ITER=d2l.load _ data _ fashion _ Mn ist (batch _ size ) ) ) ) ) )

softmax回归的输出层是全部连接层,所以线性模块就可以了。 每个选定的batch示例x的形状为[batch_size,1,28,28 ],因此在view ()中将x的形状转换为[batch_size,784,然后将其发送到所有连接层。

num _ inputs=784 num _ outputs=10 classlinearnet (nn.module ) :def_init_ ) self,

num_inputs, num_outputs): super(LinearNet, self).__init__() self.linear = nn.Linear(num_inputs, num_outputs) def forward(self, x): # x shape: (batch, 1, 28, 28) y = self.linear(x.view(x.shape[0], -1)) return ynet = LinearNet(num_inputs, num_outputs)

         我们将x形状转化的功能函数自定义一个FlattenLayer并记录在d2llzh_pytorch中方便后面使用。

class FlattenLayer(nn.Module): def __init__(self): super(FlattenLayer, self).__init__() def forward(self, x): # x shape: (batch, *, *, ...) return x.view(x.shape[0], -1)

        这样我们就可以更更⽅方便便地定义我们的模型:

from collections import OrderedDictnet = nn.Sequential( # FlattenLayer(), # nn.Linear(num_inputs, num_outputs) OrderedDict([ ('flatten', FlattenLayer()), ('linear', nn.Linear(num_inputs, num_outputs))]) )

        然后,我们使⽤用均值为0、标准差为0.01的正态分布随机初始化模型的权重参数。

init.normal_(net.linear.weight, mean=0, std=0.01)init.constant_(net.linear.bias, val=0)

        PyTorch提供了了一个包括softmax运算和交叉熵损失计算的函数。它的数值稳定性更好。

loss = nn.CrossEntropyLoss()

        我们使⽤用学习率为0.1的小批量量随机梯度下降作为优化算法。

optimizer = torch.optim.SGD(net.parameters(), lr=0.1)

        接下来,我们使用训练函数来训练模型。

def train_ch3(net, train_iter, test_iter, loss, num_epochs,batch_size,params=None, lr=None,optimizer=None): for epoch in range(num_epochs): train_l_sum, train_acc_sum, n = 0.0, 0.0, 0 for X, y in train_iter: y_hat = net(X) l = loss(y_hat, y).sum() # 梯度清零 if optimizer is not None: optimizer.zero_grad() elif params is not None and params[0].grad is not None: for param in params: param.grad.data.zero_() l.backward() if optimizer is None: d2l.sgd(params, lr, batch_size) else: optimizer.step() # “softmax回归的简洁实现”⼀一节将⽤用到 train_l_sum += l.item() train_acc_sum += (y_hat.argmax(dim=1) ==y).sum().item() n += y.shape[0] test_acc = evaluate_accuracy(test_iter, net) print('epoch %d, loss %.4f, train acc %.3f, test acc %.3f'% (epoch + 1, train_l_sum / n, train_acc_sum / n,test_acc)) num_epochs = 5d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs,batch_size, None, None, optimizer)

输出:

poch 1, loss 0.0031, train acc 0.745, test acc 0.790epoch 2, loss 0.0022, train acc 0.812, test acc 0.807epoch 3, loss 0.0021, train acc 0.825, test acc 0.806epoch 4, loss 0.0020, train acc 0.832, test acc 0.810epoch 5, loss 0.0019, train acc 0.838, test acc 0.823

参考: Dive-into-DL-PyTorch


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐