tf.nn.conv2d对我的代码不起作用。但是tf.layer.conv2d呢。想知道差异

时间:2017-07-21 13:51:56

标签: python tensorflow neural-network convolution mnist

当我使用

def main_conv_nn(images, training):
    # Convolution

    convFilterShape = [3, 3, 1, 32]
    convFilterWeights = tf.Variable(tf.truncated_normal(convFilterShape, stddev=0.1))
    Layer1 = tf.nn.conv2d(images, convFilterWeights, strides= [1,1,1,1] , padding='SAME')

对于MNIST相关代码,其性能低于20%。它的表现非常糟糕。

然而,当我改变我的代码时,

def main_conv_nn(images, training):
    # Convolution

    #convFilterShape = [3, 3, 1, 32]
    #convFilterWeights = tf.Variable(tf.truncated_normal(convFilterShape, stddev=0.1))
    #Layer1 = tf.nn.conv2d(images, convFilterWeights, strides= [1,1,1,1] , padding='SAME')

    Layer1 = tf.layers.conv2d(images, 32, [5, 5], padding= 'same')

它完美无缺。

为什么tf.nn.conv2d不起作用? (没有错误,但工作很奇怪)

2 个答案:

答案 0 :(得分:0)

您可能希望首先在相同条件下进行测试。您的图层示例中的转换滤镜尺寸为5 x 5,第一个尺寸为3 x 3。 3 x 3可能太小而无法捕获某些依赖项。

答案 1 :(得分:0)

  1. tf.layers.conv2d是卷积+偏见

  2. tf.nn.conv2d仅限卷积