【发布时间】:2020-04-09 22:51:15
【问题描述】:
我不知道在 keras 模型中创建一个最大化二元 cross_entropy 损失的模型。
研究:
1.https://intellipaat.com/community/17707/how-to-maximize-loss-function-in-keras 说:
只需将损失乘以 -1 即可最大化损失函数,同时尝试使其最小化:
new_loss = -loss
但使用:
model.compile(loss=-1 * 'binary_crossentropy', optimizer=adam_optimizer())
导致这个错误:
ValueError: The model cannot be compiled because it has no loss to optimize.
给了我一个近似于 keras binary_crossentropy 损失的自定义函数:
import keras.backend as K
def binary_crossentropy(y_true, y_pred):
result = []
for i in range(len(y_pred)):
y_pred[i] = [max(min(x, 1 - K.epsilon()), K.epsilon()) for x in y_pred[i]]
result.append(-np.mean([y_true[i][j] * math.log(y_pred[i][j]) + (1 - y_true[i][j]) * math.log(1 - y_pred[i][j]) for j in range(len(y_pred[i]))]))
return np.mean(result)
但我不能使用它,因为它会导致错误:
len is not well defined for symbolic Tensors. (43_54/Sigmoid:0) Please call `x.shape` rather than `len(x)` for shape information.
当我用.shape[0]替换len时
我得到另一个错误:
__index__ returned non-int (type NoneType)
我用其他几种方式修改了语法,但似乎没有任何效果。 有什么想法吗?
python 3.6
张量流 1.15
keras 2.3.1
【问题讨论】:
-
尝试使用 model.compile(optimizer='adam', loss=-1 *tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuracy'])
标签: tensorflow keras deep-learning