我是tensorflow初学者。我只是想使用批处理规范化将MNIST准确性提高到99.5%。我使用CNN。但是我有一些问题。
with tf.name_scope('convolution_pooling_1'):
phase = tf.placeholder(tf.bool, name='phase')
W_conv1 = tf.Variable(tf.truncated_normal([3,3,1,num_filters1], stddev=0.1), name='conv_1_filter')
h_conv1 = tf.nn.conv2d(
x_image, W_conv1, strides=[1,1,1,1], padding='SAME',
name='filter-output_1')
bn1 = tf.contrib.layers.batch_norm(h_conv1,
center=True, scale=True,
is_training=phase)
W_conv2 = tf.Variable(tf.truncated_normal([3,3,1,num_filters1], stddev=0.1), name='conv_2_filter')
h_conv2 = tf.nn.conv2d(
bn1, W_conv2, strides=[1,1,1,1], padding='SAME',
name='filter-output_2')
b_conv2 = tf.Variable(tf.constant(0.1, shape=[num_filters1]))
h_conv2_cutoff = tf.nn.relu(h_conv2 + b_conv2, name='conv_2_cutoff')
bn2 = tf.contrib.layers.batch_norm(h_conv2_cutoff,
center=True, scale=True,
is_training=phase)
这是CNN的第一部分。 我想通过这种方式设计模型。 32filters卷积-批处理规范化-32filters卷积-批处理规范化
但是在训练过程中,我遇到了这个错误
ValueError: Dimensions must be equal, but are 32 and 1 for 'convolution_pooling_1/filter-output_2' (op: 'Conv2D') with input shapes: [?,28,28,32], [3,3,1,32].
批量归一化的结果与下一个卷积计算不匹配?
请帮助我!
答案 0 :(得分:0)
问题不是批处理规范化,而是第二个卷积层的过滤器形状。您将其定义为 [3,3,1,32] (请参阅错误消息),但它必须为 [3,3,32,32] 。 只需更正您的W_conv2变量的形状即可:
W_conv2 = tf.Variable(tf.truncated_normal([3,3,num_filters1,num_filters1], stddev=0.1),name='conv_2_filter')