使用K.function()调试keras操作

 更新时间:2020年06月17日 08:42:14   作者:庞加莱  
这篇文章主要介绍了使用K.function()调试keras操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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程序实例(通讯录)

    这篇文章主要分享了用python实现的一个通讯录实例,学习python的朋友可以参考下
    2013-11-11
  • 人机交互程序 python实现人机对话

    人机交互程序 python实现人机对话

    这篇文章主要为大家详细介绍了人机交互程序,初步实现python人机对话,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Python几种绘制时间线图的方法

    Python几种绘制时间线图的方法

    这篇文章主要介绍了Python几种绘制时间线图的方法,Matplotlib 作为 Python 家族最为重要的可视化工具,其基本的 API 以及绘制流程还是需要掌握的
    2022-08-08
  • python清空命令行方式

    python清空命令行方式

    今天小编就为大家分享一篇python清空命令行方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • 利用Python将多张图片合成视频的实现

    利用Python将多张图片合成视频的实现

    这篇文章主要介绍了利用Python将多张图片合成视频的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • python对DICOM图像的读取方法详解

    python对DICOM图像的读取方法详解

    DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信,是医学图像和相关信息的国际标准(ISO 12052)。下面这篇文章主要给大家介绍了关于python对DICOM图像读取的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • Python与MongoDB轻松管理数据

    Python与MongoDB轻松管理数据

    本文将介绍如何使用Python操作MongoDB,包括安装MongoDB、安装Python的MongoDB驱动程序、连接到MongoDB、插入、查询、更新和删除数据,以及示例代码
    2023-11-11
  • ORM Django 终端打印 SQL 语句实现解析

    ORM Django 终端打印 SQL 语句实现解析

    这篇文章主要介绍了ORM Django 终端打印 SQL 语句实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 对python中的高效迭代器函数详解

    对python中的高效迭代器函数详解

    今天小编就为大家分享一篇对python中的高效迭代器函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 使用Python和XPath解析动态JSON数据的操作指南

    使用Python和XPath解析动态JSON数据的操作指南

    JSON动态数据在Python中扮演着重要的角色,为开发者提供了处理实时和灵活数据的能力,动态JSON数据的获取可能涉及到网络请求和API调用,可以使用Python和XPath来解析动态JSON数据,接下来小编就给大家介绍一下操作步骤
    2023-09-09

最新评论