使用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 27 Python
python编程开发之类型转换convert实例分析
Nov 13 Python
python用户管理系统的实例讲解
Dec 23 Python
python使用logging模块发送邮件代码示例
Jan 18 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
May 21 Python
Python实现App自动签到领取积分功能
Sep 29 Python
解决Django Static内容不能加载显示的问题
Jul 28 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
解决Python发送Http请求时,中文乱码的问题
Apr 30 Python
Python中qutip用法示例详解
Oct 02 Python
Python字典的基础操作
Nov 01 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
ajax实现无刷新分页(php)
2010/07/18 PHP
php过滤敏感词的示例
2014/03/31 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解
2017/08/07 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
Javascript 中创建自定义对象的方法汇总
2014/12/04 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
详解JavaScript对象序列化
2016/01/19 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
jQuery实现的自动加载页面功能示例
2016/09/04 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
Angular4 组件通讯方法大全(推荐)
2018/07/12 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
Python中flatten( )函数及函数用法详解
2018/11/02 Python
Python unittest工作原理和使用过程解析
2020/02/24 Python
python遍历路径破解表单的示例
2020/11/21 Python
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
自我评价范文点评
2013/12/04 职场文书
幼儿园春游活动方案
2014/01/19 职场文书
《北大荒的秋天》教学反思
2014/04/14 职场文书
中文专业毕业生自荐信
2014/05/24 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
反四风对照检查材料思想汇报
2014/09/16 职场文书
2015年教学工作总结
2015/04/02 职场文书
2015年度房地产工作总结
2015/04/09 职场文书
结婚堵门保证书
2015/05/08 职场文书