def _convolutional_layer(self, input, patch_size, stride, input_channels, output_channels, bias_init_value, scope_name):
with tf.variable_scope(scope_name) as scope:
weights = tf.get_variable(name='weights',
shape=[patch_size, patch_size, input_channels, output_channels],
initializer=tf.contrib.layers.xavier_initializer_conv2d())
biases = tf.Variable(name='biases', initial_value=tf.constant(value=bias_init_value, shape=[output_channels]))
conv = tf.nn.conv2d(input, weights, [1, stride, stride, 1], padding='SAME')
linear_rectification_bias = tf.nn.bias_add(conv, biases)
output = tf.nn.relu(linear_rectification_bias, name=scope.name)
grid_x = output_channels // 4
grid_y = 4 * input_channels
kernels_image_grid = self._create_kernels_image_grid(weights, (grid_x, grid_y))
tf.image_summary(scope_name + '/features', kernels_image_grid, max_images=1)
if "_conv1" in scope_name:
x_min = tf.reduce_min(weights)
x_max = tf.reduce_max(weights)
weights_0_to_1 = (weights - x_min) / (x_max - x_min)
weights_0_to_255_uint8 = tf.image.convert_image_dtype(weights_0_to_1, dtype=tf.uint8)
# to tf.image_summary format [batch_size, height, width, channels]
weights_transposed = tf.transpose(weights_0_to_255_uint8, [3, 0, 1, 2])
tf.image_summary(scope_name + '/features', weights_transposed[:,:,:,0:1], max_images=32)
return output
评论列表
文章目录