3.7 softmax回归的简洁实现

发布时间 2023-05-30 17:33:35作者: Ann-

1. 导入包,加载Mnist数据集

 2.

代码:

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)

# PyTorch不会隐式地调整输入的形状。因此,
# 我们加入一个Flatten()层展平。Flatten()就是把任何维度的Tensor变成一个2D的tensor
# 第0维度保留,剩下的维度全部展成一个向量
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))

#init_weights这个函数会对每个layer做一次,m就是我们当前的layer
def init_weights(m):
    #如果m是一个nn.Linear
    if type(m) == nn.Linear:
        #那么我们就把它的weight初始化成(均值默认为0)方差为1
        nn.init.normal_(m.weight, std=0.01)
    return

#把init_weights函数应用到我们的net上来
#即按照每一层去跑一下这个函数
net.apply(init_weights);

#定义损失函数为交叉熵损失
loss = nn.CrossEntropyLoss(reduction='none')

#定义训练器为梯度下降
trainer = torch.optim.SGD(net.parameters(), lr=0.1)

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