问题
Mnist手写数字识别数据集作为一个常见数据集,包含10个类别,在此次深度学习的过程中,我们通过pytorch提供的库函数,运用全连接神经网络实现手写数字的识别
方法
设置参数
input_size = 784 hidden_size = 500 output_size = 10 num_epochs = 5 batch_size = 100 l2earning_rate = 0.001 |
下载mnist数据集,并将其分为训练集和测试集
定义一个带有隐藏层的全连接神经网络
class NeuralNet(nn.Module): def__init__(self,input_size,hidden_size,output_size): super(NeuralNet, self).__init__() self.fc1 = nn.Linear(input_size, hidden_size) self.relu = nn.ReLU() self.fc2 = nn.Linear(hidden_size, output_size) def forward(self, x): out = self.fc1(x) out = self.relu(out) out = self.fc2(out) return out model=NeuralNet(input_size,hidden_size,output_size).to(device) #类的实例化 |
损失函数和优化算法
训练模型
total_step = len(train_loader) #训练数据的大小,也就是含有多少个barch for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): images = images.reshape(-1, 28*28).to(device) labels = labels.to(device) outputs = model(images) loss = criterion(outputs, labels) optimizer.zero_grad() loss.backward() optimizer.step() if (i+1) % 100 == 0: print ('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' .format(epoch+1, num_epochs, i+1, total_step, loss.item())) |
测试模型
实验结果
结语
通过此次试验发现,在训练数据时,传入网络的是一个独立标签,即,我们希望输出的是2,但输出的不是用实数2做标签,而是用一个表示实数2的一个十维向量[0,0,1,0,0,0,0,0,0,0],对于分类问题,这种表示尤为重要。