使用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入门教程
Feb 08 Python
python根据时间生成mongodb的ObjectId的方法
Mar 13 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
用python写个自动SSH登录远程服务器的小工具(实例)
Jun 17 Python
Python实现生成随机数据插入mysql数据库的方法
Dec 25 Python
Python采集代理ip并判断是否可用和定时更新的方法
May 07 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
浅谈pandas用groupby后对层级索引levels的处理方法
Nov 06 Python
Python设计模式之策略模式实例详解
Jan 21 Python
详解python中sort排序使用
Mar 23 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
Python读取JSON数据操作实例解析
May 18 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调试函数和日志记录函数分享
2015/01/31 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
Javascript this指针
2009/07/30 Javascript
javascript下对于事件、事件流、事件触发的顺序随便说说
2010/07/17 Javascript
jQuery 拖动层(在可视区域范围内)
2012/05/24 Javascript
分享两款带遮罩的jQuery弹出框
2015/12/30 Javascript
js实现文字截断功能
2016/09/14 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
Python常用列表数据结构小结
2014/08/06 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
2015/04/25 Python
详解Python中的文件操作
2016/08/28 Python
纯python实现机器学习之kNN算法示例
2018/03/01 Python
Python贪心算法实例小结
2018/04/22 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
python 怎样进行内存管理
2020/11/10 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
css3学习系列之移动属性详解
2017/07/04 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
工地门卫岗位职责
2013/12/30 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
厉行节约工作总结
2015/08/12 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
导游词之介休绵山
2019/12/31 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android
css3 选择器
2022/05/11 HTML / CSS