gpt4 book ai didi

python - Keras 中的二值化张量

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

我需要为 Keras 创建一个仅适用于二进制值的损失函数。为了将所有大于 0.5 的值转换为 1.0,所以我这样做了:

def MyLoss(y_true, y_pred:
y_true_f = K.flatten(y_true)
y_pred_f = K.flatten(K.cast(K.greater(y_pred, 0.5), 'float32'))
#y_pred_f = K.flatten(K.cast(y_pred > 0.5), 'float32')
#y_pred_f = K.flatten(y_pred > 0.5)
return K.sum(y_true_f * y_pred_f)

代码可以编译,但稍后会生成以下错误:

ValueError: None values not supported.

我也尝试了注释行,同样的错误。如果我不尝试使用 y_pred_f = K.flatten(y_pred) 修改值,它会运行。

我做错了什么?

如何将张量二值化?

最佳答案

二值化我的逻辑密集层的解决方案是在激活中创建自定义 lambda 函数。 (我正在研究语义哈希自动编码器(Hinton))。 Keras 发出警告,但事实证明它仍然有效。早期的尝试由于无法在反向传播阶段的梯度导数计算中区分轮函数而引发错误。 (这是旧的 ValueError:不支持 None 值。)这里的关键是在激活中而不是作为单独的层进行操作。

encoder_outputs = Dense(units=latent_vector_len, activation=k.layers.Lambda(lambda z: k.backend.round(k.layers.activations.sigmoid(x=z))), kernel_initializer="lecun_normal")(x)

通常在 0 到 1 范围内的实数输出被转换为 0 和 1,如图所示。

# Look it works!

y = encoder_model.predict(x=x_in)
print(y)
>>> [[1. 0. 0. 1. 0. 1. 0. 0.]]

换句话说这种方式行不通:

decoder_outputs_bin = k.layers.Lambda(lambda z: k.backend.round(z))(decoder_outputs) # ERR at training time ValueError: None values not supported.

关于python - Keras 中的二值化张量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48795910/

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