pydot.Dot
オブジェクトを create(prog="dot", format="png")
で png 形式に変換して、IPython.display.Image()
を使えば、はみ出さないで表示できました。
python
1from IPython.display import Image
2from tensorflow.keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D
3from tensorflow.keras.models import Sequential
4from tensorflow.python.keras.utils.vis_utils import model_to_dot
5
6
7model = Sequential()
8model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(28, 28, 1)))
9model.add(Conv2D(64, (3, 3), activation="relu"))
10model.add(MaxPooling2D(pool_size=(2, 2)))
11model.add(Dropout(0.25))
12model.add(Flatten())
13model.add(Dense(128, activation="relu"))
14model.add(Dropout(0.5))
15model.add(Dense(10, activation="softmax"))
16
17G = model_to_dot(model, show_shapes=True)
18Image(G.create(prog="dot", format="png"))
追記
TensorFlow 1.14.0 だと SVG でも正しい寸法で表示されましたが、最新の TensorFlow 2.2.0 だとローカルの Jupyter Notebook でも質問の画像のようになりました。
なので、TensorFlow のバグじゃないですかね?
SVG の中身比較したら、出力される SVG の中身が 1.14.0 と 2.2.0 で違っていました
追記
SVG の差分とると、2.2.0 では Graph の属性として 1.14.0 にはなかった dpi が設定されていました。
pydot オブジェクトを作成している model_to_dot()
を見てみたら、dpi=96
という引数があったので、これを None にしたら正しい寸法で表示されました。
python
1def model_to_dot(model,
2 show_shapes=False,
3 show_layer_names=True,
4 rankdir='TB',
5 expand_nested=False,
6 dpi=96,
7 subgraph=False)
python
1from IPython.display import Image, SVG
2from tensorflow.keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D
3from tensorflow.keras.models import Sequential
4from tensorflow.python.keras.utils.vis_utils import model_to_dot
5
6
7model = Sequential()
8model.add(Conv2D(32, kernel_size=(3, 3), activation="relu", input_shape=(28, 28, 1)))
9G = model_to_dot(model, show_shapes=True, dpi=None) ## 変更箇所
10svg = G.create(prog="dot", format="svg")
11
12SVG(svg)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/08 16:58
2020/05/08 17:09
2020/05/08 17:15