2012年 多伦多大学Hinton提出的

AlexNet

AlexNet是第一个large-scale CNN, 从AlexNet之后CNN开始变得火了起来

贡献是提出了用多层最小卷积叠加来替换单个大卷积

AlexNet首次引入了dropout

AlexNet 该模型一共分为八层,5个卷积层, 以及3个全连接层 (注意这个8层是没算pooling层的)

https://cloud.tencent.com/developer/article/1575745

这里我们主要写模型,数据加载、训练等类似的步骤就直接用LeNet5的了

虽然论⽂中AlexNet使⽤ImageNet数据集,但因为ImageNet数据集训练时间较⻓,我们仍⽤CIFAR-10数据集来演⽰AlexNet。但用transforms.Resize([227, 227])把它拉到[227,227]上,但是这么做会让图片有点失真的

nn.ReLU(inplace=True)中inplace的作用

inplace-选择是否进行覆盖运算

nn.ReLU(inplace=True) 的意思就是对从上层网络Conv2d中传递下来的tensor直接进行修改,这样能够节省运算内存,不用多存储其他变量。否则就需要花费内存去多存储一个变量

nn.Dropout()

nn.Dropout(p), 默认p=0.5

Dropout的目的是防止过拟合

dropout层不会影响模型的shape

因为输入数据是[3,227,227], 我的4G显存的GPU只能容纳batch_size=32,再大就爆了

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import torch.utils.data.dataloader as dataloader
import pdb
import os
from torchvision.transforms import ToPILImage
import matplotlib.pyplot as pltclass AlexNet(nn.Module):def __init__(self):super(AlexNet, self).__init__()self.features = nn.Sequential(# x的输入: [b,3,227,227]  3是彩色图片三通道nn.Conv2d(3, 96, kernel_size=(11,11), stride=4, padding=1),#[b,96,55,55]nn.ReLU(inplace=True),# [b,96,55,55]nn.MaxPool2d(kernel_size=(3,3), stride=2),# [b,96,27,27]nn.Conv2d(96, 256, kernel_size=(5,5), stride=1, padding=2),# [b,256,27,27]nn.ReLU(inplace=True),# [b,256,27,27]nn.MaxPool2d(kernel_size=(3,3), stride=2),#[b,256,13,13]nn.Conv2d(256, 384, kernel_size=(3,3), stride=1, padding=1),# [b,384,13,13]nn.ReLU(inplace=True),# [b,384,13,13]nn.Conv2d(384, 384, kernel_size=(3,3), stride=1, padding=1),# [b,384,13,13]nn.ReLU(inplace=True),# [b,384,13,13]nn.Conv2d(384, 256, kernel_size=(3,3), padding=1),# [b,256,13,13]nn.ReLU(inplace=True),# [b,256,13,13]nn.MaxPool2d(kernel_size=(3,3), stride=2),# [b,256,6,6])self.classifier = nn.Sequential(nn.Dropout(),nn.Linear(256 * 6 * 6, 4096),nn.ReLU(inplace=True),nn.Dropout(),nn.Linear(4096, 4096),nn.ReLU(inplace=True),nn.Linear(4096, 10),)def forward(self, x):x = self.features(x)x = x.view(x.size(0), -1)x = self.classifier(x)return xtransform = transforms.Compose([transforms.Resize([227, 227]),transforms.ToTensor(),transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]
)batch_size = 32
train_set = torchvision.datasets.CIFAR10(root="dataset/",download=True,train=True,transform=transform
)train_loader = dataloader.DataLoader(dataset=train_set,batch_size=batch_size,shuffle=False
)test_set = torchvision.datasets.CIFAR10(root="dataset/",download=True,train=False,transform=transform
)
test_loader = dataloader.DataLoader(dataset=test_set,batch_size=batch_size,shuffle=True
)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = AlexNet()
model.to(device)lr = 1e-3
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=lr)show = ToPILImage()train_loss = []if os.path.isfile('params.pth'):model.load_state_dict(torch.load('params.pth'))print('load model parameters from params.pth')
else:for epoch in range(2):for i, (images, labels) in enumerate(train_loader):images = images.to(device)labels = labels.to(device)output = model(images)#output是[b,10]# print(output.shape)loss = criterion(output, labels)optimizer.zero_grad()loss.backward()optimizer.step()train_loss.append(loss)if i % 100 == 0:print('{} {}, Loss: {:.4f}'.format(epoch, i, loss.item()))print('Finished Training')torch.save(model.state_dict(), 'params.pth')print('model has been save into params.pth.')plt.plot(range(0,len(train_loss)), train_loss, color='blue')plt.legend(['value'], loc='upper right')plt.xlabel('step')plt.ylabel('value')plt.show()with torch.no_grad():correct = 0total = 0for (images, labels) in test_loader:images, labels = images.to(device), labels.to(device)output = model(images)_, predicted = torch.max(output.data, 1)total += labels.size(0)#pdb.set_trace()correct += (predicted == labels).sum().item()print("The accuracy of total {} images: {}%".format(total, 100 * correct / total))

