pytorch实现CNN卷积神经网络


Posted in Python onFebruary 19, 2020

本文为大家讲解了pytorch实现CNN卷积神经网络,供大家参考,具体内容如下

我对卷积神经网络的一些认识

    卷积神经网络是时下最为流行的一种深度学习网络,由于其具有局部感受野等特性,让其与人眼识别图像具有相似性,因此被广泛应用于图像识别中,本人是研究机械故障诊断方面的,一般利用旋转机械的振动信号作为数据。

    对一维信号,通常采取的方法有两种,第一,直接对其做一维卷积,第二,反映到时频图像上,这就变成了图像识别,此前一直都在利用keras搭建网络,最近学了pytroch搭建cnn的方法,进行一下代码的尝试。所用数据为经典的minist手写字体数据集

import torch
import torch.nn as nn
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
`EPOCH = 1
BATCH_SIZE = 50
LR = 0.001
DOWNLOAD_MNIST = True

从网上下载数据集:

```python
train_data = torchvision.datasets.MNIST(
 root="./mnist/",
 train = True,
 transform=torchvision.transforms.ToTensor(),
 download = DOWNLOAD_MNIST,
)

print(train_data.train_data.size())
print(train_data.train_labels.size())

```plt.imshow(train_data.train_data[0].numpy(), cmap='autumn')
plt.title("%i" % train_data.train_labels[0])
plt.show()

train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)

test_data = torchvision.datasets.MNIST(root="./mnist/", train=False)
test_x = torch.unsqueeze(test_data.test_data, dim=1).type(torch.FloatTensor)[:2000]/255.

test_y = test_data.test_labels[:2000]


class CNN(nn.Module):
 def __init__(self):
  super(CNN, self).__init__()
  self.conv1 = nn.Sequential(
   nn.Conv2d(
    in_channels=1,
    out_channels=16,
    kernel_size=5,
    stride=1,
    padding=2,
   ),
   
   nn.ReLU(),
   nn.MaxPool2d(kernel_size=2),
  )
  
  self.conv2 = nn.Sequential(
   nn.Conv2d(16, 32, 5, 1, 2),
   nn.ReLU(),
   nn.MaxPool2d(2),
  )
  
  self.out = nn.Linear(32*7*7, 10) # fully connected layer, output 10 classes
  
 def forward(self, x):
  x = self.conv1(x)
  x = self.conv2(x)
  x = x.view(x.size(0), -1) # flatten the output of conv2 to (batch_size, 32*7*7)
  output = self.out(x)
  return output
 
optimizer = torch.optim.Adam(cnn.parameters(), lr=LR)
loss_func = nn.CrossEntropyLoss()
 
 from matplotlib import cm
try: from sklearn.manifold import TSNE; HAS_SK = True
except: HAS_SK = False; print('Please install sklearn for layer visualization')
def plot_with_labels(lowDWeights, labels):
 plt.cla()
 X, Y = lowDWeights[:, 0], lowDWeights[:, 1]
 for x, y, s in zip(X, Y, labels):
  c = cm.rainbow(int(255 * s / 9)); plt.text(x, y, s, backgroundcolor=c, fontsize=9)
 plt.xlim(X.min(), X.max()); plt.ylim(Y.min(), Y.max()); plt.title('Visualize last layer'); plt.show(); plt.pause(0.01)

plt.ion()

for epoch in range(EPOCH):
 for step, (b_x, b_y) in enumerate(train_loader):
  output = cnn(b_x)
  loss = loss_func(output, b_y)
  optimizer.zero_grad()
  loss.backward()
  optimizer.step()
  
  if step % 50 == 0:
   test_output = cnn(test_x)
   pred_y = torch.max(test_output, 1)[1].data.numpy()
   accuracy = float((pred_y == test_y.data.numpy()).astype(int).sum()) / float(test_y.size(0))
   print("Epoch: ", epoch, "| train loss: %.4f" % loss.data.numpy(), 
     "| test accuracy: %.2f" % accuracy)
   
plt.ioff()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
推荐下python/ironpython:从入门到精通
Oct 02 Python
比较详细Python正则表达式操作指南(re使用)
Sep 06 Python
Python中请使用isinstance()判断变量类型
Aug 25 Python
详谈python在windows中的文件路径问题
Apr 28 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
python用pandas数据加载、存储与文件格式的实例
Dec 07 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
python实现批量视频分帧、保存视频帧
May 31 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
Jun 18 Python
Python 阶乘详解
Oct 05 Python
python+opencv3生成一个自定义纯色图教程
Feb 19 #Python
Python 实现Image和Ndarray互相转换
Feb 19 #Python
python3+opencv生成不规则黑白mask实例
Feb 19 #Python
使用celery和Django处理异步任务的流程分析
Feb 19 #Python
Python Numpy,mask图像的生成详解
Feb 19 #Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 #Python
Python中logging日志库实例详解
Feb 19 #Python
You might like
PHP 验证码的实现代码
2011/07/17 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
2013/12/14 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
BootStrap iCheck插件全选与获取value值的解决方法
2016/08/24 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
Bootstrap表格制作代码
2017/03/17 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
VUE搭建手机商城心得和遇到的坑
2019/02/21 Javascript
利用JavaScript将Excel转换为JSON示例代码
2019/06/14 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
简单谈谈python基本数据类型
2018/09/26 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
高清屏下canvas重置尺寸引发的问题的解决
2019/10/14 HTML / CSS
英国日常交易网站:Wowcher
2018/09/04 全球购物
硕士研究生自我鉴定范文
2013/12/27 职场文书
总账会计岗位职责
2014/03/13 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
教师职位说明书
2014/07/29 职场文书
人大调研汇报材料
2014/08/14 职场文书
陈安之励志演讲稿
2014/08/21 职场文书
初三化学教学反思
2016/02/22 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
MYSQL常用函数介绍
2022/05/05 MySQL