使用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函数式编程指南(四):生成器详解
Jun 24 Python
Pandas实现数据类型转换的一些小技巧汇总
May 07 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
python主线程与子线程的结束顺序实例解析
Dec 17 Python
Python基于gevent实现高并发代码实例
May 15 Python
python异常处理之try finally不报错的原因
May 18 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
python实现控制台输出颜色
Mar 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版(3)
2006/10/09 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
javascript控制Div层透明属性由浅变深由深变浅逐渐显示
2013/11/12 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
利用JavaScript的%做隔行换色的实例
2017/11/25 Javascript
javascript实现文件拖拽事件
2018/03/29 Javascript
Vue兼容ie9的问题全面解决方案
2018/06/19 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
Node.js EventEmmitter事件监听器用法实例分析
2019/01/07 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python list元素为tuple时的排序方法
2018/04/18 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
python pytest进阶之xunit fixture详解
2019/06/27 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
Rag & Bone官网:瑞格布恩高级成衣
2018/04/19 全球购物
StubHub美国:购买或出售您的门票
2019/07/09 全球购物
如何定义一个可复用的服务
2014/09/30 面试题
信息工程学院毕业生推荐信
2013/11/05 职场文书
超市业务员岗位职责
2013/12/05 职场文书
乔迁宴答谢词
2014/01/21 职场文书
中学劳技课教师的自我评价
2014/02/05 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
超市员工辞职信范文
2015/05/12 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书