使用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使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
深入理解NumPy简明教程---数组2
Dec 17 Python
Python使用logging模块实现打印log到指定文件的方法
Sep 05 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
python清除字符串前后空格函数的方法
Oct 21 Python
python3实现逐字输出的方法
Jan 23 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
python录音并调用百度语音识别接口的示例
Dec 01 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
python 实现的IP 存活扫描脚本
Dec 10 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
Feb 03 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和MySQL保存和输出图片
2006/10/09 PHP
PHP通用检测函数集合
2011/02/08 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
让iframe自适应高度(支持XHTML,支持FF)
2007/07/24 Javascript
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
JS 仿腾讯发表微博的效果代码
2013/12/25 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
2014/10/20 Javascript
jQuery中 attr() 方法使用小结
2015/05/03 Javascript
深入探讨javascript函数式编程
2015/10/11 Javascript
手机移动端实现 jquery和HTML5 Canvas的幸运大奖盘特效
2016/12/06 Javascript
微信小程序开发之视频播放器 Video 弹幕 弹幕颜色自定义实例
2016/12/08 Javascript
JS+canvas画布实现炫酷的旋转星空效果示例
2019/02/13 Javascript
js实现简单的倒计时
2021/01/28 Javascript
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
[47:03]完美世界DOTA2联赛PWL S3 access vs LBZS 第一场 12.20
2020/12/23 DOTA
Python的迭代器和生成器使用实例
2015/01/14 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
Python 可视化神器Plotly详解
2020/12/26 Python
python 如何在测试中使用 Mock
2021/03/01 Python
HTML5 Canvas概述
2009/08/26 HTML / CSS
高山背包:High Sierra
2017/11/23 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
交通安全责任书范本
2014/07/24 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
七一活动主持词
2015/06/29 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
go语言使用Casbin实现角色的权限控制
2021/06/26 Golang
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android