动手学深度学习(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
相关推荐
程序员打怪兽21 小时前
详解Visual Transformer (ViT)网络模型
深度学习
CoovallyAIHub3 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub3 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
用户1474853079744 天前
AI-动手深度学习环境搭建-d2l
深度学习
OpenBayes贝式计算4 天前
解决视频模型痛点,TurboDiffusion 高效视频扩散生成系统;Google Streetview 涵盖多个国家的街景图像数据集
人工智能·深度学习·机器学习
OpenBayes贝式计算4 天前
OCR教程汇总丨DeepSeek/百度飞桨/华中科大等开源创新技术,实现OCR高精度、本地化部署
人工智能·深度学习·机器学习
在人间耕耘5 天前
HarmonyOS Vision Kit 视觉AI实战:把官方 Demo 改造成一套能长期复用的组件库
人工智能·深度学习·harmonyos