You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何TensorFlow中one_hot编码的结果值出现加倍情况?

为什么你的TensorFlow代码输出是两倍的独热编码?

我一眼就看出问题所在啦——你最后查看的是加法后的张量b,而不是你最初生成的独热编码张量a!咱们一步步拆解:

首先看你的代码:

import tensorflow as tf
sess = tf.InteractiveSession()
# Some tensor we want to print the value of
a = tf.one_hot(1,5)
# Add print operation
a = tf.Print(a, [a], message = "This is a: ")
# Add more elements of the graph using a
b = tf.add(a, a)
b.eval()
  1. 你用tf.one_hot(1,5)生成的a确实是你期望的结果:
    array([0., 1., 0., 0., 0.], dtype=float32)
    
    这部分完全没问题。
  2. tf.Print(a, [a], message = "This is a: ")只是给a附加了一个打印操作,但它会原样返回输入的张量a,所以这里的a还是原来的独热编码。
  3. 然后你做了b = tf.add(a, a),这相当于把a和自己相加,也就是a * 2,那b的值自然就是[0., 2., 0., 0., 0.]了。
  4. 最后你调用b.eval(),获取的是b的取值,所以得到的就是这个两倍的结果。

怎么看到你想要的a的结果?

有两个办法:

  • 直接评估a:把最后一行改成a.eval(),或者在b.eval()之前加一句print(a.eval()),这样就能在控制台看到a的原始值。
  • 查看tf.Print的输出:tf.Print的内容是打印到**标准错误流(stderr)**里的,不是普通的控制台输出,你运行代码时留意这个位置的信息,就能看到它打印的This is a: [0 1 0 0 0]之类的内容。

另外提一句:在TensorFlow 1.x的交互式会话中,tf.Print是图中的一个操作,只有当依赖它的张量被评估时才会执行——这里因为b依赖a,所以b.eval()会触发tf.Print运行,只是它的输出不在你默认查看的标准输出里。


内容的提问来源于stack exchange,提问作者AzureIP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:35