最简单的CNN

  • 代码
  • 结果图

2021-07-27

代码

从今天起每天的一个,虽然现在是模仿,但是很开心,谢谢

# 构建卷积神经网络
"""卷积网络中的输入层与传统神经网络有些区别,需重新设计,训练模块基本一致"""
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as f
from torchvision import datasets, transforms
import matplotlib.pyplot as plt
import numpy as np# 1、首先读取数据
"""
分别构建训练集和测试集(验证集)
DataLoader来迭代取数据
"""
# 1.1 定义超参数
input_size = 28  # 图像的总尺寸28*28*1
num_classes = 10  # 标签的种类数
num_epochs = 3  # 训练的总循环周期
batch_size = 64  # 一个撮(批次)的大小,64张图片# 1.2 训练集
train_dataset = datasets.MNIST(root='./data',train=True,transform=transforms.ToTensor(),download=True)
# 1.3 测试集
test_dataset = datasets.MNIST(root='./data',train=False,transform=transforms.ToTensor())
# 1.4 构建batch数据
train_loader = torch.utils.data.DataLoader(dataset=train_dataset,batch_size=batch_size,shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset,batch_size=batch_size,shuffle=True)
# 2、卷积神经网络该怎么构建模块呢?
"""
一般卷积层,relu层,池化层可以写成一个套餐
注意卷积最后结果还是一个特征图,需要把特征图转换成向量才能做分类或者回归任务
"""class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()# 1、第一个卷积模块(单元)self.conv1 = nn.Sequential(  # 输入大小(1,28,28)nn.Conv2d(in_channels=1,  # 当前输入的特征图的个数,因为输入图是灰度图,所以channel=1out_channels=16,  # 要得到多少个特征图【输出特征图的个数,这里是用16个卷积核对当前图片进行特征提取,就会得到16个特征图】kernel_size=5,  # 卷积核大小【每个多大的小区域进行特征提取】stride=1,  # 步长,每个多大进行滑动padding=2,# 如果希望卷积后大小跟原来一样,需要设置padding=(kernel_size-1)/2 if# stride=1【padding的意思,我们对图像做边缘填充,padding=1表示在图像周围加一圈0,写2就是加2圈o】),nn.ReLU(),  # relu层nn.MaxPool2d(kernel_size=2),  # 进行池化操作(2*2区域),输出结果为:(16,14,14))# 2、第二个卷积模块(单元)self.conv2 = nn.Sequential(  # 下一套餐的输入(16,14,14)nn.Conv2d(16, 32, 5, 1, 1),  # 输出(32,14,14)nn.ReLU(),  # Relu层nn.MaxPool2d(2),  # 输出(32,7,7))self.out = nn.Linear(32 * 6 * 6, 10)  # 全连接层得到的结果# 3、前向传播:就是数据走一遍模型def forward(self, x):x = self.conv1(x)x = self.conv2(x)x = x.view(x.size(0), -1)  # 【因为下一层要做全连接了,我就把当前结果全部转换成向量的格式】flatten操作,结果为:(batch_size,32*7*7)output = self.out(x)  # 最后用向量(*)乘以w后+breturn output# 3、准确率作为评估标准
def accuracy(predictions, labels):pred = torch.max(predictions.data, 1)[1]rights = pred.eq(labels.data.view_as(pred)).sum()return rights, len(labels)# 4、训练网络模型
'1、实例化'
net = CNN()
'2、损失函数'
criterion = nn.CrossEntropyLoss()
'3、定义优化器,普通的随机的梯度下降法'
optizer = optim.Adam(net.parameters(), lr=0.001)
'4、开始循环训练'
for epoch in range(num_epochs):'5、当前epoch的结果保存下来'train_rights = []for batch_idx, (data, target) in enumerate(train_loader):  # 针对容器中的每一个批次进行循环net.train()output = net(data)loss = criterion(output, target)loss.backward()optizer.step()right = accuracy(output, target)train_rights.append(right)if batch_idx % 100 == 0: # 每隔100次在验证集上看效果是多少net.eval()val_rights = []for (data, target) in test_loader:output = net(data)right = accuracy(output, target)val_rights.append(right)# 6、准确率计算train_r = (sum([tup[0] for tup in train_rights]), sum([tup[1] for tup in train_rights]))val_r = (sum([tup[0] for tup in val_rights]), sum([tup[1] for tup in val_rights]))print('当前epoch:{} [{} / {}  ({:.0f}%)]\t损失:{:.6f}\t训练集准确率:{:.2f}\t测试集准确率:{:.2f}'.format(epoch,batch_idx * batch_size,len(train_loader.dataset),100. * batch_idx / len(train_loader),loss.data,100. * train_r[0].numpy() / train_r[1],100. * val_r[0].numpy() / val_r[1]))

结果图


