ALexNet与VGG16初学总结

ALexNet与VGG16初学总结

- Alexnet

(一)创新点:
1.成功使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。2.训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。3.在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖,提升了特征的丰富性。4.提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
(二) 一些基本的概念:
1.relu改变梯度弥散:梯度弥散的问题很大程度上是来源于激活函数的“饱和”。因为在后向传播的过程中仍然需要计算激活函数的导数,所以一旦卷积核的输出落入函数的饱和区,它的梯度将变得非常小。使用反向传播算法传播梯度的时候,随着传播深度的增加,梯度的幅度会急剧减小,会导致浅层神经元的权重更新非常缓慢,不能有效学习。这样一来,深层模型也就变成了前几层相对固定,只能改变最后几层的浅层模型。

2.用relu的作用:ReLU在一定程度上能够防止梯度消失,但防止梯度消失不是用它的主要原因,主要原因是求导数简单。一定程度是指,右端的不会趋近于饱和,求导数时,导数不为零,从而梯度不消失,但左端问题依然存在,一样掉进去梯度也会消失。
同时relu的时间会快6倍。

3.最大池化层:一个输入224×224×64的图像,经过最大池化后的尺寸变为112×112×64,可以看到池化操作的降维改变的是图像的宽高,而不改变通道数。用最大池化层是因为平均池化层会有模糊化效果。

4.重叠池化:即相邻池化窗口之间会有重叠区域。如果定义池化窗口的大小为sizeX,定义两个相邻池化窗口的水平位移/竖直位移为stride,此时sizeX>stride。传统的filter是不重合的,但是这篇当中是不断重合的。这样的训练效果更好。

5.LRN:LRN全称为Local Response Normalization,即局部响应归一化层,LRN函数类似DROPOUT和数据增强作为relu激励之后防止数据过拟合而提出的一种处理方法。这个函数很少使用,基本上被类似DROPOUT这样的方法取代
在这里插入图片描述
(三)实验过程原理
在这里插入图片描述
卷积层:5层,全连接层:3层,深度:8层,参数个数:60M,神经元个数:650k,分类数目:1000类
由于当时的显卡容量问题,AlexNet 的60M个参数无法全部放在一张显卡上操作,所以采用了两张显卡分开操作的形式,其中在C3,R1,R2,R3层上出现交互。
在AlexNet中,卷积层是上图所示的C1……C5,一共5层。而每次卷积后的结果在上图中可以看到,比如经过卷积层C1后,原始的图像变成了55X55的尺寸,一共有96个通道,分布在2张3G的显卡上,所以上图中一个立方体的尺寸是55×55×48,48是通道数目(后面会详细的说明),而在这个立方体里面还有一个5×5×48的小立方体,这个就是C2卷积层的核尺寸,48是核的厚度(后面会详细说明)。就能看到它每一层的卷积核尺寸以及每一层卷积之后的尺寸。
(四) 自己理解的难点:
1.C2的卷积核个数即为C3的厚度,这个不符合用双显卡得出的结论:
因为在这里做了通道的合并,也就是一种串接操作,所以一个卷积核卷积的不再是单张显卡上的图像,而是两张显卡的图像串在一起之后的图像,串在一起之后的通道数就是256,所以卷积核的厚度为256。两个GPU相互的交换数据,其他的是不交换的。

2.为什么一开始就是256:因为在一开始的时候要对模型进行统一,将他们的大小统一成同一的256X256。

- VGG16

(一)总体结构:
在这里插入图片描述
都有含有5组卷积,每组卷积都使用3X3的卷积核,每组卷积后进行一个2X2最大池化,接下来是三个全连接层.在训练高级别的网络时,可以先训练低级别的网络,用前者获得的权重初始化高级别的网络,可以加速网络的收敛。

虽然从A到E每一级网络逐渐变深,但是网络的参数量并没有增长很多,这是因为参数量主要都消耗在最后3个全连接层。

前面的卷积部分虽然很深,但是消耗的参数量不大,不过训练比较耗时的部分依然是卷积,因其计算量比较大。

其中的D、E也就是我们常说的VGGNet-16和VGGNet-19。

