質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2817閲覧

Jupyter NotebookでのKerasモデルの可視化で一部が表示されない

meg_

総合スコア10760

SVG

SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/05/08 15:44

編集2020/05/08 15:45

下記コードをJupyter Notebook(Google Colab)で実行するとkerasモデルの可視化が一部表示されない。(右端が欠ける)

Python

1from IPython.display import SVG 2from tensorflow.python.keras.utils.vis_utils import model_to_dot 3 4SVG(model_to_dot(model, show_shapes=True).create(prog='dot', format='svg'))

イメージ説明

全体を表示させたいです。
原因および対策をご存知でしたら教えてください。

※下記の別の方法でモデルの可視化自体は出来ました。

Python

1import tensorflow 2import IPython 3 4tensorflow.keras.utils.plot_model(model, to_file='model.png', show_shapes=True) 5IPython.display.Image('model.png')

イメージ説明

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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:31

編集2020/05/08 17:09
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2020/05/08 16:58

ご回答いただきありがとうございます。 同様の方法にて回避は出来ておりますが(質問にも記述しております)、SVGを使った方法も一般的なようなので正常に表示できるようになればと思い質問させていただきました。 Google Clabの問題かもとの指摘を受け、ローカルマシンでも試したところ上手くいきました。tensorflowのバージョンは1.14でした。 ご指摘のようにtensorflowのバージョンによる違い(問題?)のようですね。
tiitoi

2020/05/08 17:09

とりあえず、2.2.0 でも model_to_dot(model, show_shapes=True, dpi=None) とすれば、SVG でも表示できました
meg_

2020/05/08 17:15

dpi=Noneを追加したら正常に表示できました。調べていただきありがとうございます。助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問