4

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

但是我检查了权重,它们是相同的,并且 Keras 给我的稀疏布局plot_model也是相同的,但是因为这只能检索粗略的概述:

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

4

1 回答 1

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])

然后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)

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

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

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`
于 2017-12-08T14:39:14.593 回答