【发布时间】:2020-08-30 14:09:35
【问题描述】:
我正在将代码从 tensorflow 1.x 更新到 2.1.0。
我更改了 tensorflow 1.x 代码
labels = tf.cast(labels, tf.int64)
predict = tf.argmax(input=logits, axis=1)
tf.metrics.accuracy(labels=labels, predictions=predict)
到 tensorflow 2.1.0 代码。
labels = tf.cast(labels, tf.int64)
predict = tf.argmax(input=logits, axis=1)
tf.keras.metrics.Accuracy.update_state(labels, predict) #updated code
但是,当我运行更新后的代码时,出现以下错误。
TypeError: update_state() missing 1 required positional argument: 'y_pred'
所以,我检查了 tensorflow 2.1.0 文档,tf.keras.metrics.Accuracy.update_state() 的参数似乎是一个列表(以 [ , , , ] 的形式)。然后,我搜索了一种将张量转换为列表的方法,即
labels = tf.make_tensor_proto(labels)
labels = tf.make_ndarray(labels)
运行此代码后,出现以下错误。
TypeError: List of Tensors when single Tensor expected
所以,我尝试将张量列表转换为张量
labels = tf.stack(labels)
#or
labels = torch.stack(labels)
tf.stack() 不起作用,因为它给出了相同的初始 TypeError,说更新的代码中缺少“y_pred”。
torch.stack(),然而,给出了以下错误。
TypeError: stack() : argument 'tensors' (position 1) must be tuple of Tensors, not Tensor
所以,我猜torch.stack() 只接受一个元组,不是一个列表。
但是,tf.stack() 似乎接受了一个列表,但它并没有把它变成一个张量?
我的标签和预测是否首先是张量列表?如果是这样,为什么 tf.stack() 不把它们变成张量?如何正确转换标签并进行预测,以便将它们传递到tf.keras.metrics.Accuracy.update_state()?
除非绝对必要,否则如果不使用compat.v1.,我将不胜感激。
【问题讨论】:
标签: python tensorflow keras tensor torch