[学习笔记]softmax回归的简洁实现

PS: 我真的太喜欢CSDN的智能机器人了,回答了我很多小白的问题.

沐神写一行代码,我恨不得得写5行注释, 哭哭~~~

以下是代码及笔记:

# 通过深度学习框架的高级API能够使实现softmax回归变得更加容易

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)
# softmax回归的输出层是一个全连接层

# pytorch不会隐式地调整输入的形状
# 因此,我们定义了展平层flatten, 在线性层前调整网络输入的形状
# Sequential--连续的,按顺序的;依次发生的,相继发生的 ---- 是一个构造器
net=nn.Sequential(nn.Flatten(),nn.Linear(784,10))
# Flatten 就是把任何维度的一个tensor变成2D的tensor, 其中第0维度保留,其他维度全部展成一个向量
# nn.Linear 定义一个线性层
def init_weights(m):
    # 这个函数会对每一个Linear做一次比较,如果是Linear的话,就把它的weight进行正态分布初始化,标准差为0.01
    if type(m)==nn.Linear:
        nn.init.normal_(m.weight,std=0.01)
        # 这是一个PyTorch的函数,作用是对模型参数m中的权重weight进行正态分布初始化,标准差为0.01
        
net.apply(init_weights)
# 这段代码是在 PyTorch 中用于初始化神经网络权重的函数。它会遍历整个神经网络的模型,
# 对每个模型参数应用定义好的初始化函数 init_weights。
# init_weights 是用户自定义的一个函数,用于初始化参数。
# 例如,可以使用 PyTorch 自带的初始化方法,如torch.nn.init.xavier_uniform_(),
# 也可以使用自定义的初始化方法。这个函数可以保证每个模型参数的初始值都是随机的,
# 从而增加训练的多样性,提高模型的泛化能力。

运行结果:

# 在交叉熵损失函数中传递未归一化的预测,并同时计算softmax及其对数

loss=nn.CrossEntropyLoss(reduction='none')
# nn.CrossEntropyLoss() 是一个用于计算分类问题中的损失函数的函数。
# 它将输入和目标值作为输入,计算交叉熵损失。
# 在使用时,我们通常将模型输出的预测值与目标值一起传递给 CrossEntropyLoss() 函数。
# 该函数将计算并返回预测值和目标值之间的交叉熵损失。

 

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

trainer=torch.optim.SGD(net.parameters(),lr=0.1)
# 这段代码是定义了一个优化器(optimizer),
# 具体来说是随机梯度下降(Stochastic Gradient Descent,SGD)优化器。
# 在使用深度学习模型时,我们需要对模型进行训练,这个过程就需要使用优化器来更新模型的参数,
# 使得模型能够更好地拟合训练数据。
# 在使用 SGD 优化器时,我们需要指定一些参数,比如学习率(learning rate),动量(momentum)等。
# 例如,可以这样定义一个 SGD 优化器:
# optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
# 其中,model.parameters() 表示要优化的模型参数,lr=0.01 表示学习率为 0.01,momentum=0.9 表示动量为 0.9。
# 在训练过程中,我们可以使用 optimizer.step() 来更新模型参数,使用 optimizer.zero_grad() 来清空梯度。
# 调用之前定义的训练函数来训练模型

num_epochs=10
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值