VGG16详细原理(含tensorflow版源码)

VGG16原理

        VGG16是一个经典的卷积神经网络模型,由牛津大学计算机视觉组(Visual Geometry Group)提出,用于参加2014年的ImageNet图像分类比赛。VGG16的名称来源于网络中包含的16个卷积层,其基本结构如下:

  • 输入层:接收大小为224x224的RGB图像。
  • 卷积层:共13个卷积层,每个卷积层使用3x3的卷积核和ReLU激活函数,提取图像的局部特征。
  • 池化层:共5个池化层,每个池化层使用2x2的池化核和步长2,减小特征图的大小。
  • 全连接层:包含2个全连接层,每个全连接层包含4096个神经元,用于分类输出。
  • 输出层:包含一个大小为1000的全连接层,使用softmax激活函数,生成1000个类别的概率分布。

 

        VGG16的主要特点是网络结构比较深,且卷积层和池化层的数量都比较多,使得网络可以学习到更加高层次的抽象特征。此外,VGG16的卷积层都采用3x3的卷积核,这样可以保证在不增加计算量的情况下,增加了网络的深度和宽度,提高了特征提取的效率和准确性。

        在训练过程中,VGG16一般采用基于随机梯度下降(Stochastic Gradient Descent,SGD)的反向传播算法,通过最小化交叉熵损失函数来优化模型参数。在训练过程中,可以使用数据增强、正则化、dropout等技术来提高模型的泛化能力和鲁棒性。

        总的来说,VGG16是一个非常经典和有效的卷积神经网络模型,具有良好的特征提取和分类能力,可以应用于图像分类、目标检测等计算机视觉任务。

VGG16源码(tensorflow版)

import tensorflow as tf
from tensorflow.keras import optimizers,losses,models,datasets,Sequential
from tensorflow.keras.layers import Dense,Conv2D,BatchNormalization,MaxPooling2D,Flatten


class vgg16(models.Model):
    def __init__(self):
        super(vgg16, self).__init__()
        self.model = models.Sequential([
            Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu'),
            Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu'),
            BatchNormalization(),
            MaxPooling2D(),
            Conv2D(filters=128,kernel_size = (3,3),padding='same',activation='relu'),
            Conv2D(filters=128,kernel_size = (3,3),padding='same',activation='relu'),
            BatchNormalization(),
            MaxPooling2D(),
            Conv2D(filters=256, kernel_size=(3, 3),padding='same', activation='relu'),
            Conv2D(filters=256, kernel_size=(3, 3),padding='same', activation='relu'),
            Conv2D(filters=256, kernel_size=(3, 3),padding='same', activation='relu'),
            BatchNormalization(),
            MaxPooling2D(),
            Conv2D(filters=512, kernel_size=(3, 3),padding='same', activation='relu'),
            Conv2D(filters=512, kernel_size=(3, 3), padding='same',activation='relu'),
            Conv2D(filters=512, kernel_size=(3, 3), padding='same',activation='relu'),
            BatchNormalization(),
            MaxPooling2D(),
            Conv2D(filters=512, kernel_size=(3, 3), padding='same',activation='relu'),
            Conv2D(filters=512, kernel_size=(3, 3),padding='same', activation='relu'),
            Conv2D(filters=512, kernel_size=(3, 3), padding='same',activation='relu'),
            BatchNormalization(),
            MaxPooling2D(),
            Flatten(),
            Dense(512,activation='relu'),
            Dense(256,activation='relu'),
            Dense(10,activation='softmax')
        ])

    def call(self, x, training=None, mask=None):
        x = self.model(x)
        return x


def main():
    (train_x,train_y),(test_x,test_y) = datasets.cifar10.load_data()
    train_x = train_x.reshape(-1,32,32,3) / 255.0
    test_x = test_x.reshape(-1,32,32,3) / 255.0

    model = vgg16()

    # model.build((None,32,32,3))
    # model.summary() 不使用类写VGG的话,就不报错,使用了类写VGG就报错,我也很无奈

    model.compile(optimizer=optimizers.Adam(0.01),
                  loss = losses.SparseCategoricalCrossentropy(),
                  metrics=['accuracy'])
    model.fit(train_x,train_y,epochs=10,batch_size=128)

    score = model.evaluate(test_x,test_y,batch_size=50)

    print('loss:',score[0])
    print('acc:',score[1])
    pass


if __name__ == '__main__':
    main()

训练10个epoch的效果

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
要实现VGG16的代码,可以参考引用中的笔记本文件VGG16 Train.ipynb。该笔记本文件是用于培训和测试VGG16的实现的。您可以在其中找到有关VGGNet的进一步说明和代码注释。此外,如果您想简单实现VGGNet并使用TensorFlow,您还可以参考引用中提到的《Tensorflow实战》和《Tensorflow 实战Google深度学习框架》这两本书。在这些资源中,您可以学习有关TensorFlow的基础知识,并了解如何从数据集制作到训练和测试VGG16模型的过程。同时,根据引用中的描述,VGG16是VGGNet的一种配置,具体的实现代码可以在上述资源中找到。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [VGG16-Tensorflow:VGG16Tensorflow实现](https://download.csdn.net/download/weixin_42139871/18333565)[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: 33.333333333333336%"] - *2* [VGG16_TF:简单实现VGG16](https://download.csdn.net/download/weixin_42116705/18214475)[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: 33.333333333333336%"] - *3* [VGG16tensorflow2.0实战(cifar10数据集)](https://blog.csdn.net/weixin_44690935/article/details/105871109)[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: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的男孩。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值