本文主要是介绍动手学深度学习3.7 softmax回归的简洁实现-笔记练习(PyTorch),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以下内容为结合李沐老师的课程和教材补充的学习笔记,以及对课后练习的一些思考,自留回顾,也供同学之人交流参考。
本节课程地址:Softmax 回归简洁实现_哔哩哔哩_bilibili
本节教材地址:3.7. softmax回归的简洁实现 — 动手学深度学习 2.0.0 documentation (d2l.ai)
本节开源代码:...>d2l-zh>pytorch>chapter_linear-networks>softmax-regression-concise.ipynb
softmax回归的简洁实现
在 3.3节 中, 我们发现通过深度学习框架的高级API能够使实现线性回归变得更加容易。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在 3.6节 中一样, 继续使用Fashion-MNIST数据集,并保持批量大小为256。
import torch
from torch import nn
from d2l import torch as d2l
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
初始化模型参数
如我们在 3.4节 所述, softmax回归的输出层是一个全连接层。 因此,为了实现我们的模型, 我们只需在Sequential
中添加一个带有10个输出的全连接层。 同样,在这里Sequential
并不是必要的, 但它是实现深度模型的基础。 我们仍然以均值0和标准差0.01随机初始化权重。
# PyTorch不会隐式地调整输入的形状。因此,
# 我们在线性层前定义了展平层(flatten),来调整网络输入的形状
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
# 图像的第一维(channel)保留,其余维度(像素)展平成一维def init_weights(m):if type(m) == nn.Linear:nn.init.normal_(m.weight, std=0.01)
# 初始化权重值
net.apply(init_weights);
;
重新审视Softmax的实现
在前面 3.6节 的例子中, 我们计算了模型的输出,然后将此输出送入交叉熵损失。 从数学上讲,这是一件完全合理的事情。 然而,从计算角度来看,指数可能会造成数值稳定性问题。
回想一下,softmax函数 , 其中
是预测的概率分布。
是未
这篇关于动手学深度学习3.7 softmax回归的简洁实现-笔记练习(PyTorch)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!