gpt4 book ai didi

python - 张量值不正确

转载 作者:行者123 更新时间:2023-12-01 01:44:30 24 4
gpt4 key购买 nike

我有一个 10x10 矩阵和一个包含 10 个元素的向量。 10x10 矩阵随机初始化为 tf.random_uniform ; 10-向量是一个常数。

我将向量和矩阵乘以 tf.matmul并将结果称为logits。然后,我使用 logits.eval() 评估并打印 logits 。

然后,我从 logits 张量中获取最大值,并将其替换为 1,其他所有内容替换为 0。我用 .eval() 评估这个张量并打印结果张量。

evaluate 的输出不正确,因为最大值的索引不是 1。

但是,如果我采用 logits.eval() 的输出并定义一个常量,然后运行相同的代码并进行评估,结果正常。代码如下:

tf.set_random_seed(1)
beta = tf.random_uniform([100], dtype=tf.float32, name="beta", seed=2)
beta = tf.reshape(beta, [10,10])
res = tf.constant([[0., 1., 2., 3., 4., 3., 2., 1., 0., 0.]], dtype=tf.float32)
logits = tf.Variable(tf.truncated_normal([1, 10]), name='logits')
sess1 = tf.Session()
sess1.run(tf.global_variables_initializer())
logits = tf.matmul(res, beta)
print(logits.eval(session=sess1))
tf.where(
tf.equal(tf.reduce_max(logits, axis=1, keepdims=True), logits),
tf.constant(1, shape=logits.shape),
tf.constant(0, shape=logits.shape)
).eval(session=sess1)

输出:

[[ 5.64927   11.539942  10.365061   6.367746  10.591797  10.503089
11.0828085 7.0345297 8.477502 8.649068 ]]
array([[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]], dtype=int32)

我认为有些事情我做得不对,但尽管我花费了大量时间进行调试,但我无法修复它。我将不胜感激任何帮助。谢谢。

最佳答案

这是 Tensorflow 中的一个常见陷阱。问题在于您将 beta 定义为 random_normal 而不是变量的方式。这将为每个 session.run 生成一个随机beta。因此,您首先打印的 logits 与您随后进行 0-1 替换的结果不同,因为它们是通过将不同的 beta 与常数向量相乘而得到的。将 beta 定义为 tf.Variable 应该可以解决此问题。

关于python - 张量值不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51536071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com