Keras3.0:实现残差连接

简介 

       残差连接是一种非常重要的网络结构创新,最早被广泛应用于ResNet(Residual Neural Network)模型中,由何凯明等人在2015年的论文"Deep Residual Learning for Image Recognition"中提出。

 

核心思想

      通过引入“shortcut connections”或者叫做捷径,直接将输入信息跳过若干层传到后面较深的层,然后将这个信息与经过多层非线性变换后的输出进行相加。这样做可以有效缓解随着网络深度增加而出现的梯度消失梯度爆炸问题,使得训练更深的神经网络成为可能,并且能够显著提升模型的性能。

 

结构

2dfaeefb7a5841ac816fe3ebf2347334.jpeg

 

示例

Keras实现残差结构

import keras
from keras.layers import Conv2D, Add
from keras.models import Model

# 定义一个模型
input_layer = keras.Input(shape=(64, 64, 3))  # 创建一个输入层

# 添加一个卷积层,输出维度为64,激活函数为ReLU
x = Conv2D(64, kernel_size=(3, 3), padding='same', activation='relu')(input_layer)

# 添加一个卷积层,输出维度为64,激活函数为ReLU
y = Conv2D(64, kernel_size=(3, 3), padding='same', activation='relu')(x)

# 添加一个卷积层,输出维度为64,激活函数为ReLU,用于残差连接
residual = Conv2D(64, kernel_size=(3, 3), padding='same', activation='relu')(y)

# 将原始输入与残差相加,得到最终输出
output_layer = Add()([x, residual])

# 使用输入层和输出层创建模型
model = Model(inputs=input_layer, outputs=output_layer)

# 使用Adam优化器和均方误差损失函数编译模型
model.compile(optimizer='adam', loss='mse')

# 打印模型的结构信息,包括每一层的名称、输出维度等
model.summary()

模型结构

Model: "model"
__________________________________________________________________________________________________
 Layer (type)                Output Shape                 Param #   Connected to                  
==================================================================================================
 input_1 (InputLayer)        [(None, 64, 64, 3)]          0         []                            
                                                                                                  
 conv2d (Conv2D)             (None, 64, 64, 64)           1792      ['input_1[0][0]']             
                                                                                                  
 conv2d_1 (Conv2D)           (None, 64, 64, 64)           36928     ['conv2d[0][0]']              
                                                                                                  
 conv2d_2 (Conv2D)           (None, 64, 64, 64)           36928     ['conv2d_1[0][0]']            
                                                                                                  
 add (Add)                   (None, 64, 64, 64)           0         ['conv2d[0][0]',              
                                                                     'conv2d_2[0][0]']            
                                                                                                  
==================================================================================================
Total params: 75648 (295.50 KB)
Trainable params: 75648 (295.50 KB)
Non-trainable params: 0 (0.00 Byte)
Non-trainable params: 0 (0.00 Byte)

 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

缘起性空、

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

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

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

打赏作者

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

抵扣说明:

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

余额充值