【问题标题】:Keras Visualization of Model Built from Functional API从功能 API 构建的模型的 Keras 可视化
【发布时间】:2018-07-02 14:33:51
【问题描述】:

我想问是否有一种简单的方法可以可视化从功能 API 构建的 Keras 模型?

目前,对我而言,在高级别的顺序模型上调试的最佳方法是:

model = Sequential()
model.add(...
...

print(model.summary())
SVG(model_to_dot(model).create(prog='dot', format='svg'))

但是,如果我们构建一个更复杂的非序列模型,我很难找到一种可视化 Keras API 的好方法。

【问题讨论】:

  • 更新了我的答案,我认为你真的可以从使用 Tensorboard 中受益

标签: python tensorflow keras graph-visualization


【解决方案1】:

是的,请尝试检查keras.utils,它有一个方法plot_model(),详细说明here。似乎您已经熟悉keras.utils.vis_utilsmodel_to_dot 方法,但这是另一种选择。它的用法是这样的:

from keras.utils import plot_model
plot_model(model, to_file='model.png')

说实话,这是我仅使用 Keras 找到的最好的。像您一样使用model.summary() 有时也很有用。我还希望有一些工具可以更好地可视化模型,甚至可以查看每层的权重,以决定最佳网络结构和初始化(如果你知道一个,请告诉 :])。


您目前拥有的最佳选择可能是在 Tensorboard 上可视化事物,您可以通过 TensorBoard 回调将其包含在 Keras 中。这使您能够可视化您的训练和感兴趣的指标,以及有关层激活、偏差和内核等的一些信息。基本上,在拟合模型之前,您必须将此代码添加到您的程序中:

from keras.callbacks import TensorBoard
#indicate folder to save, plus other options
tensorboard = TensorBoard(log_dir='./logs/run1', histogram_freq=1,
    write_graph=True, write_images=False)  

#save it in your callback list, where you can include other callbacks
callbacks_list = [tensorboard]
#then pass to fit as callback, remember to use validation_data also
regressor.fit(X, Y, callbacks=callbacks_list, epochs=64, 
    validation_data=(X_test, Y_test), shuffle=True)

然后,您可以在终端上使用以下命令运行 Tensorboard(在 Web 服务上本地运行):

tensorboard --logdir=/logs/run1

这将指示您在哪个端口可视化您的训练。如果你有不同的运行,你可以传递--logdir=/logs,而不是能够将它们一起可视化以进行比较。 Tensorboard 的使用当然还有更多的选择,所以如果你正在考虑使用它,我建议你查看包含的链接。

【讨论】:

    【解决方案2】:

    经过一番谷歌搜索和试验/错误......结果你只需将整个功能性 api 模型转换回“模型格式”。

    model = some_model()
    output_layer = _build_output()
    finalmodel = Model(inputs=model.input, outputs=finalmodel)
    

    然后,您可以运行 finalmodel.summary() 或任何用于顺序建模的绘图功能。

    但是,这需要我仔细跟踪模型,我承认我没有这样做。

    【讨论】:

      【解决方案3】:
      tf.keras.utils.plot_model(
      model,
      to_file="model.png",
      show_shapes=False,
      show_layer_names=True,
      rankdir="TB",
      expand_nested=False,
      dpi=96,
      )
      

      【讨论】:

      • 感谢您提供此代码 sn-p,它可能会提供一些有限的即时帮助。 proper explanation 将通过展示为什么这是解决问题的好方法,并使其对有其他类似问题的未来读者更有用,从而大大提高其长期价值。请edit您的回答添加一些解释,包括您所做的假设。
      猜你喜欢
      • 2019-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-09
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      相关资源
      最近更新 更多