我想在自定义Keras指标中检索 y_pred 和 y_true 的len(x)
和x.shape[0]
的相等值,而不使用Keras后端
考虑一个最小的Keras指标示例:
from keras import backend as K
def binary_accuracy(y_true, y_pred):
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
这里y_pred和y_true是张量,表示某种形状的numpy数组。
如何获取keras度量函数内部基础数组的长度,以使所得代码采用以下形式:
def binary_accuracy(y_true, y_pred):
# some Keras backend code
return K.mean(K.equal(y_true, K.round(y_pred)), axis=-1)
注意:该代码必须是Keras后端代码,以便它可在任何Keras后端上使用。
我已经尝试过K.ndim(y_pred)
,即使实际上长度为45,它也返回2;而K.int_shape(y_pred)
则返回None。
答案 0 :(得分:1)
您需要记住,在某些情况下,直到将值馈送到该张量所依赖的特定占位符之后,才能确定给定符号张量的形状(例如y_true和y_pred)。
请记住,您有两个选择:
使用K.int_shape(x)获取表示输入张量x形状的int和Nones元组。在这种情况下,长度不确定的尺寸将为“无”。 如果您的非Tensorflow代码不依赖于 尺寸不确定。例如您不能执行以下操作:
if K.shape(x)[0] == 5:
...
else:
...
使用K.shape(x)
获得象征性的张量,该张量表示
张量x。
如果您想使用张量的形状来更改TF图,例如:
t = tf.ones(shape=K.shape(x)[0])
答案 1 :(得分:0)
您可以通过K.int_shape(x)
访问张量的形状
通过获取结果的第一个值,您将获得基础数组的长度:K.int_shape(x)[0]