使用K.function()调试keras操作


Posted in Python onJune 17, 2020

Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都需要提前定义好网络的结构,也就是常说的“计算图”。

在运行前需要对计算图编译,然后才能输出结果。那这里面主要有两个问题,第一是这个图结构在运行中不能任意更改,比如说计算图中有一个隐含层,神经元的数量是100,你想动态的修改这个隐含层神经元的数量那是不可以的;第二是调试困难,keras没有内置的调试工具,所以计算图的中间结果是很难看到的,一旦最终输出跟预想不一致,很难找到问题所在。

这里谈一谈本人调试keras的一些经验:

分阶段构建你的神经网络

不要一口气把整个网络全部写完,这样很难保证中间结果的正确性。加如一个CNN文本分类模型是这样的(如下代码),应该在加了Embedding层后,停止,打印一下中间结果,看看跟embedding向量能不能对上,输出的shape对不对。对上了再进行下一步操作。

有的人觉得这样很浪费时间,但是除非你能一遍写对,否则你将花上5倍的时间发现错误。

# model parameters:
 embedding_dims = 50
 cnn_filters = 100
 cnn_kernel_size = 5
 dense_hidden_dims = 200
 model = Sequential()
 model.add(Embedding(nb_words,embedding_dims,input_length=maxlen))
 model.add(Dropout(0.5))
 model.add(Conv1D(cnn_filters, cnn_kernel_size,padding='valid', activation='relu'))
 model.add(GlobalMaxPooling1D())
 model.add(Dense(dense_hidden_dims))
 model.add(Dropout(0.5))
 model.add(Activation('relu'))
 model.add(Dense(1))
 model.add(Activation('sigmoid'))
 return model

使用K.function()函数打印中间结果

function函数可以接收传入数据,并返回一个numpy数组。使用这个函数我们可以方便地看到中间结果,尤其对于变长输入的Input。

下面是官方关于function的文档。

function

keras.backend.function(inputs, outputs, updates=None)

实例化 Keras 函数。

参数

inputs: 占位符张量列表。

outputs: 输出张量列表。

updates: 更新操作列表。

**kwargs: 需要传递给 tf.Session.run 的参数。

返回

输出值为 Numpy 数组。

异常

ValueError: 如果无效的 kwargs 被传入。

example

下面这个例子是打印一个LSTM层的中间结果,值得注意的是这个LSTM的sequence是变长的,可以看到输出的结果sequence长度分别是64和128

import keras.backend as K
 from keras.layers import LSTM, Input
 import numpy as np
 
 I = Input(shape=(None, 200)) 
 lstm = LSTM(20, return_sequences=True)
 f = K.function(inputs=[I], outputs=[lstm(I)])
 
 data1 = np.random.random(size=(2, 64, 200)) 
 print(f([data1])[0].shape)
 
 data2 = np.random.random(size=(2, 128, 200)) 
 print(f([data2])[0].shape)
 
 K.clear_session()
 
 # (2, 64, 20)
 # (2, 128, 20)

其他的调试技巧

有频繁张量变换操作的,如dot, mat, reshape等等,记得加一行形状变化的注释,如(100, 128)--> (100, 64)

可以使用tensorboard查看网络的参数情况

确保你的数据没有问题,很多时候输出不对不是神经网络有问题,而是数据有问题

以上这篇使用K.function()调试keras操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python线程的两种编程方式
Apr 14 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
python实现员工管理系统
Jan 11 Python
对numpy中布尔型数组的处理方法详解
Apr 17 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
python实现烟花小程序
Jan 30 Python
python3人脸识别的两种方法
Apr 25 Python
Python shutil模块用法实例分析
Oct 02 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
Python 实现递归法解决迷宫问题的示例代码
Jan 12 Python
通过cmd进入python的步骤
Jun 16 Python
Python如何导出导入所有依赖包详解
Jun 08 Python
哪些是python中web开发框架
Jun 17 #Python
python如何处理程序无法打开
Jun 16 #Python
python模块如何查看
Jun 16 #Python
python实现PDF中表格转化为Excel的方法
Jun 16 #Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 #Python
结束运行python的方法
Jun 16 #Python
深入理解Python 多线程
Jun 16 #Python
You might like
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
php设置静态内容缓存时间的方法
2014/12/01 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
PHP实现二维数组(或多维数组)转换成一维数组的常见方法总结
2019/12/04 PHP
JQuery中操作Css样式的方法
2014/02/12 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
2015/01/13 Javascript
深入理解JavaScript系列(30):设计模式之外观模式详解
2015/03/03 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Vue form 表单提交+ajax异步请求+分页效果
2017/04/22 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
Vue ElementUI之Form表单验证遇到的问题
2017/08/21 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
JavaScript中递归实现的方法及其区别
2017/09/12 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
three.js实现3D模型展示的示例代码
2017/12/31 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
openlayers实现地图测距测面
2020/09/25 Javascript
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python 遗传算法求函数极值的实现代码
2020/02/11 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
python 读取、写入txt文件的示例
2020/09/27 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
如何高效率的查找一个月以内的数据
2012/04/15 面试题
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
金属材料工程个人求职的自我评价
2013/12/04 职场文书
小学三年级数学教学反思
2014/01/31 职场文书
法律专业自荐信
2014/06/03 职场文书
家具商场的活动方案
2014/08/16 职场文书
Python天气语音播报小助手
2021/09/25 Python
二维码条形码生成的JavaScript脚本库
2022/07/07 Javascript