TensorFlow批量归一化,尺寸错误

时间:2018-12-05 12:54:24

标签: python tensorflow

我是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].

批量归一化的结果与下一个卷积计算不匹配?

请帮助我!

1 个答案:

答案 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')