当前位置: 首页 > article >正文

《深度学习》AlexNet网络

文章目录

  • 1.AlexNet的网络架构
  • 2.示例:手写数字识别
    • 2.1 数据读取

学习目标:

  • 知道AlexNet网络结构
  • 能够利用AlexNet完成图像分类

2012年,AlexNet横空出世,该模型的名字源于论⽂第⼀作者的姓名AlexKrizhevsky 。AlexNet使⽤了8层卷积神经⽹络,以很⼤的优势赢得了
ImageNet 2012图像识别挑战赛。它⾸次证明了学习到的特征可以超越⼿⼯设计的特征,从⽽⼀举打破计算机视觉研究的⽅向。

1.AlexNet的网络架构

AlexNet与LeNet的设计理念⾮常相似,但也有显著的区别,其⽹络架构如下图所示:
在这里插入图片描述
该网络的特点是:

  • AlexNet包含8层变换,有5层卷积和2层全连接隐藏层,以及1个全连接输出层(softmax)
  • AlexNet第⼀层中的卷积核形状1111,第⼆层中的卷积核形状减⼩到55,之后全采⽤33。所有的池化层窗⼝⼤⼩为33、步幅为2的最⼤池化。
  • AlexNet将sigmoid激活函数改成了ReLU激活函数,使计算更简单,⽹络更容易训练
  • AlexNet通过dropOut来控制全连接层的模型复杂度。
  • AlexNet引⼊了⼤量的图像增强,如翻转、裁剪和颜⾊变化,从⽽进⼀步扩⼤数据集来缓解过拟合。

在tf.keras中实现AlexNet模型:

import tensorflow as tf
# 搭建网络
net = tf.keras.Sequential(
    [
        # 第一个卷积层:卷积核个数是96,卷积核大小是11,步长是4
        tf.keras.layers.Conv2D(filters=96, kernel_size=11, strides=4, activation='relu'),
        # 池化,都是3*3,步长为2
        tf.keras.layers.MaxPooling2D(pool_size=3, strides=2),
        # 第二层卷积:卷积核个数是256,卷积核大小是5,padding为same
        tf.keras.layers.Conv2D(filters=256, kernel_size=5, padding='same', activation='relu'),
        # 池化
        tf.keras.layers.MaxPooling2D(pool_size=3, strides=2),
        # 紧跟着三个卷积层:卷积核个数分别是384,384,256,卷积核大小都是3,padding都是same
        tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same', activation='relu'),
        tf.keras.layers.Conv2D(filters=384, kernel_size=3, padding='same', activation='relu'),
        tf.keras.layers.Conv2D(filters=256, kernel_size=3, padding='same', activation='relu'),
        # 池化
        tf.keras.layers.MaxPooling2D(pool_size=3, strides=2),
        # 摊开,伸展成一维的向量
        tf.keras.layers.Flatten(),
        # 全连接,4096
        tf.keras.layers.Dense(4096, activation='relu'),
        # 正则化,随机失活
        tf.keras.layers.Dropout(0.5),
        # 全连接,4096
        tf.keras.layers.Dense(4096, activation='relu'),
        # 正则化,随机失活
        tf.keras.layers.Dropout(0.5),
        # 输出层
        tf.keras.layers.Dense(10, activation='softmax')
    ]

我们构造⼀个⾼和宽均为227的单通道数据样本来看⼀下模型的架构:

# 构造输入为xX,并将其送入到net网络中
X = tf.random.uniform((1, 227, 227, 1))
y = net(X)
# 查看网络的结构
net.summary()

在这里插入图片描述

2.示例:手写数字识别

AlexNet使⽤ImageNet数据集进⾏训练,但因为ImageNet数据集较⼤训练时间较⻓,我们仍⽤前⾯的MNIST数据集来演示AlexNet。读取数据的时将图像⾼和宽扩⼤到AlexNet使⽤的图像⾼和宽227。这个通过 tf.image.resize_with_pad 来实现。

2.1 数据读取

之后补充。。。。。


http://www.kler.cn/a/394629.html

相关文章:

  • 学习日志010--python异常处理机制与简单文件操作
  • 安装SQL server中python和R
  • Ceph 中PG与PGP的概述
  • 【PHP】ThinkPHP基础
  • 微服务day08
  • 开源项目推荐——OpenDroneMap无人机影像数据处理
  • 11.14日志
  • vue中重置对象的好使方式(封装好的函数,可直接食用)
  • MATLAB中round函数用法
  • 用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)
  • 工程化实战内功修炼测试题
  • 深度学习笔记14-卷积神经网络2
  • C语言实现3D动态爱心图形的绘制与动画效果
  • 抖音小程序蓝海冷门玩法,前期搭建好后期自动变现模式解析!
  • 【IT人物系列】之Spring创始人
  • 计算机网络 (1)互联网的组成
  • AI赋能电商:提升销售效率与用户体验的新引擎
  • 飞腾平台Arm NN软件栈安装使用指南
  • 钉钉小程序 - - - - - overflow无效?
  • APEX高性能减速机MG/MGH系列 高负载应用下的精准动力传输
  • Linux sed 的多个用法
  • 微信小程序 — 农产品供销系统
  • 无人机应用场景:石油管道巡检技术详解
  • 经典文献阅读之--DROID-SLAM(完美的深度学习slam框架)
  • 使用Java爬虫获取商品订单详情:从API到数据存储
  • STM32完全学习——系统时钟设置