pytorch 实现的cnn卷积神经网络

pytorch 实现的cnn卷积神经网络

  • 简介
  • 网络结构
  • 网络实现
  • 训练步骤
    • 训练数据
    • 测试数据
    • 运行截图

简介

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 [1-2] 。由于卷积神经网络能够进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)” [3] 。

网络结构

卷积神经网络大致的结构顺序是:输入层 -> 卷积层->激活层->池化层->卷积层->激活层->池化层->全连接层-> 展平层

大概的图片如下:pytorch 实现的cnn卷积神经网络_第1张图片

网络实现

就像上面说的那样一步一步写就好了呀。

import torch
import torchvision
import torch.nn as nn
import matplotlib.pyplot as plt
import torch.autograd.variable as Variable
import torch.utils.data as Data

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1=nn.Sequential(
            nn.Conv2d(
                in_channels=1,
                out_channels=16,
                kernel_size=2,
            ),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),
        )
        self.conv2=nn.Sequential(
             nn.Conv2d(
                in_channels=16,
                out_channels=32,
                kernel_size=2,
            ),
            nn.ReLU(),
            nn.MaxPool2d(kernel_size=2),
        )
        self.fc=nn.Linear(32*7*7,10)

    def forward(self, x):
        x=self.conv1(x),
        x=self.conv2(x),
        x=x.view(x.size(0),-1),
        return self.fc(x)

就这样,一个完整的cnn卷积神经网络就搭建完成了。

现在print输出一下

print(Net())

运行结果如下:
pytorch 实现的cnn卷积神经网络_第2张图片

训练步骤

训练数据

既然网络搭建完成了,接下来的事情当然是训练啦,训练的话当然得有数据啦

EPOCH=1
BATCH_SIZE=50
LR=0.001
DOWNLOAD_MINST= True

# 训练的数据
train_data=torchvision.datasets.MNIST(
    root='./mnist',
    train=True,
    transform=torchvision.transforms.ToTensor(),
    download=DOWNLOAD_MINST
)

上面的代码会自动将训练数据下载到你的当前目录的mnist文件夹内,当你文件下载好后,以后再运行的时候记得把DOWNLOAD_MINST参数改成False,避免重复下载文件。

rnn =Net()  #实例化
# print(rnn)

optimizer=torch.optim.Adam(rnn.parameters(),lr=0.01)
loss_fuc=nn.CrossEntropyLoss()

for epoch in range(EPOTCH):
    for step,x,y in enumerate(train_loader):   #trainloader 是训练的数据
        out_put=rnn(x)
        loss=loss_fuc(out_put,y)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        if epoch%2==0:
            # print something
            test_output=cnn(test_x)
                pred_y=torch.max(test_output,1)[1].cuda().data.squeeze()
                # accuracy = float((pred_y == test_y).astype(int).sum()) / float(test_y.size(0))
                accuracy=float(torch.sum(pred_y==test_y))/test_y.size(0)
                print('EPOCH:',epoch,'| train loss: %.4f' %loss.data,'| test accuracy: %.2f' %accuracy)
            

测试数据

光这样还不能看出咱的神经网络预测的结果吧,那再来一个测试数据

test_data=torchvision.datasets.MNIST(
    root='./mnist/',
    train=False,
)


# 此段代码置于末尾
   test_output=cnn(test_x[:10])
    pred_y=torch.max(test_output,1)[1].cuda().data.squeeze()
    print(pred_y,'prediction number')
    print(test_y[:10], 'real number')

运行截图

pytorch 实现的cnn卷积神经网络_第3张图片
我们可以看到最后的准确率还是蛮高的哈,预测的图片上的前十个数字都对了。

这篇文章是在我看了莫烦大大的学习视频后写的,如果大家对Pytorch感兴趣,欢迎去莫烦大大的学习区学习啊。

网址如下啦:
https://morvanzhou.github.io/tutorials/machine-learning/torch/1-1-A-ANN-and-NN/

你可能感兴趣的:(python)