使用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 17 Python
Python中encode()方法的使用简介
May 18 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
《Python学习手册》学习总结
Jan 17 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
python得到单词模式的示例
Oct 15 Python
pandas 转换成行列表进行读取与Nan处理的方法
Oct 30 Python
Python自动发送邮件的方法实例总结
Dec 08 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
python根据txt文本批量创建文件夹
Dec 08 Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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 上传文件大小限制
2009/07/05 PHP
Java中final关键字详解
2015/08/10 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
JavaScript判断变量是否为undefined的两种写法区别
2013/12/04 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
jQuery实现仿美橙互联两级导航菜单的方法
2015/03/09 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
JavaScript find()方法及返回数据实例
2020/04/30 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
使用Python写CUDA程序的方法
2017/03/27 Python
PYTHON基础-时间日期处理小结
2018/05/05 Python
python框架中flask知识点总结
2018/08/17 Python
python读取目录下最新的文件夹方法
2018/12/24 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
Django 使用easy_thumbnails压缩上传的图片方法
2019/07/26 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
详解python中GPU版本的opencv常用方法介绍
2020/07/24 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
中学生励志演讲稿
2014/04/26 职场文书
个人查摆问题整改措施
2014/10/04 职场文书
保护校园环境倡议书
2015/04/28 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
Spring Boot两种全局配置和两种注解的操作方法
2021/06/29 Java/Android
MySQL系列之二 多实例配置
2021/07/02 MySQL
python3 字符串str和bytes相互转换
2022/03/23 Python