Я не знаю, как создать модель, максимизирующую двоичную потерю кросс-энтропии в модели кераса.
исследование:
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.
https://stats.stackexchange.com/questions/303229/why-does-keras-binary-crossentropy-loss-function-return-wrong-values дал мне пользовательскую функцию, которая приближает потерю 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.
при замене len
на .shape[0]
я получаю еще одну ошибку:
__index__ returned non-int (type NoneType)
Я возился с синтаксисом несколькими способами, но, похоже, ничего не работает. есть идеи?
python 3,6
тензор потока 1,15
керас 2,3,1