def identity_block(X, f, filters, stage, block):
    '实现图3的恒等块

    参数:
    X - 输入的tensor类型的数据,维度为( m, n_H_prev, n_W_prev, n_H_prev )
    f - 整数,指定主路径中间的CONV窗口的维度
    filters - 整数列表,定义了主路径每层的卷积层的过滤器数量
    stage - 整数,根据每层的位置来命名每一层,与block参数一起使用。
    block - 字符串,据每层的位置来命名每一层,与stage参数一起使用。

    返回:
    X - 恒等块的输出,tensor类型,维度为(n_H, n_W, n_C)
    ' 
    #定义命名规则
    conv_name_base = 'res' + str(stage) + block + '_branch'
    bn_name_base   = 'bn'  + str(stage) + block + '_branch'
    print('conv_name_base: ', conv_name_base)
    print('bn_name_base: ', bn_name_base)
    #获取过滤器
    F1, F2, F3 = filters
    #保存输入数据,将会用于为主路径添加捷径
    X_shortcut = X
    #主路径的第一部分
    ##卷积层
    X = Conv2D(filters=F1, kernel_size=(1,1), strides=(1,1) ,padding='valid',
               name=conv_name_base+'2a', kernel_initializer=glorot_uniform(seed=0))(X)
    ##归一化
    X = BatchNormalization(axis=3,name=bn_name_base+'2a')(X)
    ##使用ReLU激活函数
    X = Activation('relu')(X)
    #主路径的第二部分
    ##卷积层
    X = Conv2D(filters=F2, kernel_size=(f,f),strides=(1,1), padding='same',
               name=conv_name_base+'2b', kernel_initializer=glorot_uniform(seed=0))(X)
    ##归一化
    X = BatchNormalization(axis=3,name=bn_name_base+'2b')(X)
    ##使用ReLU激活函数
    X = Activation('relu')(X)
           #主路径的第三部分
    ##卷积层
    X = Conv2D(filters=F3, kernel_size=(1,1), strides=(1,1), padding='valid',
               name=conv_name_base+'2c', kernel_initializer=glorot_uniform(seed=0))(X)
    ##归一化
    X = BatchNormalization(axis=3,name=bn_name_base+'2c')(X)
    ##没有ReLU激活函数
    #最后一步:
    ##将捷径与输入加在一起
    X = Add()([X,X_shortcut])
    ##使用ReLU激活函数
    X = Activation('relu')(X)
    return X

打印每一层name的名字

可以使用 print 语句打印每一层 name 的名字,例如:

print('conv_name_base: ', conv_name_base)
print('bn_name_base: ', bn_name_base)

这样就可以在运行代码时查看每一层的 name 的名字了。

恒等块(Identity Block)实现:深度学习卷积神经网络 ResNet 架构核心组件

原文地址: https://www.cveoy.top/t/topic/mOcQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录