对ResNet中残差模块的理解
ResNet有两种残差模块:
1:identity_block 经过这个模块的feature的维度除了深度上的变化之外,长宽没有改变。
代码如下:
X_shortcut = X_input
# first
W_conv1 = self.weight_variable([1, 1, in_filter, f1]) # weight_variable其实就是get_w,但是这里为什么没有b
X = tf.nn.conv2d(X_input, W_conv1, strides=[1, 1, 1, 1], padding='SAME')
X = tf.layers.batch_normalization(X, axis=3, training=training) # 这里使用BN,可以代替dropout
X = tf.nn.relu(X)
# second
W_conv2 = self.weight_variable([kernel_size, kernel_size, f1, f2])
X = tf.nn.conv2d(X, W_conv2, strides=[1, 1, 1, 1], padding='SAME')
X = tf.layers.batch_normalization(X, axis=3, training=training)
X = tf.nn.relu(X)
# third
W_conv3 = self.weight_variable([1, 1, f2, f3])
X = tf.nn.conv2d(X, W_conv3, strides=[1,