Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都需要提前定义好网络的结构,也就是常说的“计算图”。在运行前需要对计算图编译,然后才能输出结果。那这里面主要有两个问题,第一是这个图结构在运行中不能任意更改,比如说计算图中有一个隐含层,神经元的数量是100,你想动态的修改这个隐含层神经元的数量那是不可以的;第二是调试困难,keras没有内置的调试工具,所以计算图的中间结果是很难看到的,一旦最终输出跟预想不一致,很难找到问题所在。

这里谈一谈本人调试keras的一些经验:

分阶段构建你的神经网络

不要一口气把整个网络全部写完,这样很难保证中间结果的正确性。加如一个CNN文本分类模型是这样的(如下代码),应该在加了Embedding层后,停止,打印一下中间结果,看看跟embedding向量能不能对上,输出的shape对不对。对上了再进行下一步操作。

有的人觉得这样很浪费时间,但是除非你能一遍写对,否则你将花上5倍的时间发现错误。

    # model parameters:embedding_dims = 50cnn_filters = 100cnn_kernel_size = 5dense_hidden_dims = 200model = 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 Kfrom keras.layers import LSTM, Inputimport numpy as npI = 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查看网络的参数情况
  • 确保你的数据没有问题,很多时候输出不对不是神经网络有问题,而是数据有问题

reference

http://sujitpal.blogspot.com/2017/10/debugging-keras-networks.html

使用K.function()调试keras相关推荐

  1. keras提取模型中的某一层_keras K.function获取某层的输出操作

    如下所示: from keras import backend as K from keras.models import load_model models = load_model('models ...

  2. SAP UI5 group function调试

    Created by Wang, Jerry, last modified on Feb 05, 2015 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  3. python用for循环求和1到100_python使用for循环计算0-100的整数的和方法

    python使用for循环计算0-100的整数的和方法 更新时间:2019年02月01日 09:23:07 作者:Lucifer-L 今天小编就为大家分享一篇python使用for循环计算0-100的 ...

  4. 让Keras更酷一些:中间变量、权重滑动和安全生成器

    作者丨苏剑林 单位丨追一科技 研究方向丨NLP,神经网络 个人主页丨kexue.fm 继续"让Keras更酷一些"之旅. 今天我们会用 Keras 实现灵活地输出任意中间变量,还有 ...

  5. Keras K.switch()用法

    一.switch keras.backend.switch(condition, then_expression, else_expression) 根据一个标量值在两个操作之间切换. 请注意,the ...

  6. 密码学笔记——eval(function(p,a,c,k,e,d) 加密破解

    密码学笔记--eval(function(p,a,c,k,e,d) 的加密破解 例题: 小明某天在看js的时候,突然看到了这么一段代码,发现怎么也理不出代码逻辑,你能帮帮他吗? 格式:SimCTF{} ...

  7. 揭晓eval(function(p,a,c,k,e,r)js代码解密加密程序

    最近大雄搜集站,在弄改一个wp网站侧边栏的小工具就发现了,JS的代码脚本很乱,不是常规写法,后来查阅发现是由于JS加密造成的,我对这种事情很不理解,有一些既然是选择开源了,为啥JS还加密.走你,那就一 ...

  8. python js反混淆 eval(function(p,a,c,k,e,d){

    前言 在Python爬取资源的时候需要分析网站,有时候关键部分的JS会被混淆,所以不得不去解密这段JS去获取数据,这里推荐两个JS在线解密工具. https://www.sojson.com/jsji ...

  9. 神经网络在Keras中不work!博士小哥证明何恺明的初始化方法堪比“CNN还魂丹”...

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 南巴黎电信学院(Télécom SudParis)的在读博士生Nathan Hubens在训练CNN时遇到点难题. 使用在CIFAR10数据 ...

最新文章

  1. 如何确认软件测试结束的标准(系统可以上线)转
  2. FFmpg音视频入门教程
  3. linux查看java运行日志,Linux下查看日志用到的经常使用命令
  4. Linux中ping不通外网
  5. bootstrap_bootstrap中日历范围选择插件daterangepicker的使用
  6. WordPress的Content-Length header already present错误
  7. python网页爬虫例子_Python网络爬虫 - 一个简单的爬虫例子
  8. 大数据学习笔记34:Hive - 数据库与表操作
  9. python init main_python 模块中的 __init__.py __main__.py
  10. hive 日期函数_数据分析面试必备——SQL窗口函数你会了吗?
  11. POJ 2104 K-th Number (区间第k大)
  12. 【中等】迷你语法分析器
  13. 关于Hbase手动实现Major Compact的办法
  14. 【读书向】阿里云天池大赛赛题解析——可视化
  15. MybatisPlus查询条件和排序高级封装
  16. 如何使用pr的超级键效果-达到蒙版的效果
  17. Mysql-12章-函数和操作符 (翻译+理解)
  18. 深度学习入门(六)——softmax函数的改良
  19. cgb2111-day01
  20. 原本的善意,别人有所误解

热门文章

  1. ECCV2020 最佳论文提名 | 流感知技术
  2. ESPNet: 自动驾驶领域轻量级分割模型
  3. mysql密码设置 alert_MySQL用户、权限及密码操作
  4. Bootstrap中文本的样式
  5. Nat.Commun. | DeepAccNet:基于深度学习的准确性估计改善蛋白质结构优化
  6. NLP(5) | 命名实体识别
  7. Python生物信息学③提取差异基因
  8. 《零基础免费学扩增子分析》视频课(含ppt及相应代码),无需转发,直接获取...
  9. 浙大蒋超组招博后:环境暴露组和微生物组
  10. 广东省生态土壤所孙蔚旻团队FEMS: 砷锑污染土壤剖面的微生物世界