keras 自定义loss model.add_loss的使用详解


Posted in Python onJune 22, 2020

一点见解,不断学习,欢迎指正

1、自定义loss层作为网络一层加进model,同时该loss的输出作为网络优化的目标函数

from keras.models import Model
import keras.layers as KL
import keras.backend as K
import numpy as np
from keras.utils.vis_utils import plot_model
 
x_train=np.random.normal(1,1,(100,784))
 
x_in = KL.Input(shape=(784,))
x = x_in
x = KL.Dense(100, activation='relu')(x)
x = KL.Dense(784, activation='sigmoid')(x)
def custom_loss1(y_true,y_pred):
 return K.mean(K.abs(y_true-y_pred))
loss1=KL.Lambda(lambda x:custom_loss1(*x),name='loss1')([x,x_in])
 
model = Model(x_in, [loss1])
model.get_layer('loss1').output#取出loss
model.add_loss(loss1)#作为网络优化的目标函数
model.compile(optimizer='adam')
plot_model(model,to_file='model.png',show_shapes=True)
#
model.fit(x_train, None, epochs=5)

2、自定义loss,作为网络优化的目标函数

x_in = KL.Input(shape=(784,))
x = x_in
x = KL.Dense(100, activation='relu')(x)
x = KL.Dense(784, activation='sigmoid')(x)
 
model = Model(x_in, x)
loss = K.mean((x - x_in)**2)
model.add_loss(loss)#只是作为loss优化目标函数
model.compile(optimizer='adam')
plot_model(model,to_file='model.png',show_shapes=True)
model.fit(x_train, None, epochs=5)

补充知识:keras load_weights fine-tune

分享一个小技巧,就是在构建网络模型的时候,不要怕麻烦,给每一层都定义一个名字,这样在复用之前的参数权重的时候,除了官网给的先加载权重,再冻结权重之外,你可以通过简单的修改层的名字来达到加载之前训练的权重的目的,假设权重文件保存为model_pretrain.h5 ,重新使用的时候,我把想要复用的层的名字设置成一样的,然后

model.load_weights('model_pretrain.h5', by_name=True)

以上这篇keras 自定义loss model.add_loss的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python数组遍历的简单实现方法小结
Apr 27 Python
Python迭代和迭代器详解
Nov 10 Python
浅谈pyhton学习中出现的各种问题(新手必看)
May 17 Python
python 文件操作删除某行的实例
Sep 04 Python
使用apidocJs快速生成在线文档的实例讲解
Feb 07 Python
Python生成器以及应用实例解析
Feb 08 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
python 写一个文件分发小程序
Dec 05 Python
python爬虫框架feapde的使用简介
Apr 20 Python
Python的property属性详细讲解
Apr 11 Python
Python项目跨域问题解决方案
Jun 22 #Python
python os模块在系统管理中的应用
Jun 22 #Python
解决tensorflow读取本地MNITS_data失败的原因
Jun 22 #Python
python实现猜数游戏(保存游戏记录)
Jun 22 #Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 #Python
在Mac中配置Python虚拟环境过程解析
Jun 22 #Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 #Python
You might like
PHP模板引擎SMARTY
2006/10/09 PHP
PHP超全局数组(Superglobals)介绍
2015/07/01 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
Nodejs连接mysql并实现增、删、改、查操作的方法详解
2018/01/04 NodeJs
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
javascript中toFixed()四舍五入使用方法详解
2018/09/28 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
Python基本数据类型详细介绍
2014/03/11 Python
分析在Python中何种情况下需要使用断言
2015/04/01 Python
解析Python中的变量、引用、拷贝和作用域的问题
2015/04/07 Python
Python文件读取的3种方法及路径转义
2015/06/21 Python
python爬虫面试宝典(常见问题)
2018/03/02 Python
python实时监控cpu小工具
2018/06/21 Python
python递归全排列实现方法
2018/08/18 Python
浅谈Python的list中的选取范围
2018/11/12 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
天鹅的故事教学反思
2014/02/04 职场文书
办公室岗位职责
2014/02/12 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
2014镇党委书记党建工作汇报材料
2014/11/02 职场文书
初中中等生评语
2014/12/29 职场文书
还款承诺书范本
2015/01/20 职场文书
检讨书格式范文
2015/05/07 职场文书