卷积神经网络--MINIST数据集相关推荐

  1. tensorflow预定义经典卷积神经网络和数据集tf.keras.applications

    自己开发了一个股票软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1.1  tensorflow预定义经 ...

  2. PyTorch做神经网络MINIST数据集多分类

    PyTorch是Facebook的AI研究团队发布的python工具包,主要用于深度学习.这篇文章我们一起学习一下如何使用PyTorch搭建神经网络训练分类模型,这里我们用的数据集是Yann LeCu ...

  3. 计算机视觉学习10_LeNet_卷积神经网络_Mnist数据集分析

    文章目录 原理部分 LeNet5 数据与实验可视化 匹配结果分析 个人数据匹配 代码节选 原理部分 卷积神经网络参考:https://my.oschina.net/u/876354/blog/1620 ...

  4. 简单的卷积神经网络编程,卷积神经网络算法代码

    关于AlphaGo的一些错误说法 最近看了一些关于alphago围棋对弈的一些人工智能的文章,尤其是美国人工智能方面教授的文章,发现此前媒体宣传的东西几乎都是错的,都是夸大了alpha狗.我做了一个阅 ...

  5. 第二课.图卷积神经网络

    目录 卷积神经网络 图卷积神经网络 GNN数据集 图的表示 GCN GNN的基准化:Benchmarking Graph Neural Networks 卷积神经网络 在计算机视觉中,卷积网络是一种高 ...

  6. TensorFlow 2.0 mnist手写数字识别(CNN卷积神经网络)

    TensorFlow 2.0 (五) - mnist手写数字识别(CNN卷积神经网络) 源代码/数据集已上传到 Github - tensorflow-tutorial-samples 大白话讲解卷积 ...

  7. TensorFlow2.0(九)--Keras实现基础卷积神经网络

    Keras实现基础卷积神经网络 1. 卷积神经网络基础 2. Keras实现卷积神经网络 2.1 导入相应的库 2.2 数据集的加载与处理 2.3 构建模型 2.4 模型的编译与训练 2.5 学习曲线 ...

  8. 独家 | 一文带你上手卷积神经网络实战(附数据集学习资料)

    原文标题:Understanding deep Convolutional Neural Networks with a practical use-case in Tensorflow and Ke ...

  9. Python深度学习之搭建小型卷积神经网络(Kaggle网站Dogs-vs-Cats数据集)

    完全来源与<Python深度学习>中的例子,仅供学习只用. Cats vs. Dogs(猫狗大战)是Kaggle大数据竞赛的数据集,数据集由训练数据和测试数据组成,训练数据包含猫和狗各12 ...

  10. 深度学习之利用TensorFlow实现简单的卷积神经网络(MNIST数据集)

    卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习 ...

最新文章

  1. MFC中GetDlgItemInt()方法的疑惑与使用总结
  2. 首发 | 腾讯把需求和代码统一的内幕
  3. openfeign使用_Feign使用基于配置服务发现
  4. 计算机组装虚拟实验,组装计算机的虚拟实验室
  5. 关于驰骋工作流程引擎节点访问规则的变更发布
  6. 什么是 ODBC – 开放式数据库连接
  7. 照相长度测试软件,拍张照片就知道你的长度了,还要什么测量工具!
  8. 扩展欧几里得算法(Python)
  9. java j2se下载_J2SE基础之下载eclipse并创建项目
  10. 列表解析式与生成器表达式
  11. C# NModbus4 TCP 主从站通信样例
  12. js中的~~:转换成整型数字的神器(效率)
  13. “L2TP 链接尝试失败,因为安全层不能与远程计算机协商兼容的参数”解决方案
  14. python3 爬虫 爬取华为应用市场 APP应用评论(一)爬取全部评论——学霸君
  15. 百度旋转验证码(8-24,js逆向)
  16. 特征缩减技术(shrinkage): lasso和岭回归
  17. 服务器项目验签失败,服务器验签失败
  18. [原创+总结]防火墙常见日志分析
  19. Elasticsearch:运用 Java 创建索引并写入数据
  20. 计算机 小学数学应用题教学设计,小学数学如何有效地进行应用题教学设计

热门文章

  1. 三菱无机房电梯故障代码查询_三菱无机房电梯的故障代码
  2. PPAPI插件与浏览器的通信
  3. 基于关系推理的自监督学习无标记训练
  4. 【Unity步步升】导航网格、寻路算法及AI行为树等应用与实践...
  5. 电子表程序c语言,单片机c语言编程实例:电子表
  6. Xshell清屏快捷键
  7. linux mysql 数据恢复_怎样恢复Mysql数据库误删除后的数据
  8. 74cms v5.0.1漏洞
  9. sap服务器安装双系统教程,Ghost安装双系统安装使用图文教程
  10. 三次hermite插值多项式例题_2点三次Hermite插值多项式解析.ppt