在 Keras 中显示模型布局/设计(包括所有连接)

use*_*931 4 visualization lstm keras recurrent-neural-network machine-learning-model

与我从.h5文件加载该训练模型时相比,在训练后测试 Keras LSTM 模型时,我有很大的不同(第一个的准确度总是 > 0.85,但后者的准确度总是低于 < 0.2,即随机猜测) .

但是我检查了权重,它们是相同的,而且 Keras 给我的稀疏布局 viaplot_model是相同的,但由于这只能检索粗略的概述:

是否可以显示 Keras 模型的完整布局(尤其是节点连接)?

Max*_*xim 5

如果您使用 tensorflow 后端,除了plot_model,您还可以使用keras.callbacks.TensorBoard回调在 tensorboard 中可视化整个图形。例子:

callback = keras.callbacks.TensorBoard(log_dir='./graph', 
                                       histogram_freq=0, 
                                       write_graph=True, 
                                       write_images=True)
model.fit(..., callbacks=[callback])
Run Code Online (Sandbox Code Playgroud)

然后tensorboard --logdir ./graph从同一目录运行。

这是一个快速的捷径,但你可以走得更远。例如,添加 tensorflow 代码以在自定义tf.Graph实例中定义(加载)模型,如下所示:

from keras.layers import LSTM
import tensorflow as tf

my_graph = tf.Graph()
with my_graph.as_default():
  # All ops / variables in the LSTM layer are created as part of our graph
  x = tf.placeholder(tf.float32, shape=(None, 20, 64))
  y = LSTM(32)(x)
Run Code Online (Sandbox Code Playgroud)

.. 之后,您可以列出所有具有依赖关系的图节点评估任何变量显示图拓扑等,以比较模型。

我个人认为,最简单的方法是设置自己的 session。它适用于所有情况,只需最少的修补:

import tensorflow as tf
from keras import backend as K

sess = tf.Session()
K.set_session(sess)
...
# Now can evaluate / access any node in this session, e.g. `sess.graph`
Run Code Online (Sandbox Code Playgroud)