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

作者:庞加莱 时间:2022-08-03 05:07:31 

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查看网络的参数情况

确保你的数据没有问题,很多时候输出不对不是神经网络有问题,而是数据有问题

来源:https://blog.csdn.net/u010960155/article/details/92176492

标签:K.function,调试,keras
0
投稿

猜你喜欢

  • ASP编程中的常见问题

    2007-09-20 13:32:00
  • [翻译]寻找圣杯 In Search of the Holy Grail

    2008-11-12 13:10:00
  • 通过Python爬虫代理IP快速增加博客阅读量

    2023-08-17 16:17:55
  • Python如何根据照片修改时间重命名并排序详解

    2021-06-27 02:58:31
  • pycharm创建scrapy项目教程及遇到的坑解析

    2022-05-02 12:55:38
  • Python全栈之进程和守护进程

    2021-11-25 18:05:44
  • pytorch 如何实现HWC转CHW

    2023-06-05 21:58:23
  • 对Python获取屏幕截图的4种方法详解

    2023-11-19 09:45:41
  • matplotlib交互式数据光标实现(mplcursors)

    2022-05-02 14:11:30
  • 浅谈python标准库--functools.partial

    2023-01-03 20:08:36
  • python爬虫之爬取笔趣阁小说

    2021-09-19 19:18:05
  • Python使用爬虫爬取贵阳房价的方法详解

    2022-12-01 09:55:25
  • python爬虫之场内ETF基金获取

    2021-08-18 17:51:34
  • 优化 MySQL 语句的十个建议

    2012-05-08 07:14:36
  • jsp中文显示问号问题解决方法

    2023-07-22 10:33:50
  • 使用Python制作新型冠状病毒实时疫情图

    2023-03-01 20:17:19
  • python必学知识之文件操作(建议收藏)

    2021-10-01 16:28:25
  • 浅谈django框架集成swagger以及自定义参数问题

    2022-01-09 20:25:10
  • python区分不同数据类型的方法

    2022-03-30 23:37:41
  • 小xiao说说创意图标设计心得

    2009-11-18 12:27:00
  • asp之家 网络编程 m.aspxhome.com