EfficientNet

前言

论文链接

简介

先来看看之前的CNN比较
在这里插入图片描述图片来源

再来看看主角EfficientNet,从这张图可以看到EfficientNet-B7的acc是最高的,可这还不是最令人惊叹的,再看x轴EfficientNet-B7的参数大小仅在60到70之间,而AmoebaNet-C虽然acc紧跟其后但是参数大小却是EfficientNet-B7的两倍左右。这得益于EfficientNet的混合的模型放缩方法(compound scaling)
https://arxiv.org/pdf/1905.11946.pdf图片来源

原理

卷积神经网络(ConvNets)是通常以固定资源预算开发, 然后放大以获得更好的精度资源可用。我们从理论上研究模型缩放并平衡网络深度、宽度和分辨率之间的关系以带来更好的性能。基于这一观察,提出一种新的统一缩放所有维度的方法深度、宽度、分辨率调节简单并且有效的复合系数。
在这里插入图片描述
如下图所示a是基线网络
b和d是仅增加网络一维的常规缩放(宽度、深度或分辨率)
e是我们提出的以固定比例均匀缩放所有三维的复合缩放方法

在这里插入图片描述其中网络深度、宽度和分辨率之间的关系系数公式请参考论文

结构图

如图是 EfficientNet-B0 基础网络,说明了特征图大小、通道数、层数变化
在这里插入图片描述我们通过参数调节得到了Efficient-B1到B7,其中Efficient-B7效果最好。
最后给出原论文中关于EfficientNet与当时主流网络的性能参数对比如下图。
其中FLOPs表示运算量(每秒浮点运算次数)在这里插入图片描述

总结

详细还请参考原论文,总的来说EfficientNet主要做的就是平衡了网络深度、宽度和分辨率的关系。因为在设计网络时不能一味增加网络深度或者宽度或者分辨率,当其中一个达到一定值的时候就会饱和精确度不会在上升,EfficientNet网络做到的就是平衡这三个参数的大小以达到模型最大的精度。

### EfficientNet 模型介绍 EfficientNet 是一种高效的卷积神经网络架构,其核心优势在于利用复合缩放方法在多个尺度上平衡了网络的宽度、深度和分辨率,从而实现高效性能[^3]。传统的方法通常只在一个维度(如深度或宽度)上扩展模型规模,而 EfficientNet 则同时考虑这三个维度的综合影响。 #### 复合缩放方法 该模型采用了一种新的复合系数来统一扩大网络的宽度、深度以及输入图像的分辨率。这种方法能够更有效地提升模型精度而不显著增加计算量。具体来说: - **宽度**:指的是每一层中的通道数; - **深度**:表示网络层数; - **分辨率**:即输入图片尺寸。 通过这种方式,EfficientNet 能够更好地适应不同的硬件环境并保持良好的泛化能力。 ```python import tensorflow as tf from tensorflow.keras.applications import EfficientNetB0 model = EfficientNetB0(weights='imagenet') ``` 这段代码展示了如何加载预训练好的 EfficientNet B0 版本权重,这是最基础也是最小巧的一个变体版本。 ### 使用方法 为了使用 EfficientNet 进行特定任务(比如自定义数据集上的迁移学习),可以按照如下方式进行操作: 1. 加载预训练的基础模型; 2. 移除顶部全连接层以便替换为适合新任务的新分类器; 3. 添加额外的层以适配目标任务类别数量; 4. 编译模型设置损失函数与优化算法; 5. 训练整个网络直至收敛。 ```python base_model = EfficientNetB0(include_top=False, input_shape=(224, 224, 3)) x = base_model.output x = tf.keras.layers.GlobalAveragePooling2D()(x) predictions = tf.keras.layers.Dense(num_classes, activation="softmax")(x) final_model = tf.keras.Model(inputs=base_model.input, outputs=predictions) for layer in base_model.layers: layer.trainable = False final_model.compile(optimizer='adam', loss='categorical_crossentropy') history = final_model.fit(train_data, epochs=num_epochs, validation_data=val_data) ``` 此段脚本说明了一个完整的流程,从构建基于 EfficientNet 的特征提取器到最后完成编译过程准备进入实际训练阶段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dzm1204

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

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

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

打赏作者

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

抵扣说明:

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

余额充值