Несоответствие типов данных при вычислении оценки F1 потоковой передачи в Tensorflow

Я пытался использовать этот код, как и в Tensorflow 1.13.1. Однако это вызывает следующую ошибку:

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'.

Некоторое время пытался исправить приведение типов, но не смог найти минимального изменения, которое заставило бы код работать. Может ли кто-нибудь помочь мне в этом?


person Holmes.Sherlock    schedule 03.06.2019    source источник


Ответы (1)


Я мог бы воспроизвести вашу ошибку: это происходит с Python 2, но не 3.

Поэтому либо переключитесь на Python 3, либо измените код с помощью tf.cast

f1 = tf.cast(f1, tf.float64)
f1s[2] = tf.reduce_sum(f1 * weights)

и, возможно, в других местах, но это идея

person ted    schedule 03.06.2019
comment
Боюсь, что только кастинг f1 может быть неправильным. Если я правильно помню, f1 вычисляется как тензор int, поэтому может существовать вероятность ошибки усечения даже до преобразования. - person Holmes.Sherlock; 03.06.2019
comment
Интересно, почему Tensorflow не предоставляет стандартный API для такой типичной задачи! - person Holmes.Sherlock; 03.06.2019