gpt4 book ai didi

python - 凯拉斯/ tensorflow : Adding a new metric with an inequality

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:46 25 4
gpt4 key购买 nike

我正在尝试使用带有 TensorFlow 后端的 Keras 来构建人工神经网络。在每个纪元之后,我想存储在指定答案的 x 点内的数据数量(目前我使用的是 8)。我相信在 Keras/TensorFlow 中执行此操作的方法是构建一个新指标。我已经用这段代码试过了:

import keras.backend as K
def inRange(y_true, y_pred):
return K.sum(K.less_equal(K.abs(y_true-y_pred), 8)) / y_true.shape[0]

# Compile model
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy', inRange])

但我不断收到错误,最新的是:

TypeError: Value passed to parameter 'input' has DataType bool not in list of allowed values: float32, float64, int64, int32, uint8, uint16, int16, int8, complex64, complex128, qint8, quint8, qint32, float16

谁能帮我解决这个问题?

我在使用 Spyder IDE 的 Windows 10 环境中使用 Anaconda Python 3.5、Tensorflow 1.1.0 和 Keras 2.0.6。

非常感谢

最佳答案

K.less_equal(x, y)返回 bool 值的 tensor,在 Tensorflow 中 bool 与整数不同(正如我们在类 C 语言中习惯的那样) .您需要使用 K.cast(x, dtype) 进行转换相应地为 int32float32。一般来说,张量是一个代数变量,所以你不能把它当作常规数组。因此,您应该使用 K.shape(x)而不是 x.shape。尝试这样的事情:

def inRange(y_true, y_pred):
t = K.sum(K.cast(K.less_equal(K.abs(y_true-y_pred), 8.0), 'float32'))
return t / K.shape(y_true)[0]

请注意 float 或 32 位整数的工作范围。在某些情况下,您可能希望改用 int64float64

关于python - 凯拉斯/ tensorflow : Adding a new metric with an inequality,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com