使用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 相关文章推荐
python3简单实现微信爬虫
Apr 09 Python
详解appium+python 启动一个app步骤
Dec 20 Python
TensorFlow Session会话控制&Variable变量详解
Jul 30 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
Feb 18 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 Python
python获取百度热榜链接的实例方法
Aug 25 Python
python em算法的实现
Oct 03 Python
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
Jun 11 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
mayfish 数据入库验证代码
2010/04/30 PHP
PHP json_encode中文乱码问题的解决办法
2013/09/09 PHP
PHP原生函数一定好吗?
2014/12/08 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
Javascript 去除数组的重复元素
2010/05/04 Javascript
js style动态设置table高度
2014/10/21 Javascript
jQuery异步获取json数据方法汇总
2014/12/22 Javascript
巧用canvas
2017/01/21 Javascript
AngularJS表单提交实例详解
2017/02/18 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
javascript数组常见操作方法实例总结【连接、添加、删除、去重、排序等】
2019/06/13 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
python设置检查点简单实现代码
2014/07/01 Python
python基础教程项目四之新闻聚合
2018/04/02 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
python计算二维矩形IOU实例
2020/01/18 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
浅析Python __name__ 是什么
2020/07/07 Python
selenium学习教程之定位以及切换frame(iframe)
2021/01/04 Python
傲盾软件面试题
2015/08/17 面试题
技术总监的工作职责
2013/11/13 职场文书
小学生获奖感言范文
2014/02/02 职场文书
招股说明书范本
2014/05/06 职场文书
交通安全责任书范本
2014/07/24 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
Python上下文管理器Content Manager
2021/06/26 Python