Tensorflow 中流式 F1 分数计算中的数据类型不匹配
Posted
技术标签:
【中文标题】Tensorflow 中流式 F1 分数计算中的数据类型不匹配【英文标题】:Data type mismatch in streaming F1 score calculation in Tensorflow 【发布时间】:2019-10-18 20:55:58 【问题描述】:我试图在 Tensorflow 1.13.1 上使用 this code。但是,它会引发以下错误:
sherlock@mybox:~/cs273/autocat/bert$ python streaming2.py
Traceback (most recent call last):
File "streaming2.py", line 233, in <module>
tf_f1 = tf_f1_score(t, p)
File "streaming2.py", line 161, in tf_f1_score
f1s[2] = tf.reduce_sum(f1 * weights)
File "/home/sherlock/.virtualenvs/autocat/local/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 812, in binary_op_wrapper
return func(x, y, name=name)
File "/home/sherlock/.virtualenvs/autocat/local/lib/python2.7/site-packages/tensorflow/python/ops/math_ops.py", line 1078, in _mul_dispatch
return gen_math_ops.mul(x, y, name=name)
File "/home/sherlock/.virtualenvs/autocat/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_math_ops.py", line 5860, in mul
"Mul", x=x, y=y, name=name)
File "/home/sherlock/.virtualenvs/autocat/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 547, in _apply_op_helper
inferred_from[input_arg.type_attr]))
TypeError: Input 'y' of 'Mul' Op has type float64 that does not match type int64 of argument 'x'.
尝试修复演员表一段时间,但未能找到使代码正常工作的最小更改。谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:我可以重现您的错误:它发生在 Python 2 但不是 3。
所以要么切换到 Python 3,要么使用 tf.cast
更改代码
f1 = tf.cast(f1, tf.float64)
f1s[2] = tf.reduce_sum(f1 * weights)
也许在其他地方,但就是这样
【讨论】:
恐怕只投射f1
可能不正确。如果我没记错的话,f1
被计算为int
张量,所以在转换之前可能会出现截断错误。
我想知道为什么 Tensorflow 没有为如此常见的任务提供标准 API!以上是关于Tensorflow 中流式 F1 分数计算中的数据类型不匹配的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Spark ML 感知器分类器的 F1 分数很高,而 TensorFlow 上的相同模型表现很差?