LRN(local response normalization)局部响应标准化

LRN函数类似DROPOUT和数据增强作为relu激励之后防止数据过拟合而提出的一种处理方法。这个函数很少使用,基本上被类似DROPOUT这样的方法取代,见最早的出处AlexNet论文对它的定义

Pytorch之经典神经网络CNN(三) —— AlexNet(CIFAR-10) (LRN)相关推荐

  1. Pytorch之经典神经网络CNN(七) —— GoogLeNet(InceptionV1)(Bottleneck)(全局平均池化GAP)(1*1卷积)(多尺度)(flower花卉数据集)

    2014年 Google提出的 是和VGG同年出现的,在ILSVRC(ImageNet) 2014中获得冠军,vgg屈居第二 GoogLeNet也称Inception V1.之所以叫GoogLeNet ...

  2. PyTorch 实现经典模型2:AlexNet

    AlexNet 网络结构 论文总结 成功使用ReLU作为CNN的激活函数,并验证效果在较深的网络中超过了Sigmoid.成功解决了Sigmoid在网络较深时的梯度弥散问题. 训练时使用Dropout随 ...

  3. Pytorch之经典神经网络Generative Model(二) —— VAE (MNIST)

    变分编码器(Variational AutoEncoder)是自动编码器的升级版本, 其结构跟自动编码器是类似的, 也由编码器和解码器构成. 回忆一下, 自动编码器有个问题, 就是并不能任意生成图片, ...

  4. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.  技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献 ...

  5. 花书+吴恩达深度学习(十四)卷积神经网络 CNN 之经典案例(LetNet-5, AlexNet, VGG-16, ResNet, Inception Network)

    目录 0. 前言 1. LeNet-5 2. AlexNet 3. VGG-16 4. ResNet 残差网络 5. Inception Network 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  6. 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning...

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...

  7. 经典神经网络论文超详细解读(三)——GoogLeNet InceptionV1学习笔记(翻译+精读+代码复现)

    前言 在上一期中介绍了VGG,VGG在2014年ImageNet 中获得了定位任务第1名和分类任务第2名的好成绩,而今天要介绍的就是同年分类任务的第一名--GoogLeNet . 作为2014年Ima ...

  8. 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  9. 【卷积神经网络CNN 实战案例 GoogleNet 实现手写数字识别 源码详解 深度学习 Pytorch笔记 B站刘二大人 (9.5/10)】

    卷积神经网络CNN 实战案例 GoogleNet 实现手写数字识别 源码详解 深度学习 Pytorch笔记 B站刘二大人 (9.5/10) 在上一章已经完成了卷积神经网络的结构分析,并通过各个模块理解 ...

最新文章

  1. 选频放大电路对于150kHz导航信号进行放大检波
  2. Python 错误和异常
  3. CodeForces - 1333F Kate and imperfection(数论+贪心)
  4. java多线程为啥一直用的一个线程_一个Java多线程的问题,颠覆了我多年的认知!...
  5. 从Memcache转战Redis,聊聊缓存使用填过的“坑”
  6. ospf 几种LSA类型的总结
  7. access ps4战地1要ea_EA游戏订阅服务将于2019年7月登陆PS4平台,抢先游玩枪车球新作...
  8. 国内航线图 或城市之间连接图
  9. 手机怎么断开电脑微信连接服务器,微信如何用手机退出电脑登录不了怎么办
  10. 360也开源了一个 kubernetes 的管理后台系统 Wayne
  11. 大数据hadoop 面试经典题
  12. 新Word文档借用旧文档的部分样式
  13. Python量化交易平台开发教程系列4-事件驱动引擎原理和使用
  14. 软件破解简单示例演示
  15. 【拜占庭将军问题】这一计谋,可以让诸葛丞相兴复汉室
  16. LifeSmart云起局域网直接控制向往背景音乐
  17. C语言求任意数的阶层
  18. python中的max(x,key=str)
  19. 有道字典 Chrome Extension
  20. J0ker的CISSP之路:What's CISSP

热门文章

  1. 微信小程序:保持常亮
  2. app与服务器对接的http 协议与socket协议区别
  3. html5开发全景直播,H5 直播的疯狂点赞动画是如何实现的?
  4. java happens before_Java并发编程之happens-before
  5. 【脑机接口】利用MNE进行EEG数据预处理(SEED数据集)
  6. 使用PHP免费发送定时短信
  7. 弘辽科技:店铺选品的重要性
  8. 美国俚语:Dark meat?什么意思
  9. android 双卡开发获取sim卡默认数据卡,获取sim卡信息,sim1卡,sim2卡 2G/3G/4G信号强度
  10. PM2.5测量 -- PMS5003粉尘传感器使用