> 文章列表 > Pytorch全连接神经网络实现手写数字识别

Pytorch全连接神经网络实现手写数字识别

Pytorch全连接神经网络实现手写数字识别

问题

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()))

测试模型

实验结果

Pytorch全连接神经网络实现手写数字识别

结语

通过此次试验发现,在训练数据时,传入网络的是一个独立标签,即,我们希望输出的是2,但输出的不是用实数2做标签,而是用一个表示实数2的一个十维向量[0,0,1,0,0,0,0,0,0,0],对于分类问题,这种表示尤为重要。