我正在尝试使用MNIST数据将简单的张量流网络转换为keras并获得可重现的结果。
只有一个Dense图层我可以这样做,但是当我添加一个Conv2D图层时,tensorflow和keras的结果是不同的,我无法弄清楚原因。
tensorflow实现(tensorflow MNIST教程的一部分)如下:
with tf.name_scope('conv1'):
W_conv1 = weight_variable([2, 2, 1, 32])
b_conv1 = bias_variable([32])
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
def weight_variable(shape):
"""weight_variable generates a weight variable of a given shape."""
initial = tf.truncated_normal(shape, stddev=0.1, seed=0)
return tf.Variable(initial)
def bias_variable(shape):
"""bias_variable generates a bias variable of a given shape."""
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
Keras的实施如下:
ki = TruncatedNormal(mean=0.0, stddev=0.1, seed=0)
bi = Constant(value=0.1)
net = Conv2D(32, kernel_size=(2, 2), activation='relu',
kernel_initializer=ki, bias_initializer=bi)(input_image)
问题仅在于此层,就像我删除它一样,网络性能在两种情况下都是相同的,每个纪元的纪元。
另外:如果我在两种情况下都将内核大小更改为(1,1),那么性能是相同的,仅适用于更大的大小。
是否有人知道keras实现中的不同之处,可能会导致这种情况。 (它在tensorflow之上运行,并且在每种情况下都在同一台机器上运行。)
谢谢。