发新帖

Keras 模型如何可视化

[复制链接]
1122 6
回帖奖励 35 金币      回复本帖可获得 5 金币奖励! 每人限 10 次(中奖概率 50%)

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
我用 tf.keras 定义了一些模型,但是貌似没办法直接转换成 Tensorboard 支持的格式?

tf.GraphDef() 拿到的是空
keras.utils.plot_model 也报错: Model object has no attribute _container_nodes

请问有没有好的办法可以作 keras model 可视化?

代码如下:

import tensorflow as tf
import tf.keras

model = keras.Sequential()
model.add(keras.layers.LSTM(3, input_shape=(2,1))
model.add(keras.layers.Dense(1))

for node in tf.GraphDef().node:
    if node:
        print(node.op)  # 什么都看不到

# 报错
keras.utils.plot_model(model, to_file='model.png')
yunhai_luo已获得悬赏 10 金币+10 金币

最佳答案

tf.GraphDef()是实例化一个新的GraphDef对象,跟你的计算图没有任何关系,自然是空的。如果你想输出所有节点的操作,应该从你当前的计算图入手: 至于keras.utils.plot_model(model, to_file='model.png')报错, ...
本楼点评(0) 收起

精彩评论6

neverchange  TF豆豆  发表于 2018-7-4 16:04:27 | 显示全部楼层

回帖奖励 +5 金币

需要指定tensorboard --logdir=.来确定输出目录,查看log和图
本楼点评(0) 收起
M丶Sulayman  TF豆豆  发表于 2018-4-23 09:39:43 | 显示全部楼层

回帖奖励 +5 金币

yunhai_luo 发表于 2018-4-21 03:32
tf.GraphDef()是实例化一个新的GraphDef对象,跟你的计算图没有任何关系,自然是空的。如果你想输出所有 ...

666,大神!~学到了
本楼点评(0) 收起
舟3332  TF芽芽  发表于 2018-4-21 06:55:19 | 显示全部楼层
yunhai_luo 发表于 2018-4-21 03:32
tf.GraphDef()是实例化一个新的GraphDef对象,跟你的计算图没有任何关系,自然是空的。如果你想输出所有 ...

太给力了。感谢感谢!
本楼点评(0) 收起
yunhai_luo  TF豆豆  发表于 2018-4-21 03:32:32 | 显示全部楼层
舟3332 发表于 2018-4-20 19:43
感谢大神指点。

我现在可以在 TensorBoard 里面看到模型了。但是还是不是特别理解为什么 tf.GraphDef(). ...

tf.GraphDef()是实例化一个新的GraphDef对象,跟你的计算图没有任何关系,自然是空的。如果你想输出所有节点的操作,应该从你当前的计算图入手:
  1. import tensorflow as tf

  2. model = tf.keras.Sequential()
  3. model.add(tf.keras.layers.LSTM(3, input_shape=(2,1)))
  4. model.add(tf.keras.layers.Dense(1))

  5. for node in tf.get_default_graph().as_graph_def().node:
  6.     print(node.op)
复制代码


至于keras.utils.plot_model(model, to_file='model.png')报错,你应该把错误内容放上来。我估计你的错误是:
  1. ---------------------------------------------------------------------------
  2. AttributeError                            Traceback (most recent call last)
  3. <ipython-input-1-f126cbd05746> in <module>()
  4.       9
  5.      10 # 报错
  6. ---> 11 keras.utils.plot_model(model, to_file='model.png')

  7. E:\Anaconda3\envs\tf\lib\site-packages\tensorflow\python\keras\_impl\keras\utils\vis_utils.py in plot_model(model, to_file, show_shapes, show_layer_names, rankdir)
  8.     147           'LR' creates a horizontal plot.
  9.     148   """
  10. --> 149   dot = model_to_dot(model, show_shapes, show_layer_names, rankdir)
  11.     150   _, extension = os.path.splitext(to_file)
  12.     151   if not extension:

  13. E:\Anaconda3\envs\tf\lib\site-packages\tensorflow\python\keras\_impl\keras\utils\vis_utils.py in model_to_dot(model, show_shapes, show_layer_names, rankdir)
  14.     121     for i, node in enumerate(layer._inbound_nodes):
  15.     122       node_key = layer.name + '_ib-' + str(i)
  16. --> 123       if node_key in model._container_nodes:
  17.     124         for inbound_layer in node.inbound_layers:
  18.     125           inbound_layer_id = str(id(inbound_layer))

  19. AttributeError: 'Model' object has no attribute '_container_nodes'
复制代码


如果是这样,那么这是bug,Github上提到过
本楼点评(0) 收起
舟3332  TF芽芽  发表于 2018-4-20 19:43:59 | 显示全部楼层
yunhai_luo 发表于 2018-4-20 15:15
我不确定你是怎么用tf.keras 定义模型的,你的代码貌似有些问题。如果你是想用TensorBoard看Keras模型,可 ...

感谢大神指点。

我现在可以在 TensorBoard 里面看到模型了。但是还是不是特别理解为什么 tf.GraphDef().node 拿到的东西是空的。以及 keras.utils.plot_model(model, to_file='model.png') 会报错

另外我用的是 tf.keras 也就是
import tensorflow.python.keras

本楼点评(2) 收起
  • yunhai_luo我还真不知道tensorflow里有keras可以这样用,不好意思。你看,我这根本不是大神啊
    2018-4-21 03:35 回复
  • 舟3332回复 yunhai_luo : TF 这么多方法没有人能都知道呢~ 一起进步~
    2018-4-21 07:27 回复
yunhai_luo  TF豆豆  发表于 2018-4-20 15:15:10 | 显示全部楼层
本帖最后由 yunhai_luo 于 2018-4-20 15:16 编辑

我不确定你是怎么用tf.keras 定义模型的,你的代码貌似有些问题。如果你是想用TensorBoard看Keras模型,可以用keras.callbacks.TensorBoard。以Keras教程里的简单模型为例:
  1. from keras.models import Sequential
  2. from keras.layers import Dense
  3. from keras.callbacks import TensorBoard

  4. model = Sequential()
  5. model.add(Dense(32, activation='relu', input_dim=100))
  6. model.add(Dense(1, activation='sigmoid'))
  7. model.compile(optimizer='rmsprop',
  8.               loss='binary_crossentropy',
  9.               metrics=['accuracy'])
  10. tbcb = TensorBoard(log_dir='.')

  11. # Generate dummy data
  12. import numpy as np
  13. data = np.random.random((1000, 100))
  14. labels = np.random.randint(2, size=(1000, 1))

  15. # Train the model, iterating on the data in batches of 32 samples
  16. model.fit(data, labels, epochs=10, batch_size=32, callbacks=[tbcb])
复制代码


数据记录在了当前工作文件夹下("."),用tensorboard --logdir=.即可看到计算图和相关记录。

本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表