算法面试八股文『 模型详解篇 』

说在前面

这是本系列的第二篇博客,主要是整理了一些经典模型的原理和结构,面试有时候也会问到这些模型的细节,因此都是需要十分熟悉的。光看原理还不够,最好是能用代码试着复现,可以看看李沐老师深度学习的教材,我也有参考部分沐神的思想。

具体模型

LeNet5

LeNet5有3个卷积层,2个池化层,2个全连接层。卷积层的卷积核都为5*5,stride=1,池化层都为Max pooling,激活函数为Sigmoid,具体网络结构如下图:
图片

Input

输入图像统一归一化为28×28。

C1卷积层

经过(5×5×1)×6卷积核,stride=1, 生成featuremap为28×28×6。

S2池化层

经过(2×2)采样核,stride=2,生成featuremap为14×14×6。

C3卷积层

经过(5×5×6)×16卷积核,stride=1,生成featuremap为10×10×16。

S4池化层

经过(2×2)采样核,stride=2,生成featuremap为5×5×6。

C5卷积层

经过(5×5×16)×120卷积核,stride=1, 生成featuremap为1×1×120。

F6全连接层

输入为1×1×120,输出为1×1×84,总参数量为120×84。

Output全连接层

输入为1×1×84,输出为1×1×10,总参数量为84×10。10就是分类的类别数。

在这里插入图片描述

AlexNet

2012年,Imagenet比赛冠军—Alexnet (以第一作者Alex命名)直接刷新了ImageNet的识别率,奠定了深度学习在图像识别领域的优势地位。网络结构如下图:

图片

Input

输入图像为224×224×3。

Conv1

经过(11×11×3)×96卷积核,stride=4, (224-11)/4+2=55,生成featuremap为55×55×96。

Pool1

经过3×3的池化核,stride=2,(55-3)/2+1=27,生成featuremap为27×27×96。

Norm1

local_size=5,生成featuremap为27×27×96。

Conv2

经过(5×5×96)×256的卷积核,pad=2,group=2,(27+2×2-5)/1+1=27,生成featuremap为27×27×256。

Pool2

经过3×3的池化核,stride=2,(27-3)/2+1=13,生成featuremap为13×13×256。

Norm2

local_size=5, 生成featuremap为13×13×256。

Conv3

经过(3×3×256)×384卷积核,pad=1, (13+1×2-3)/1+1=13,生成featuremap为13×13×384。

Conv4

经过(3×3×384)×384卷积核,pad=1,(13+1×2-3)/1+1=13,生成featuremap为13×13×384。

Conv5

经过(3×3×384)×256卷积核,pad=1,(13+1×2-3)/1+1=13,生成featuremap为13×13×256。

Pool5

经过(3×3)的池化核,stride=2,(13-3)/2+1=6,生成featuremap为6×6×256。

Fc6

输入为(6×6×256)×4096全连接,生成featuremap为1×1×4096。

Dropout6

在训练的时候以1/2概率使得隐藏层的某些神经元的输出为0,这样就丢掉了一半节点的输出,BP的时候也不更新这些节点,以下Droupout同理。

Fc7

输入为1×1×4096,输出为1×1×4096,总参数量为4096×4096。

Dropout7

生成featuremap为1×1×4096。

Fc8

输入为1×1×4096,输出为1000,总参数量为4096×1000。

在这里插入图片描述

总结:

  1. AlexNet比LeNet更深,包括5个卷积层和3个全连接层;

  2. 使用ReLU激活函数,收敛很快,解决了Sigmoid在网络较深时出现的梯度弥散问题;

  3. 加入了dropout层,防止过拟合;

  4. 使用了LRN归一化层,对局部神经元的活动创建竞争机制,抑制反馈较小的神经元放大反应大的神经元,增强了模型的泛化能力;

  5. 使用裁剪、翻转等操作做数据增强,增强了模型的泛化能力;

  6. 分块训练,当年的GPU没有这么强大,Alexnet创新地将图像分为上下两块分别训练,然后用全连接层合并在一起;

  7. 总体的数据参数大概为240M。

VGGNet

VGGNet主要的贡献是利用带有很小卷积核(3×3)的网络结构对逐渐加深的网络进行评估,结果表明通过加深网络深度至16-19层可以极大地改进前人的网络结构。这些发现也是参加2014年ImageNet比赛的基础,并且在这次比赛中,分别在定位和分类跟踪任务中取得第一名和第二名。VGGNet的网络结构如下图:

图片

类型从A到E。此处只讨论VGG16,即图中的类型D。如图中所示,共有13个卷积层,3个全连接层。其全部采用3×3卷积核,步长为1,和2×2最大池化核,步长为2。

Input层

输入图片为224×224×3。

CONV3-64

