使用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脚本实现集群检测和管理功能
Mar 06 Python
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
python制作小说爬虫实录
Aug 14 Python
Python实现的归并排序算法示例
Nov 21 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
用python实现百度翻译的示例代码
Mar 09 Python
对python特殊函数 __call__()的使用详解
Jul 02 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
python安装scipy的步骤解析
Sep 28 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
Pytho爬虫中Requests设置请求头Headers的方法
Sep 22 Python
Python Web项目Cherrypy使用方法镜像
Nov 05 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在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
ThinkPHP实现批量删除数据的代码实例
2014/07/02 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
跟着JQuery API学Jquery 之二 属性
2010/04/09 Javascript
javascript arguments使用示例
2014/12/16 Javascript
Javascript removeChild()删除节点及删除子节点的方法
2015/12/27 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
ng2学习笔记之bootstrap中的component使用教程
2017/03/09 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
JS常用正则表达式总结【经典】
2017/05/12 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
Vue项目实现简单的权限控制管理功能
2019/07/17 Javascript
Vue2.X和Vue3.0数据响应原理变化的区别
2019/11/07 Javascript
Python中的闭包详细介绍和实例
2014/11/21 Python
Python实现的knn算法示例
2018/06/14 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
python3获取url文件大小示例代码
2019/09/18 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
2014年大学生四年规划书范文
2014/04/03 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
党的群众路线对照检查材料(个人)
2014/09/24 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
刑事法律意见书
2015/06/04 职场文书
大学班长竞选稿
2015/11/20 职场文书
2016党校培训心得体会
2016/01/07 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL