环境为:练习1的环境
代码简要解析
导入模块
导入PyTorch
导入Torch中的nn模块
导入d2l中torch模块 并命名为d2l
import torch
from torch import nn
from d2l import torch as d2l
获取数据
从Fashion-MNIST中获取batch_size个数据 注意此处为28*28的像素图像 d2l.load_data_fashion_mnist(batch_size) 函数加载 Fashion-MNIST 数据集,并返回两个迭代器
batch_size=100
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)
初始化模型和参数
Flatten()将输入为28*28的像素图像摊开成一组784长的数组 作为特征值 输入
nn.Linear() 为784输入 10输出的层
net.apply(init); 是将其中init函数作为所有可变参数的初始化方式 注意:m是层 既对每层m进行判断 符合条件对m的权重进行初始化
type(m) == nn.Linear 用于检查变量 m 是否属于 PyTorch 中的线性层(nn.Linear
net=nn.Sequential(nn.Flatten(),nn.Linear(784,10))
def init_weights(m):
if type(m)==nn.Linear:
nn.init.normal_(m.weight,std=0.01)
net.apply(init_weights)
初始化损失函数 这里为交叉熵损失函数
loss=nn.CrossEntropyLoss(reduction='none')
设定梯度下降算法
torch.optim.SGD()
trainer=torch.optim.SGD(net.parameters(),lr=0.1)
训练
这里的d2l是李沐老师自己写的,想要运行成功,理论上需要把d2l下载下来
网址:https://github.com/d2l-ai/d2l-zh
num_epochs=10;
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
我所学习到的
获得Fashion-MNIST的数据
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size)
对输入进行平铺处理 其本质是把每个像素点都当作特征值
nn.Flatten()
多层的权重初始化
net.apply(init_weights)
交叉熵损失函数
loss=nn.CrossEntropy()