赞
踩
import torch from torch import nn from d2l import torch as d2l import liliPytorch as lp net = nn.Sequential( nn.Flatten(), nn.Linear(784,256), nn.ReLU(), nn.Linear(256,10) ) #函数接受一个参数 m,通常是一个神经网络模块(例如,线性层,卷积层等) def init_weights(m): #这行代码检查传入的模块 m 是否是 nn.Linear 类型,即线性层(全连接层) if type(m) == nn.Linear: nn.init.normal_(m.weight,std=0.01) #m.weight 是线性层的权重矩阵。 #std=0.01 指定了初始化权重的标准差为 0.01,表示权重将从均值为0,标准差为0.01的正态分布中随机采样。 #model.apply(init_weights) 会遍历模型的所有模块,并对每个模块调用 init_weights 函数。 #如果模块是 nn.Linear 类型,则初始化它的权重。 net.apply(init_weights) batch_size, lr, num_epochs = 256, 0.1, 10 loss = nn.CrossEntropyLoss(reduction='none') trainer = torch.optim.SGD(net.parameters(),lr=lr) train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) #训练 lp.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer) #验证 lp.predict_ch3(net, test_iter) d2l.plt.show()
运行结果:
<Figure size 350x250 with 1 Axes>
epoch: 1,train_loss: 1.0443685918807983,train_acc: 0.64345,test_acc: 0.7608
<Figure size 350x250 with 1 Axes>
epoch: 2,train_loss: 0.5980708345413208,train_acc: 0.7904166666666667,test_acc: 0.7707
<Figure size 350x250 with 1 Axes>
epoch: 3,train_loss: 0.5194601311365763,train_acc: 0.8209166666666666,test_acc: 0.8143
<Figure size 350x250 with 1 Axes>
epoch: 4,train_loss: 0.4801325536727905,train_acc: 0.8319666666666666,test_acc: 0.827
<Figure size 350x250 with 1 Axes>
epoch: 5,train_loss: 0.4518238489786784,train_acc: 0.8414833333333334,test_acc: 0.8358
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。