Tensorflow——使用GoogleNet训练Fashion_mnist

使用GoogleNet训练Fashion_mnist

GoogLeNet简介

GoogLeNet是2014年提出的一种全新的深度学习结构,在这之前的AlexNet、VGG、NIN等结构都通过增大网络深度(层数)来获得更好的训练效果,但层数的增加会带来很多负作用,比如overfit、梯度消失、梯度爆炸等。inception从另一种角度来提升训练结果:在相同的计算量下能提取到更多的特征,从而提升性能。

  1. GoogLeNet 由Inception基础块组成
  2. Inception块相当于一个有4条子线路的小网络,它通过不同的filter卷积层和最大池化层来并行抽取信息,并使用1X1卷积层减少通道数从而降低模型复杂度.
  3. 可以自定义的超参数是每个层的输出通道数没我们以此来控制模型的复杂度.
Inception块

Inception

Inception块由四条并行路径组成。 前三条路径使用窗口大小为 1×1 、 3×3 和 5×5 的卷积层,从不同空间大小中提取信息。 中间的两条路径在输入上执行 1×1 卷积,以减少通道数,从而降低模型的复杂性。 第四条路径使用 3×3 最大池化层,然后使用 1×1 卷积层来改变通道数。 这四条路径都使用合适的填充来使输入与输出的高和宽一致,最后我们将每条线路的输出在通道维度上连结,并构成Inception块的输出。在Inception块中,通常调整的超参数是每层输出通道的数量。

import tensorflow as tf

# Inception
class Inception(tf.keras.Model):
    # 4条路径输出的通道数
    def __init__(self, c1, c2, c3, c4):
        super().__init__()
        # 第一条
        self.p1_1 = layers.Conv2D(c1, 1, activation='relu')
        # 第二条
        self.p2_1 = layers.Conv2D(c2[0], 1, activation='relu')
        self.p2_2 = layers.Conv2D(c2[1], 3, padding='same', activation='relu')
        # 第三条
        self.p3_1 = layers.Conv2D(c3[0], 1, activation='relu')
        self.p3_2 = layers.Conv2D(c3[1], 5, padding='same', activation='relu')
        # 第四条
        self.p4_1 = layers.MaxPool2D(3, 1, padding='same')
        self.p4_2 = layers.Conv2D(c4, 1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值