我有一个用Keras实现的完全连接的前馈网络。最初,我使用二进制交叉熵作为损耗和度量,然后使用Adam优化器,如下所示:
adam = keras.optimizers.Adam(lr=0.01, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(optimizer=adam, loss='binary_crossentropy', metrics=['binary_crossentropy'])
此模型训练良好,并给出了良好的结果。为了获得更好的结果,我想使用以下其他损失函数和指标,
import keras.backend as K
def soft_bit_error_loss(yTrue, yPred):
loss = K.pow(1 - yPred, yTrue) * K.pow(yPred, 1-yTrue)
return K.mean(loss)
def ber(yTrue, yPred):
x_hat_train = K.cast(K.greater(yPred, 0.5), 'uint8')
train_errors = K.cast(K.not_equal(K.cast(yTrue, 'uint8'), x_hat_train), 'float32')
train_ber = K.mean(train_errors)
return train_ber
我用它来编译我的模型,如下所示
model.compile(optimizer=adam, loss=soft_bit_error_loss, metrics=[ber])
但是,当我这样做时,每次经过以下训练后,损失和度量就会发生变化。
这可能是什么原因?
答案 0 :(得分:1)