使用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实现的金山快盘的签到程序
Jan 17 Python
python使用递归解决全排列数字示例
Feb 11 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
Python Socket编程之多线程聊天室
Jul 28 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
tensorflow保持每次训练结果一致的简单实现
Feb 17 Python
python numpy库np.percentile用法说明
Jun 08 Python
用Python进行websocket接口测试
Oct 16 Python
Python实战之疫苗研发情况可视化
May 18 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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
php和javascript之间变量的传递实现代码
2012/12/19 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
关于Anemometer图形化显示MySQL慢日志的工具搭建及使用的详细介绍
2020/07/13 PHP
Jquery 表单取值赋值的一些基本操作
2009/10/11 Javascript
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
yepnope.js 异步加载资源文件
2011/09/08 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
JavaScript中window、doucment、body的解释
2013/08/14 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
理解Javascript的动态语言特性
2015/06/17 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
浅谈在vue中用webpack打包之后运行文件的问题以及相关配置方法
2018/02/21 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
通过函数作用域和块级作用域看javascript的作用域链
2018/08/05 Javascript
vue删除html内容的标签样式实例
2018/09/13 Javascript
解决vue-router 二级导航默认选中某一选项的问题
2019/11/01 Javascript
详解Python迭代和迭代器
2016/03/28 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
Pycharm取消py脚本中SQL识别的方法
2018/11/29 Python
Python OpenCV实现视频分帧
2019/06/01 Python
Python调用C语言的实现
2019/07/26 Python
如何基于matlab相机标定导出xml文件
2020/11/02 Python
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
宿舍卫生检讨书
2014/01/16 职场文书
商场中秋节广播稿
2014/01/17 职场文书
新三好学生主要事迹
2014/01/23 职场文书
化妆品店促销方案
2014/02/24 职场文书
单位在职证明书
2014/09/11 职场文书
经费申请报告范文
2015/05/18 职场文书
2016年“5.12”护士节慰问信
2015/11/30 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android