我用 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')
发帖人:舟 3332,时间: 2018-4-20 14:47:25
我不确定你是怎么用 tf.keras 定义模型的,你的代码貌似有些问题。如果你是想用 TensorBoard 看 Keras 模型,可以用 keras.callbacks.TensorBoard。以 Keras 教程里的简单模型为例:
from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import TensorBoard
model = Sequential ()
model.add (Dense (32, activation='relu', input_dim=100))
model.add (Dense (1, activation='sigmoid'))
model.compile (optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
tbcb = TensorBoard (log_dir='.')
# Generate dummy data
import numpy as np
data = np.random.random ((1000, 100))
labels = np.random.randint (2, size=(1000, 1))
# Train the model, iterating on the data in batches of 32 samples
model.fit (data, labels, epochs=10, batch_size=32, callbacks=[tbcb])
数据记录在了当前工作文件夹下("."),用 tensorboard --logdir=.即可看到计算图和相关记录。
yunhai_luo,发表于 2018-4-20 15:15:10
感谢大神指点。
我现在可以在 TensorBoard 里面看到模型了。但是还是不是特别理解为什么 tf.GraphDef ().node
拿到的东西是空的。以及 keras.utils.plot_model (model, to_file='model.png')
会报错
另外我用的是 tf.keras 也就是
import tensorflow.python.keras
舟 3332(提问者),发表于 2018-4-20 19:43:59
我还真不知道 tensorflow 里有 keras 可以这样用,不好意思。你看,我这根本不是大神啊
yunhai_luo,2018-4-21 03:35
tf.GraphDef () 是实例化一个新的 GraphDef 对象,跟你的计算图没有任何关系,自然是空的。如果你想输出所有节点的操作,应该从你当前的计算图入手:
import tensorflow as tf
model = tf.keras.Sequential ()
model.add (tf.keras.layers.LSTM (3, input_shape=(2,1)))
model.add (tf.keras.layers.Dense (1))
for node in tf.get_default_graph ().as_graph_def ().node:
print (node.op)
至于 keras.utils.plot_model (model, to_file=‘model.png’) 报错,你应该把错误内容放上来。我估计你的错误是:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-1-f126cbd05746> in <module>()
9
10 # 报错
---> 11 keras.utils.plot_model (model, to_file='model.png')
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)
147 'LR' creates a horizontal plot.
148 """
--> 149 dot = model_to_dot (model, show_shapes, show_layer_names, rankdir)
150 _, extension = os.path.splitext (to_file)
151 if not extension:
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)
121 for i, node in enumerate (layer._inbound_nodes):
122 node_key = layer.name + '_ib-' + str (i)
--> 123 if node_key in model._container_nodes:
124 for inbound_layer in node.inbound_layers:
125 inbound_layer_id = str (id (inbound_layer))
AttributeError: 'Model' object has no attribute '_container_nodes'
如果是这样,那么这是 bug,Github 上提到过。
yunhai_luo,发表于 2018-4-21 03:32:32
需要指定 tensorboard --logdir=.来确定输出目录,查看 log 和图
neverchange,发表于 2018-7-4 16:04:27