使用mnist数据集训练全连接神经网络
一、引用数据集并封装成批次数据from torchvision import datasets,transforms import torch import torch.nn as nn import torch.nn.functional as F devicetorch.device(cuda:0 if torch.cuda.is_available() else cpu) #引入数据集 train_datasetdatasets.MNIST(rootD:/mypython/MNISTdataset, #数据集下载或存放的地址 trainTrue, #表示是训练数据 transformtransforms.ToTensor(), downloadFalse) #如果未下载则需要设为True #提取数据集中的前两千条数据 indiceslist(range(2000)) train_datasettorch.utils.data.Subset(train_dataset,indices) #将数据集封装成批次数据 train_loadertorch.utils.data.DataLoader( train_dataset, batch_size50, #批次大小为50 shuffleTrue, )二、引入激活函数及网络模型class Mish(nn.Module): #引入Mish激活函数 def __init__(self): super().__init__() def forward(self,x): xx*(torch.tanh(F.softplus(x))) return x class classify(nn.Module): #引入全连接网络模型并使用softmax激活函数 def __init__(self): super().__init__() self.linear1nn.Linear(784,12) self.mish1Mish() self.linear2nn.Linear(12,10) self.mish2Mish() self.linear3nn.Linear(10,10) self.softmaxnn.Softmax(dim1) def forward(self,x): mid1self.linear1(x) out1self.mish1(mid1) mid2self.linear2(out1) out2self.mish2(mid2) out3self.linear3(out2) return self.softmax(out3)三、引入损失函数及优化器并训练模型#实例化模型并使用GPU训练 modelclassify() modelmodel.to(devicedevice) #使用Adam优化器学习率为0.04 optimizertorch.optim.Adam(model.parameters(),lr0.04) #使用交叉熵损失函数 loss_functorch.nn.CrossEntropyLoss() #训练模型 for epoch in range(2): for step,(x,y) in enumerate(train_loader): #将数据形状由502828转为50784 b_xx.view(-1,784) b_xb_x.to(devicedevice) yy.to(devicedevice) outputmodel(b_x) lossloss_func(output,y) optimizer.zero_grad() loss.backward() optimizer.step() #每循环五十次打印一次运行日志 if step % 500: print(Epoch:,epoch,| train loss:%.4f % loss.data)