tensorflow2.0复现resnetv1,v2

1.导入的包
import tensorflow as tf from tensorflow import keras from tensorflow.keras.layers import Conv2D, BatchNormalization, Activation, Dense
2.resnetv1和resnetv2的区别
tensorflow2.0复现resnetv1,v2_第1张图片
我认为v1,和v2的基本区别在于v1是Conv->BN->Activation而v2是BN->Activation->Conv
3.resnet的基本模块
tensorflow2.0复现resnetv1,v2_第2张图片
我认为weight即权重,应该指的是用conv去压缩维度,即基础模块的代码应该为

def bottleneck(inputs, depth, depth_bottleneck, strides, activation='relu',conv_version=True):
'''
args:
inputs:输入图像的shape
depth:输出图像的维度
depth_bottleneck:前面两个conv的通道数
strides:步长 
activation:激活函数的选择
conv_version:resnet的版本True,V1.False,V2.   
'''
    conv = Conv2D(input_shape,filters, 
                  kernel_size=kernel_size,
                  strides=strides, 
                  padding='same', 
                  kernel_initializer='l',   
                  kernel_regularizer

    x=inputs
    depth_in=x.get_shape()[3].value
    if conv_version:
        x=conv(x)
        x=BatchNormalization()(x)
        x = Activation(activation)(x)
        x=conv(x)
        x=BatchNormalization()(x)
        if depth_in==depth:
            shortcut=inputs
        else:
            shortcut=conv(x,[1,1],1)
        x=keras.layers.add([x, shortcut])
        x = Activation(activation)(x)
    else:
        x=BatchNormalization()(x)
        x = Activation(activation)(x)
        x=conv(x)
        x=BatchNormalization()(x)
        x = Activation(activation)(x)
        x=conv(x)
        if depth_in==depth:
           shortcut=inputs
        else:
            shortcut=conv(x,[1,1],1)
        x=keras.layers.add([x, shortcut])
return x

4.一个简单的resnet网络

def resnet_3(input_shape = (64, 64, 3)):
#输入图形的形状为(64,64,3)
    inputs = Input(input_shape)#将输入图像转化为tensor向量
    inputs=ZeroPadding2D((3, 3))(inputs)
    x=inputs
    x=conv(x)
    x=BatchNormalization()(x)
    x = Activation(activation)(x)
    x=bottleneck()
    x=bottleneck()
    x = AveragePooling2D(pool_size=(2,2),padding="same")(x)
    X = Flatten()(X)
    X = Dense(classes, activation='softmax', name='fc' + str(classes), kernel_initializer = glorot_uniform(seed=0))(X)
    #classes分类器的输出种类
    model = keras.Model(inputs = inputs, outputs = X, name='resnet_3')
return model

你可能感兴趣的:(tensorflow2.0复现resnetv1,v2)