热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pytorch深度学习实战lesson23

第二十三课AlexNetAlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更

第二十三课 AlexNet

       AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet.

       其官方提供的数据模型,准确率达到57.1%,top 1-5 达到80.2%. 这项对于传统的机器学习分类算法而言,已经相当的出色。

目录

理论部分

实践部分




理论部分

       机器学习在2000年初期最主流的算法是核方法。其核心是:首先提取特征,然后用核函数计算相关性,也就是说如何判断在高维空间的两个点是如何相关的。核方法是通过拉伸空间把空间变成想要的样子。

       卷积神经网络通常用于处理图片,也就是计算机视觉。计算机视觉是从几何学过来的。

       特征工程在10-15年前是深度学习的主要手段,它探究图片抽取特征的方法。

       过去60年的发展趋势:

       深度神经网络的兴起离不开数据的进步。这里要提到一个非常著名的数据集——ImageNet,它主要用于物体分类,它和mnist数据集的主要区别是:它不是做黑白的手写数字的分类,而是做彩色自然物体的分类,每张图片的大小、样本数还有类数都要比mnist数据集复杂得多。

       因为数据集的扩大和复杂化,因此就允许我使用更深层的网络去抽取里面更复杂的信息。

       下面让我们来看看冠军数据集是如何处理更为复杂的数据集的。

       Alexnet其实本质上是个更深更大的lenet。

Alexnet能获得成功主要在于:

1、构造CNN相对来说比较简单,不需要了解太多计算机方面的知识,它还可以比较方便的跨到不同领域去解决问题;

2、CNN和softmax是一起训练的,可以更加高效。

下面是Alexnet和lenet的对比图:

相比于lenet,Alexnet的核窗口更大,步长更大(否则计算会很难),池化窗口更大,通道更多,层数稍多,隐藏层变大。


实践部分

首先看一下 accuracy ,lenet测试的精度也是0.82,所以现在 Alex net 就直接把我的精度变到了 0.88 ,而且它的好处是没有太多 overfitting 在里面,这是因为学习率比较低,而且我们就跑了 10 epoch 其实loss 还在往下降。所以这一块 Alex 绝对是能够 overfeed 到这个数据集的,只是我们学习率比较低,然后没有跑很多次数据。所以 overfitting 还没有发生在这个地方,大家可以去把那个把学习率改大一点,应该是能看到过过拟合情况。所以但是另外一块就是说主要是我的精度有提升了。

第二个是说代价是什么?lenet训练速度大概是 9 万的,现在Alexnet的训练速度变成了4000,就是慢了 20 倍。所以为什么是说你enet计算量比Alexnet少个 200 倍的样子。但为什么这里只慢了 20 倍呢?是因为lenet太小了,它都无法使用我们的 GPU 的核,我们 GPU 有上千个核,就是说这个 lenet批量很小,然后卷积又很小,它的并行度很差,就是根本无法用上我们 GPU 上千个核。 so ,Alex 相对来说会好一点,但后面的网络更加是适合 GPU 计算。所以 alexnet 相对来说在 GPU 的使用率上,大概是百分之七八十。所以就意味着是我虽然比你计算量多了 200 倍,但实际上也就慢了 20 倍。而且你可以看到Alexnet这个其实不慢,每秒钟能够跑个 4000 个样本。如果你就算是 image net 的话,那么也就120 万个样本的话,那么也就是 3000 秒能跑完,就是将近一个小时能够跑迭代一次数据。在 MG net 上训练100 轮的话,那就是 100 个小时在单卡上也能跑完 100 个小时八九天的样子。所以就是 Alex net 一个性能,所以看到是慢的 20 倍精度从 0.8 涨到了0.88。

 code:

#深度卷积神经网络(AlexNet)
import torch
from torch import nn
from d2l import torch as d2l
import matplotlib.pyplot as plt
net = nn.Sequential(nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2),nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),nn.MaxPool2d(kernel_size=3, stride=2), nn.Flatten(),nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p=0.5),nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p=0.5),nn.Linear(4096, 10))
#我们构造一个 单通道数据,来观察每一层输出的形状
X = torch.randn(1, 1, 224, 224)
for layer in net:X = layer(X)print(layer.__class__.__name__, 'Output shape:\t', X.shape)
#Fashion-MNIST图像的分辨率 低于ImageNet图像。 我们将它们增加到 224×224
batch_size = 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
#训练AlexNet
lr, num_epochs = 0.01, 10
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
plt.show()

Conv2d Output shape:     torch.Size([1, 96, 54, 54])
ReLU Output shape:     torch.Size([1, 96, 54, 54])
MaxPool2d Output shape:     torch.Size([1, 96, 26, 26])
Conv2d Output shape:     torch.Size([1, 256, 26, 26])
ReLU Output shape:     torch.Size([1, 256, 26, 26])
MaxPool2d Output shape:     torch.Size([1, 256, 12, 12])
Conv2d Output shape:     torch.Size([1, 384, 12, 12])
ReLU Output shape:     torch.Size([1, 384, 12, 12])
Conv2d Output shape:     torch.Size([1, 384, 12, 12])
ReLU Output shape:     torch.Size([1, 384, 12, 12])
Conv2d Output shape:     torch.Size([1, 256, 12, 12])
ReLU Output shape:     torch.Size([1, 256, 12, 12])
MaxPool2d Output shape:     torch.Size([1, 256, 5, 5])
Flatten Output shape:     torch.Size([1, 6400])
Linear Output shape:     torch.Size([1, 4096])
ReLU Output shape:     torch.Size([1, 4096])
Dropout Output shape:     torch.Size([1, 4096])
Linear Output shape:     torch.Size([1, 4096])
ReLU Output shape:     torch.Size([1, 4096])
Dropout Output shape:     torch.Size([1, 4096])
Linear Output shape:     torch.Size([1, 10])
training on cuda:0

*n
loss 0.327, train acc 0.879, test acc 0.883
1447.3 examples/sec on cuda:0

进程已结束,退出代码0



推荐阅读
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 2017亚马逊人工智能奖公布:他们的AI有什么不同?
    事实上,在我们周围,“人工智能”让一切都变得更“智能”极具讽刺意味。随着人类与机器智能之间的界限变得模糊,我们的世界正在变成一个机器 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • navicat生成er图_实践案例丨ACL2020 KBQA 基于查询图生成回答多跳复杂问题
    摘要:目前复杂问题包括两种:含约束的问题和多跳关系问题。本文对ACL2020KBQA基于查询图生成的方法来回答多跳复杂问题这一论文工作进行了解读 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
八卦男1002_426
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有