张量列表和仅张量
List of tensors and just tensors
我正在将代码从 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()
没有工作,因为它给出了相同的初始类型错误,说更新代码中缺少 '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.
,我将不胜感激。
这样试试:
labels = [0,1]
logits = np.asarray([[0.9,0.1],[0.1,0.9]])
labels = tf.cast(labels, tf.int64)
predict = tf.argmax(input=logits, axis=1)
acc = tf.keras.metrics.Accuracy()
acc = acc.update_state(y_true=labels, y_pred=predict)
acc
我正在将代码从 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()
没有工作,因为它给出了相同的初始类型错误,说更新代码中缺少 '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.
,我将不胜感激。
这样试试:
labels = [0,1]
logits = np.asarray([[0.9,0.1],[0.1,0.9]])
labels = tf.cast(labels, tf.int64)
predict = tf.argmax(input=logits, axis=1)
acc = tf.keras.metrics.Accuracy()
acc = acc.update_state(y_true=labels, y_pred=predict)
acc