我尝试在Mnist数据集上使用函数tf.contrib.layers.batch_norm实现CNN.
当我训练和检查模型时,我发现损失正在减少(好!)但是测试数据集的准确性保持随机(~10%)(BAD !!!)
如果我在没有批量标准化的情况下使用相同的模型,我会发现测试精度正在按预期增加.
你可以在下面的代码中看到我如何使用批量规范化功能.如果我用于测试数据集来设置is_training = True我得到了很好的结果,所以问题是批量标准化函数的is_training = False模式.
请帮我解决一下这个.提前感谢所有人.
# BLOCK2 - Layer 1
conv1 = tf.nn.conv2d(output, block2_layer1_1_weights, [1, 1, 1, 1], padding='SAME')
conv2 = tf.nn.conv2d(output, block2_layer1_2_weights, [1, 1, 1, 1], padding='SAME')
conv3 = tf.nn.conv2d(output, block2_layer1_3_weights, [1, 1, 1, 1], padding='SAME')
conv4 = tf.nn.conv2d(output, block2_layer1_4_weights, [1, 1, 1, 1], padding='SAME')
conv_normed1 = tf.contrib.layers.batch_norm(conv1, scale=True, decay=batch_norm_decay, center=True, is_training=is_training, updates_collections=None )
conv_normed2 = tf.contrib.layers.batch_norm(conv2, scale=True, decay=batch_norm_decay, center=True, is_training=is_training, updates_collections=None )
conv_normed3 = tf.contrib.layers.batch_norm(conv3, scale=True, decay=batch_norm_decay, center=True, is_training=is_training, …Run Code Online (Sandbox Code Playgroud)