第T9周:猫狗识别2

>- **🍨 本文为[🔗365天深度学习训练营](https://mp.weixin.qq.com/s/AtyZUu_j2k_ScNH6e732ow) 中的学习记录博客**

>- **🍦 参考文章:365天深度学习训练营-第9周:猫狗识别-2(训练营内部成员可读)**

>- **🍖 原作者:[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)**

>- **🚀 文章来源:[K同学的学习圈子](https://www.yuque.com/mingtian-fkmxf/zxwb45)**

image_dataset_from_directory 是一个用于从目录中加载图像数据集的实用函数,它属于 TensorFlow 的 Keras 预处理模块。这个函数可以帮助您轻松地从文件系统中的目录结构加载图像数据,以便为深度学习任务准备数据。

shuffle()prefetch() 和 cache() 是用于处理数据集的常用方法,它们在许多深度学习框架中都可以找到,如TensorFlow和PyTorch。这些方法有助于提高数据处理效率,从而加速模型训练。

  1. shuffle(buffer_size):打乱数据集的顺序。buffer_size 参数指定了用于存储样本的缓冲区大小。在每次迭代时,都会从缓冲区中随机选择一个样本进行训练。这有助于避免模型在训练过程中对数据顺序的依赖。通常,buffer_size 应设置为接近或等于数据集大小,以便在每次迭代时都能实现充分的随机化。

  2. prefetch(buffer_size):预取数据。该方法会在训练过程中预先加载一定数量的数据(由buffer_size 参数指定),从而确保在模型训练时始终有足够的数据可用。这有助于降低数据加载的延迟,使模型训练更加高效。

  3. cache(filename):将数据集缓存到内存或磁盘中。如果filename 参数为空,则数据集会被缓存到内存中;否则,数据集会被缓存到指定的文件中。缓存数据集可以加速数据的读取速度,尤其是在多次迭代训练时,这样可以避免每次迭代都从原始数据源中加载数据。

 

VGG(Visual Geometry Group)是一种深度卷积神经网络,由牛津大学的VGG小组开发。该网络在2014年的ImageNet竞赛中取得了优异的成绩。VGG网络的主要特点是其简单的结构和使用多个连续的小卷积核(3x3)来构建深度网络。VGG有多个版本,如VGG-16和VGG-19,数字代表网络层数。下面是VGG的优缺点分析:

VGG优点:

1. 结构简单:VGG网络结构非常简单和规整,主要由卷积层和全连接层组成,易于理解和实现。

2. 层次丰富:VGG网络具有较深的层次,这使得它可以学习更多的特征表示,提高了模型的准确性。

3. 模块化设计:VGG网络采用模块化设计,可以方便地扩展网络结构和深度,以满足不同任务的需求。

4. 特征提取能力强:由于VGG网络的深度和多层小卷积核的设计,它具有很强的特征提取能力,能够捕捉图像中的细节特征。

5. 预训练模型丰富:VGG网络在多个领域和任务上均有预训练模型,可以方便地用于迁移学习和微调,加速模型训练和优化过程。

VGG缺点:

1. 计算量大:VGG网络由于其深度和多层卷积操作,导致计算量较大,需要较高的计算资源。

2. 参数量多:VGG网络包含大量的参数,尤其是全连接层,这使得模型容易过拟合,同时也增加了模型的存储和计算需求。

3. 训练时间长:由于VGG网络的计算量大和参数量多,训练过程通常需要较长时间,尤其是在大规模数据集上。

4. 模型冗余:VGG网络中的全连接层可能导致模型冗余,一些研究表明,将全连接层替换为全局平均池化层可以减少参数量,提高模型效率。

5. 难以适应新的任务:虽然VGG网络在许多任务上取得了优异的成绩,但其结构相对固定,可能难以适应一些特定任务的需求。后续的网络结构(如ResNet、Inception等)通过更复杂的设计,提高了模型的灵活性和适应性。

VGG-16包含了16个隐藏层(13个卷积层和3个全连接层),故称为VGG-16 

 

from tensorflow.keras import layers, models, Input
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout

def VGG16(nb_classes, input_shape):
    input_tensor = Input(shape=input_shape)
    # 1st block
    x = Conv2D(64, (3,3), activation='relu', padding='same',name='block1_conv1')(input_tensor)
    x = Conv2D(64, (3,3), activation='relu', padding='same',name='block1_conv2')(x)
    x = MaxPooling2D((2,2), strides=(2,2), name = 'block1_pool')(x)
    # 2nd block
    x = Conv2D(128, (3,3), activation='relu', padding='same',name='block2_conv1')(x)
    x = Conv2D(128, (3,3), activation='relu', padding='same',name='block2_conv2')(x)
    x = MaxPooling2D((2,2), strides=(2,2), name = 'block2_pool')(x)
    # 3rd block
    x = Conv2D(256, (3,3), activation='relu', padding='same',name='block3_conv1')(x)
    x = Conv2D(256, (3,3), activation='relu', padding='same',name='block3_conv2')(x)
    x = Conv2D(256, (3,3), activation='relu', padding='same',name='block3_conv3')(x)
    x = MaxPooling2D((2,2), strides=(2,2), name = 'block3_pool')(x)
    # 4th block
    x = Conv2D(512, (3,3), activation='relu', padding='same',name='block4_conv1')(x)
    x = Conv2D(512, (3,3), activation='relu', padding='same',name='block4_conv2')(x)
    x = Conv2D(512, (3,3), activation='relu', padding='same',name='block4_conv3')(x)
    x = MaxPooling2D((2,2), strides=(2,2), name = 'block4_pool')(x)
    # 5th block
    x = Conv2D(512, (3,3), activation='relu', padding='same',name='block5_conv1')(x)
    x = Conv2D(512, (3,3), activation='relu', padding='same',name='block5_conv2')(x)
    x = Conv2D(512, (3,3), activation='relu', padding='same',name='block5_conv3')(x)
    x = MaxPooling2D((2,2), strides=(2,2), name = 'block5_pool')(x)
    # full connection
    x = Flatten()(x)
    x = Dense(4096, activation='relu',  name='fc1')(x)
    x = Dense(4096, activation='relu', name='fc2')(x)
    output_tensor = Dense(nb_classes, activation='softmax', name='predictions')(x)

    model = Model(input_tensor, output_tensor)
    return model

model=VGG16(1000, (img_width, img_height, 3))
model.summary()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值