首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow: Tensordot可重现性结果

Tensorflow: Tensordot可重现性结果
EN

Stack Overflow用户
提问于 2019-05-11 15:47:53
回答 1查看 35关注 0票数 1

我正在和tf.tensordot一起玩Tensorflow。然而,我正经历一些矛盾,困扰着我。下面是一个可重复的例子:

代码语言:javascript
复制
tf.reset_default_graph()
tf.set_random_seed(42)
np.random.seed(42)
X = np.random.rand(150, 196, 268).astype(np.float32)
W = tf.Variable(initial_value=tf.random_normal([268, 22], stddev=0.1))
dotted_150 = tf.tensordot(X, W, axes=[[2], [0]])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    output_150 = sess.run(dotted_150)

这将返回一个具有维度(150, 196, 22)的张量。

代码语言:javascript
复制
tf.reset_default_graph()
tf.set_random_seed(42)
np.random.seed(42)
X = np.random.rand(1, 196, 268).astype(np.float32)
W = tf.Variable(initial_value=tf.random_normal([268, 22], stddev=0.1))
dotted_1 = tf.tensordot(X, W, axes=[[2], [0]])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    output_1 = sess.run(dotted_1)

这将返回一个具有维度(1, 196, 22)的张量。

现在,如果我们测试来自output_150的第一个元素是否几乎等于来自output_1的第一个和唯一的元素,结果就是这两个数组之间的不匹配。

代码语言:javascript
复制
np.testing.assert_allclose(output_1[0], output_150[0])

另一方面,如果我们这样做:

代码语言:javascript
复制
np.random.seed(42)
input_150 = np.random.rand(150, 196, 268).astype(np.float32)
np.random.seed(42)
input_1 = np.random.rand(1, 196, 268).astype(np.float32)
np.testing.assert_equal(input_150[0], input_1[0])

我们看到输入是完全相同的。尽管如此,我希望tf.tensordot的输出也是相同的,而且它们并不相同。

同样,下面是一个使用tf.reshapetf.matmultf.reshape等价的

代码语言:javascript
复制
tf.reset_default_graph()
tf.set_random_seed(42)
np.random.seed(42)
X = np.random.rand(150, 196, 268).astype(np.float32)
W = tf.Variable(initial_value=tf.random_normal([268, 22], stddev=0.1))
reshaped = tf.reshape(X, [-1, 268])
mulled_150 = tf.reshape(tf.matmul(reshaped, W), [-1, 196, 22])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    output_150 = sess.run(mulled_150)


tf.reset_default_graph()
tf.set_random_seed(42)
np.random.seed(42)
X = np.random.rand(1, 196, 268).astype(np.float32)
W = tf.Variable(initial_value=tf.random_normal([268, 22], stddev=0.1))
reshaped = tf.reshape(X, [-1, 268])
mulled_1 = tf.reshape(tf.matmul(reshaped, W), [-1, 196, 22])
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    output_1 = sess.run(mulled_1)

np.testing.assert_allclose(output_1[0], output_150[0])

结果完全相同,输出数组之间的不匹配。这怎么可能呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-11 17:08:59

显然,如果我使用tf.float64精度而不是tf.float32,结果是相同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56091886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档