经过(3×3×3)×64卷积核,生成featuremap为224×224×64。

CONV3-64

经过(3×3×64)×64卷积核,生成featuremap为224×224×64。

Max pool

经过(2×2)max pool核,生成featuremap为112×112×64。

CONV3-128。

经过(3×3×64)×128卷积核,生成featuremap为112×112×128。

CONV3-128

经过(3×3×128)×128卷积,生成featuremap为112×112×128。

Max pool

经过(2×2)maxpool,生成featuremap为56×56×128。

CONV3-256

经过(3×3×128)×256卷积核,生成featuremap为56×56×256。

CONV3-256

经过(3×3×256)×256卷积核,生成featuremap为56×56×256。

CONV3-256

经过(3×3×256)×256卷积核,生成featuremap为56×56×256。

Max pool

经过(2×2)maxpool,生成featuremap为28×28×256

CONV3-512

经过(3×3×256)×512卷积核,生成featuremap为28×28×512

CONV3-512

经过(33512)512卷积核,生成featuremap为2828*512。

CONV3-512

经过(3×3×512)×512卷积核,生成featuremap为28×28×512。

Max pool

经过(2×2)maxpool,生成featuremap为14×14×512。

CONV3-512

经过(3×3×512)×512卷积核,生成featuremap为14×14×512。

CONV3-512

经过(3×3×512)×512卷积核,生成featuremap为14×14×512。

CONV3-512

经过(3×3×512)×512卷积核,生成featuremap为14×14×512。

Max pool

经过2×2卷积,生成featuremap为7×7×512。

FC-4096

输入为7×7×512,输出为1×1×4096,总参数量为7×7×512×4096。

FC-4096

输入为1×1×4096,输出为1×1×4096,总参数量为4096×4096。

FC-1000

输入为1×1×4096,输出为1000,总参数量为4096×1000。

总结:

  1. 共包含参数约为550M;
  2. 全部使用3×3的卷积核和2×2的最大池化核;
  3. 简化了卷积神经网络的结构。

RNN

RNN实际上有两种,一种是Recurrent Neural Networks,即循环神经网络,一种是Recursive Neural Networks,即递归神经网络。循环神经网络是首先被提出的,它是一种时间上进行线性递归的神经网络,也就是我们通常所说的RNN。

递归神经网络被视为循环神经网络的推广,这是一种在结构上进行递归的神经网络,常用于自然语言处理中的序列学习,它的输入数据本质不一定是时序的,但结构却往往更加复杂,我们这里只说循环神经网络。一个RNN的结构如下:

图片

左侧就是模型的基本结构,右侧就是它在时间上进行展开的示意图。xt是时刻t的输入,相应的ht,ot分别是对应时刻t的隐藏层和输出层。

上面我们可以看出,一个RNN的输入包括了两个:一个是当前时刻输入xt,用于实时更新状态,另一个是上一时刻隐藏层的状态ht-1,用于记忆状态,而不同时刻的网络共用的是同一套参数。

RNN中常用的激活函数是tanh,所以上面的式子写成公式,就是:
h t = tanh ⁡ ( W ( x t h t − 1 ) ) \begin{equation} h_t=\tanh \left(\mathrm{W}\left(\begin{array}{c} x_t \\ h_{t-1} \end{array}\right)\right) \end{equation} ht=tanh(W(

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python深度学习八股文是指在进行深度学习任务时,经常要涉及的一些基本步骤和常用技术。下面是一个通用的Python深度学习八股文的示例: 1. 导入所需的库: ```python import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras import layers, models ``` 2. 准备数据: ```python X_train = ... # 输入特征训练集 y_train = ... # 标签训练集 X_test = ... # 输入特征测试集 y_test = ... # 标签测试集 ``` 3. 数据预处理: ```python # 特征归一化 X_train = (X_train - X_train.mean()) / X_train.std() X_test = (X_test - X_train.mean()) / X_train.std() # 标签转换为独热编码 y_train = tf.keras.utils.to_categorical(y_train) y_test = tf.keras.utils.to_categorical(y_test) ``` 4. 构建模型: ```python model = models.Sequential() model.add(layers.Dense(units=64, activation='relu', input_shape=(input_shape,))) model.add(layers.Dense(units=num_classes, activation='softmax')) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) ``` 5. 模型训练: ```python model.fit(X_train, y_train, batch_size=batch_size, epochs=epochs, validation_data=(X_test, y_test)) ``` 6. 模型评估: ```python test_loss, test_accuracy = model.evaluate(X_test, y_test) ``` 7. 模型预测: ```python predictions = model.predict(X_test) ``` 这只是一个简单的示例,实际应用中可能涉及到更多的技巧和步骤。深度学习的八股文可以作为一个起点,帮助快速入门和理解深度学习的基本流程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值