获取自定义Keras指标内y_pred和y_true长度

问题描述 投票:0回答:2

BACKGROUND:

我想检索y_pred和y_true定制Keras指标内的平等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的阵列张量。

QUESTION:

如何获得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实际上与K.int_shape(y_pred)返回无返回2。

tensorflow keras deep-learning metrics
2个回答
1
投票

你需要记住的是,在某些情况下,给予象征性的张量的形状(例如y_true和你的情况y_pred)不能确定,直到你给值,以特定的占位符,这个张量依赖。

牢记这一点,你有两个选择:

  1. 使用K.int_shape(x)用于获得整数和诺内斯表示输入张X形的元组。在这种情况下,未确定长度的尺寸将是无。这是在您的非Tensorflow代码不依赖于不确定的尺寸情况下非常有用。例如你不能做到以下几点: if K.shape(x)[0] == 5: ... else: ...
  2. 使用K.shape(x)获取表示张量X形符号张量。要使用张量的形状来改变你的TF图,e.g这是非常有用的情况: t = tf.ones(shape=K.shape(x)[0])

0
投票

您可以通过K.int_shape(x)访问张量的形状通过取结果的第一个值,你会得到下面的数组的长度:K.int_shape(x)[0]

© www.soinside.com 2019 - 2024. All rights reserved.