使用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 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
DataFrame中的object转换成float的方法
Apr 10 Python
Python查看微信撤回消息代码
Jun 07 Python
python绘制立方体的方法
Jul 02 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
elasticsearch python 查询的两种方法
Aug 04 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
python基于pexpect库自动获取日志信息
Feb 01 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 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 imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
谨慎使用PHP的引用原因分析
2012/09/06 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
PHP 图片处理
2020/09/16 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
2014/08/18 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
2015/03/04 Javascript
javascript实现的闭包简单实例
2015/07/17 Javascript
将页面table内容与样式另存成excel文件的方法
2015/08/05 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
vue2笔记 — vue-router路由懒加载的实现
2017/03/03 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
微信小程序实现手指触摸画板
2018/07/09 Javascript
解决vue项目nginx部署到非根目录下刷新空白的问题
2018/09/27 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
[01:02:10]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第一局
2016/02/26 DOTA
python中xrange用法分析
2015/04/15 Python
基于scrapy实现的简单蜘蛛采集程序
2015/04/17 Python
python安装mysql-python简明笔记(ubuntu环境)
2016/06/25 Python
python模块之sys模块和序列化模块(实例讲解)
2017/09/13 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
房产销售经理职责
2013/12/20 职场文书
民主生活会对照检查材料(统计局)
2014/09/21 职场文书
教师培训简讯
2015/07/20 职场文书
redis限流的实际应用
2021/04/24 Redis
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript
基于Redis过期事件实现订单超时取消
2021/05/08 Redis