在KERAS中使用自定义损失功能

问题描述

我正在尝试为我的keras模型实现自定义损失。

我想结合两个损耗MSE和应用于自动编码器的KL Divergence。 。我成功地在TF 2.0中实现了它,但是现在我想在Keras中实现它

代码如下:


stacked_encoder = keras.models.Sequential([
   
    keras.layers.Dense(60,activation="tanh",input_shape=[60]),keras.layers.Dense(3,activation="tanh"),])
stacked_decoder = keras.models.Sequential([
    keras.layers.Dense(60,activation=None,),])
stacked_ae = keras.models.Sequential([stacked_encoder,stacked_decoder])
def KL_divergence(x1,y1):
    return x1* tf.log(x1 / y1) + (1 - x1) * tf.log((1 - x1) / (1 - y1))

latent_representation  = stacked_encoder.predict(train)
output = stacked_ae.predict(train)


latent_activation = 1/2 *(tf.constant([1.0,1.0,1.0]) + tf.reduce_mean(latent_representation,axis=0))
sparsity_param=0.5   
sparsity = np.tile(sparsity_param,3)
sparsity_loss = tf.reduce_sum(KL_divergence(sparsity,latent_activation))

mse = tf.reduce_mean(tf.square(output - train))


loss =tf.add_n([ tf.cast(mse,tf.float32) + sparsity_loss])
stacked_ae.compile(loss=loss,optimizer=keras.optimizers.SGD(lr=0.1))
history = stacked_ae.fit(train,train,epochs=20,batch_size=64)

重要的是要知道我想最小化KL散度,而不是将其用作正则化器 致电model.compile时出现以下错误:

OperatorNotAllowedInGraphError: using a `tf.Tensor` as a Python `bool` is not allowed in Graph execution. Use Eager execution or decorate this function with @tf.function

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...