您的位置:首页 > 理论基础 > 计算机网络

pytorch 实现的cnn卷积神经网络

2019-03-02 13:33 411 查看

pytorch 实现的cnn卷积神经网络

简介

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

网络结构

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

大概的图片如下:

网络实现

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

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

运行结果如下:

训练步骤

训练数据

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

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感兴趣,欢迎去莫烦大大的学习区学习啊。

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: