python - 在深度学习 keras 的损失函数中添加中间层
问题描述
我想在 keras 中为 DNN 模型 VAE 使用中间层的自定义损失函数。我调用模型函数,然后将损失添加到层中。
错误是:
ValueError: An operation has `None` for gradient. Please make sure that all of your ops have a gradient defined (i.e. are differentiable). Common ops without gradient: K.argmax, K.round, K.eval
model
被编译但在训练期间导致错误
#Below is the code which causes error
#this returns the models (en,de, model) and layers (z_mean and #z_log_sigma)
en,de,model,z_mean,z_log_sigma = load_model(config)
#defining loss using intermediate layers returned
kl_loss = - 0.5 * K.mean(1 + z_log_sigma - K.square(z_mean) -
K.exp(z_log_sigma), axis=-1)
model.add_loss(kl_loss)
model.compile( optimizer=optimizer)
#error is raised during training
history = model.fit_generator(
genfun,
steps_per_epoch = display_interval,
epochs = 1,
shuffle=False,
verbose = 1
) #callbacks=[eval_map])
解决方案
该解决方案适用于设计自定义损失层。
en,de,model,z_mean,z_log_sigma = load_model(config)
def custom_loss_wrapper(z_mean=z_mean,z_log_sigma=z_log_sigma):
def loss(y_true, y_pred):
xent_loss = binary_crossentropy(y_true, y_pred)
kl_loss = - 0.5 * K.mean(1 + z_log_sigma - K.square(z_mean) -
K.exp(z_log_sigma), axis=-1)
return xent_loss+kl_loss
return loss
model.compile(
optimizer=optimizer,loss=custom_loss_wrapper(z_mean,z_log_sigma))
推荐阅读
- sql - 用于 Tableau 的动态 Oracle 表函数
- python - 同时访问字典中的所有键
- html - 在背景图像上写文字没有响应
- python - 如何通过 CSV 文件中的链接显示图像
- tensorflow - 如何在 model.predict 解码预测中使用 38 个类而不是 1000 个类
- angular - 如何将 Angular App 部署到 Heroku 并保留为 PWA?
- android - 材料设计主题颜色属性未显示
- windows - 如何为选择参数添加多个 if else 条件?
- wkhtmltopdf - 来自文件列表的 wkhtmltopdf 基于 H 标签生成错误的 TOC
- jquery - 如何将消息添加到数据表分页行