在我训练完 Keras LSTM 模型后测试它与从文件加载训练模型时相比,我有很大的不同.h5
(第一个的准确度总是 > 0.85,但后面的总是低于 < 0.2,即随机猜测) .
但是我检查了权重,它们是相同的,并且 Keras 给我的稀疏布局plot_model
也是相同的,但是因为这只能检索粗略的概述:
是否可以展示 Keras 模型的完整布局(尤其是节点连接)?
在我训练完 Keras LSTM 模型后测试它与从文件加载训练模型时相比,我有很大的不同.h5
(第一个的准确度总是 > 0.85,但后面的总是低于 < 0.2,即随机猜测) .
但是我检查了权重,它们是相同的,并且 Keras 给我的稀疏布局plot_model
也是相同的,但是因为这只能检索粗略的概述:
是否可以展示 Keras 模型的完整布局(尤其是节点连接)?
如果您使用的是 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`