基于pytorch的MNIST分类实战
模型的损失函数与优化函数
(1)选用MSELoss作为损失函数(均方损失函数)
MSELoss的作用是计算预测值和真实值之间的欧氏距离。预测值和真实值越接近,两者的均方差就越小,均方差函数常用于线性回归模型的计算
loss=torch.nn.MSELoss(reduction="sum")(pred,y_batch)
(2)选用Adam优化器作为优化函数
optimizer=torch.optim.Adam(model.parameters(),lr=2e-5)
数据图像的获取与标签的说明
#对数据进行获取
#MNIST数据集--一个用来训练各种图像处理系统的二进制图像数据集
import numpy as np
x_train=np.load("./dataset/mnist/x_train.npy")
y_train_label=np.load("./dataset/mnist/y_train_label.npy")
one_hot编码函数
用于将分类数据转换为向量形式
x=torch.tensor(y_train_label[:5],dtype=torch.int64)
#定义一个张量输入,因为此时有5个数值,且最大值是9,类别数是10
#所以我们可以得到y的输出结果的形状为shape=(5,10),即5行12列
y=torch.nn.functional.one_hot(x,10)
#一个参数张量x,10为类别数
多层感知机的模型结构
class NeuralNetwork(nn.Module):
def __init__(self):
super(NeuralNetwork,self).__init__()
self.flatten=nn.Flatten()
self.linear_relu_stack=nn.Sequential(
nn.Linear(28*28,312),
nn.ReLU(),
nn.Linear(312,256),
nn.ReLU(),
nn.Linear(256,10)
)
def forward(self,input):
x=self.flatten(input)
logits=self.linear_relu_stack(x)
return logits
损失函数的表示与计算
import torch
y=torch.LongTensor([0])
z=torch.Tensor([0.2,0.1,-0.1])
criterion=torch.nn.CrossEntropyLoss()
loss=criterion(z,y)
print(loss)
基于pytorch的手写体识别的实现
import os
import torch
import numpy as np
from tqdm import tqdm
batch_size=320#设定每次训练的批次数