2016-11-13 129 views
0

总体来说,我写使用Tensorflow一个RNN模型。我继承RNNCell并自定义我自己的单元格。最后,我使用dynamic_rnn来构建整个RNN。细节是我想将张量从shape [n,m]转换为[n,m,1]。我使用两种方法来实现这一点:为什么在Tensorflow中使用reshape和expand_dims会得到不同的结果?

tf.reshape(matrix, [n, m, 1]) # the first method 
tf.expand_dims(matrix, -1) # the second method 

我期望是,使用这两种方法,我会得到完全相同的训练和预测结果(所有的随机种子是固定的)。但结果是不同的。我很困惑。

回答

0

tf.reshape只是重新排列元素,但tf.expand_dims增加了一个层面,你的张量。它们的功能是不同的。

但是,你所期望的是,由于随机初始化,每次你训练的结果应该是略有不同。

+0

谢谢!我用session.run得到两个'重塑的结果(矩阵,[N,M,1])'和'expand_dims(矩阵,-1)',它们是完全一样的。 “他们的职能是不同的”是什么意思?我设置了固定的随机种子,因此每次运行代码时都没有随机性。 – jzb

+0

因此,您始终使用相同的输入获得相同的结果? –

+0

是的,如果我坚持用方法1(或方法2),我总是得到相同的结果,因为随机种子是固定的。但是如果我将代码从方法1切换到方法2(反之亦然),我会得到不同的结果。 – jzb