训练时,输入是大小为224*224的RGB图像,预处理只有在训练集中的每个像素上减去RGB的均值。

C很有意思,相比B多了几个11的卷积层,11卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。

在预测时,VGG采用Multi-Scale的方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升预测准确率。在训练中,VGGNet还使用了Multi-Scale的方法做数据增强,将原始图像缩放到不同尺寸S,然后再随机裁切224´224的图片,这样能增加很多数据量,对于防止模型过拟合有很不错的效果。

(二)实际运用:
主要是完成了对于VGG16的实际运用,实际使用数据量很小,所以使用的参数进行自己的调试:
model.add(Conv2D(45,(3,3),activation = ‘relu’,padding = ‘same’,input_shape=(1,1,8),kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
#进行一次归一化
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer2 323264
model.add(Conv2D(45, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
#下面两行代码是等价的,#keras Pool层有个奇怪的地方,stride,默认是(22),
#padding默认是valid,在写代码是这些参数还是最好都加上,这一步之后,输出的shape是16
1664
#model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(MaxPooling2D(pool_size=2,strides=(2,2),padding=‘same’))
#layer3 16
1664
model.add(Conv2D(30, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer4 16
16128
model.add(Conv2D(30, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=1))
#layer5 8
8128
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer6 8
8256
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer7 8
8256
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=1))
#layer8 4
4256
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer9 4
4512
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer10 4
4512
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=1))
#layer11 2
2512
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer12 2
2512
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(Dropout(0.05))
#layer13 2
2512
model.add(Conv2D(15, (3, 3), padding=‘same’,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=1))
model.add(Dropout(0.05))
#layer14 1
1*512
model.add(Flatten())
model.add(Dense(15,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
#layer15 512
model.add(Dense(15,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation(‘relu’))
model.add(BatchNormalization())
#layer16 512
model.add(Dropout(0.05))
model.add(Dense(1))
model.add(Activation(‘sigmoid’))
model.summary()
model.compile(optimizer=‘adam’,
loss=‘binary_crossentropy’,
metrics=[‘accuracy’])
model.fit(X_train,y_train,epochs=10, batch_size=5, verbose=1)

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
alexnetvgg16、resnet101和densenet161是流行的图像分类模型。这些模型在ImageNet数据集上进行了训练,并在深度学习领域中取得了显著的成就。 AlexNet是第一个在ImageNet上取得重大突破的深度卷积神经网络模型。它具有较少的层次结构,但通过使用更多的卷积层和参数来增加模型的复杂性,使其能够更好地对图像进行分类。然而,由于其较浅的结构,在更复杂的任务上可能性能不如其他模型。 VGG16是由牛津大学的研究人员开发的一个深度卷积神经网络模型。它的主要特点是具有很深的卷积层和小的3x3卷积核。VGG16在ImageNet上取得了很好的性能,但由于其巨大的模型大小,训练和推理的时间和计算资源成本较高。 ResNet101是一个非常深的残差网络模型,利用残差单元来解决深度网络的退化问题。这意味着它可以更好地处理网络深度增加时的梯度消失和梯度爆炸问题。ResNet101在ImageNet上达到了非常高的精度,是目前最先进的图像分类模型之一。 Densenet161是一个密集连接的卷积神经网络模型。它通过每个层连接所有前面层的输出,使得信息可以更好地流动,从而提高了网络的性能。Densenet161在ImageNet上表现出了很好的性能,但与其他模型相比,它的模型大小和计算资源成本也较高。 综上所述,这些模型各有优劣。AlexNet相对较简单,但性能较弱;VGG16在性能上表现不错,但模型较大;ResNet101具有非常深的结构和高精度;Densenet161通过密集连接优化了信息流动。选择模型应根据具体任务需求和计算资源的可用性来决定。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ImageNet:这样就可以对ImageNet数据集上的流行模型架构(例如AlexNet...vgg,resnet,squeezenet,densenet)](https://download.csdn.net/download/weixin_42179184/18522395)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [人工智能详细笔记(第二节课):CNN AlexNet NIN VGG GoogleNet ResNet DenseNet(初学者友好版本)](https://blog.csdn.net/hanmo22357/article/details/129375218)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值