动手学深度学习(Pytorch版)代码实践 -深度学习基础-06Softmax回归简洁版

06Softmax回归简洁版

python 复制代码
import torch
from torch import nn
from d2l import torch as d2l
import liliPytorch as lp

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

#初始化
#Pytorch 不会隐式地调整输入的形状
net = nn.Sequential(nn.Flatten(), nn.Linear(784,10))
"""
nn.Sequential是PyTorch中的一个容器,
它将多个层(modules)按照它们在传入的顺序组合在一起。
数据按顺序通过这些层进行传递。

nn.Flatten():这是一个将输入张量(tensor)展平的层。
它会将多维的输入张量展平成一维。

nn.Linear(784, 10):这是一个全连接层(或线性层)。
它将输入张量从大小为784的向量变换为大小为10的向量。
这个操作相当于进行一个矩阵乘法,再加上一个偏置向量。
通常用于分类任务中将展平后的图像数据映射到10个类别
"""

#这个参数是神经网络中的一个层(module)
def init_weights(m):
    #检查参数m是否是一个全连接层(nn.Linear)。
    #只有当m是nn.Linear类型时,才会对其进行权重初始化。
    if type(m) == nn.Linear:
        """
        nn.init.normal_函数对其权重进行初始化。
        nn.init.normal_函数将权重初始化为服从均值为0,标准差为0.01的正态分布的值。
        注意这里使用的是原地操作(in-place operation),即直接修改了m.weight的值。
        """
        nn.init.normal_(m.weight, std=0.01)

"""
apply方法会递归地遍历net中的所有子模块,
并将init_weights函数应用到每一个模块上。
这样,如果net中有多个全连接层(nn.Linear),
init_weights函数就会对每一个全连接层的权重进行初始化。
"""
net.apply(init_weights)

#损失函数
"""
这个损失函数结合了nn.LogSoftmax和nn.NLLLoss,
它先计算每个类别的预测概率的对数(通过LogSoftmax),
然后计算真实类别的负对数似然(Negative Log Likelihood)
"""
loss = nn.CrossEntropyLoss(reduction='none')

#小批量随机梯度下降作为优化算法
#net.parameters()返回神经网络net中所有需要优化的参数
trainer = torch.optim.SGD(net.parameters(), lr=0.1)

#训练模型
#d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer) #报错
#将softmax基础班中的代码,封装到liliPytorch中,调用
lp.train_ch3(net, train_iter, test_iter, loss, num_epochs=5, updater=trainer)
d2l.plt.show() #可视化

运行结果:

python 复制代码
<Figure size 350x250 with 1 Axes>
epoch: 1,train_loss: 0.7846037483851115,train_acc: 0.7511833333333333,test_acc: 0.7936
<Figure size 350x250 with 1 Axes>
epoch: 2,train_loss: 0.5698513298034668,train_acc: 0.8127833333333333,test_acc: 0.8021
<Figure size 350x250 with 1 Axes>
epoch: 3,train_loss: 0.5255562342961629,train_acc: 0.8256,test_acc: 0.8002
<Figure size 350x250 with 1 Axes>
epoch: 4,train_loss: 0.5013835444132487,train_acc: 0.83245,test_acc: 0.8235
<Figure size 350x250 with 1 Axes>
epoch: 5,train_loss: 0.4861805295308431,train_acc: 0.8363666666666667,test_acc: 0.8167
相关推荐
@鱼香肉丝没有鱼18 分钟前
Transformer底层原理—位置编码
人工智能·深度学习·transformer·位置编码
深度学习实战训练营31 分钟前
HRNet:深度高分辨率表示学习用于人体姿态估计-k学长深度学习专栏
人工智能·深度学习
架构师李哲33 分钟前
让智能家居“听懂人话”:我用4B模型+万条数据,教会了它理解复杂指令
深度学习·aigc
CoovallyAIHub1 小时前
是什么支撑L3自动驾驶落地?读懂AI驾驶与碰撞预测
深度学习·算法·计算机视觉
碧海银沙音频科技研究院1 小时前
论文写作word插入公式显示灰色解决办法
人工智能·深度学习·算法
听风吹等浪起2 小时前
机器学习算法:随机梯度下降算法
人工智能·深度学习·算法·机器学习
拉姆哥的小屋2 小时前
【深度学习实战】基于CyclePatch框架的电池寿命预测:从NASA数据集到Transformer模型的完整实现
人工智能·深度学习·transformer
音视频牛哥2 小时前
SmartMediakit技术白皮书:与主流云厂商(PaaS)的技术定位对比与选型指南
人工智能·深度学习·机器学习·音视频·gb28181对接·rtsp服务器·rtsp播放器rtmp播放器
Rabbit_QL2 小时前
【LLM基础教程】从序列切分到上下文窗口02_三种数据切分方法
深度学习·语言模型
aitoolhub2 小时前
人脸识别技术:从传统方法到深度学习的演进路径
人工智能·深度学习