🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

Q&A

解決済

1回答

1411閲覧

keras plot_modelの見方

mochmoch

総合スコア39

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

Python

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

0グッド

0クリップ

投稿2019/12/03 16:33

編集2019/12/05 06:09

わからないこと

140608174385808とタプルのNoneが何を示しているのか分からない。

行ったこと

kerasの学習モデルを可視化しようと

python

1plot_model(model, show_shapes=True, show_layer_names=True)

を実行してみたところ、以下の画像が得られました。

model

各層の値のタプル(1層目のINPUTであれば(None, 160, 120, 1))のうち、160, 120, 1の部分については画像の横幅、縦幅、グレースケールか3色か、というところまでは分かりました。

ですが、最上位の140608174385808とタプルのNoneが何を示しているのか分かりません。

様々なサイトを調べましたが最上位に数字が出ているものは無かったのでmodelの定義の仕方が悪いのでしょうか?

modelの定義は

python

1options = { 2 "filters": 64, 3 "kernel_size": 3, 4 "padding": "same", 5 "activation": "relu", 6 "input_shape": (160, 120, 1) 7 } 8dropout = 0.3 9 10model = Sequential() 11model.add(Conv2D(**options)) 12model.add(Dropout(dropout)) 13# 2回目以降のConv2Dではinput_shapeがいらないのでdelする 14del options["input_shape"] 15model.add(Conv2D(**options)) 16model.add(Dropout(dropout)) 17model.add(Conv2D(**options)) 18model.add(Dropout(dropout)) 19model.add(MaxPooling2D(pool_size=2)) 20 21model.add(Conv2D(**options)) 22model.add(Dropout(dropout)) 23model.add(Conv2D(**options)) 24model.add(Dropout(dropout)) 25model.add(Conv2D(**options)) 26model.add(Dropout(dropout)) 27model.add(MaxPooling2D(pool_size=2)) 28 29model.add(Flatten()) 30model.add(Dense(256, activation="relu")) 31model.add(Dense(256, activation="relu")) 32model.add(Dense(17, activation="softmax")) 33

で行っています。

追記

実際のコードを貼ると400行近くなるので一部だけ書き出しました(実行すると同じような画像が出力されます(数字の値が若干異なりますが...))

python

1import keras 2 3from keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D 4from keras.models import Sequential 5from keras.optimizers import Adam, RMSprop 6from keras.utils import plot_model 7 8if __name__ == "__main__": 9 options = { 10 "filters": 64, 11 "kernel_size": 3, 12 "padding": "same", 13 "activation": "relu", 14 "input_shape": (160, 120, 1) 15 } 16 dropout = 0.3 17 18 model = Sequential() 19 model.add(Conv2D(**options)) 20 model.add(Dropout(dropout)) 21 # 2回目以降のConv2Dではinput_shapeがいらないのでdelする 22 del options["input_shape"] 23 model.add(Conv2D(**options)) 24 model.add(Dropout(dropout)) 25 model.add(Conv2D(**options)) 26 model.add(Dropout(dropout)) 27 model.add(MaxPooling2D(pool_size=2)) 28 29 model.add(Conv2D(**options)) 30 model.add(Dropout(dropout)) 31 model.add(Conv2D(**options)) 32 model.add(Dropout(dropout)) 33 model.add(Conv2D(**options)) 34 model.add(Dropout(dropout)) 35 model.add(MaxPooling2D(pool_size=2)) 36 37 model.add(Flatten()) 38 model.add(Dense(256, activation="relu")) 39 model.add(Dense(256, activation="relu")) 40 model.add(Dense(17, activation="softmax")) 41 42 model.compile(loss="categorical_crossentropy", 43 optimizer=Adam(), 44 metrics=["accuracy"]) 45 46 plot_model(model, 47 show_shapes=True, 48 show_layer_names=True, 49 to_file="test.png")

環境は

OSUbuntu 18.04.3 LTS
tensorflow-gpu1.14.0
Keras2.2.4

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

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

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

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

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

tiitoi

2019/12/05 06:27 編集

追記しましたが、記載いただいたコードで数字が出る現象は確認できませんでした。(tensorflow 付属の keras で確認しました)
mochmoch

2019/12/05 06:41

InputLayerを明示的に指定しましたが数字が出力されました。 しかし、kerasをtensorflow.kerasに変えたところ数字が出力されなくなりました。 これはkerasの仕様・バグと捉えるべきなのでしょうか?
tiitoi

2019/12/05 06:45

自分はそのような表示がでたことはないですし、特定のバージョンでのバグの可能性がありますね。 特に実害がないようであれば、気にしないで使う、気になるようであれば、tensorflow の keras を使用すればよいと思います。
mochmoch

2019/12/05 06:49

kerasのバグの可能性、了解しました。 plot_modelだけtensorflow.kerasで呼び出せば数字は消えるようなのでひとまずはこれで対応しようと思います。 ありがとうございました。
guest

回答1

0

ベストアンサー

None はバッチ次元を表しています。
モデルに入力する際のバッチサイズはいくつでもよいので、任意の整数という意味で None となっています。

140608174385808 は自分が使ったときはそのような表示になったことがないのでわかりません。
コピペすれば動作するコード全体を貼っていただければ、こちらの環境でもそのようになるか確認することはできます。
バージョンは 2.0.0 を使用しています。

python

1import tensorflow as tf 2print(tf.__version__) # 2.0.0

追記

追記していただいたコードで試しましたが、`` という数字がでるという現象は確認できませんでした。
なお、Tensorflow に付属している Keras を使用しています。

python

1from tensorflow.keras.layers import Conv2D, Dense, Dropout, Flatten, MaxPooling2D 2from tensorflow.keras.models import Sequential 3from tensorflow.keras.utils import plot_model 4 5options = { 6 "filters": 64, 7 "kernel_size": 3, 8 "padding": "same", 9 "activation": "relu", 10 "input_shape": (160, 120, 1), 11} 12dropout = 0.3 13 14model = Sequential() 15model.add(Conv2D(**options)) 16model.add(Dropout(dropout)) 17# 2回目以降のConv2Dではinput_shapeがいらないのでdelする 18del options["input_shape"] 19model.add(Conv2D(**options)) 20model.add(Dropout(dropout)) 21model.add(Conv2D(**options)) 22model.add(Dropout(dropout)) 23model.add(MaxPooling2D(pool_size=2)) 24 25model.add(Conv2D(**options)) 26model.add(Dropout(dropout)) 27model.add(Conv2D(**options)) 28model.add(Dropout(dropout)) 29model.add(Conv2D(**options)) 30model.add(Dropout(dropout)) 31model.add(MaxPooling2D(pool_size=2)) 32 33model.add(Flatten()) 34model.add(Dense(256, activation="relu")) 35model.add(Dense(256, activation="relu")) 36model.add(Dense(17, activation="softmax")) 37 38model.compile(loss="categorical_crossentropy", optimizer=Adam(), metrics=["accuracy"]) 39 40plot_model(model, show_shapes=True, show_layer_names=True, to_file="test.png")

イメージ説明

出力された結果

投稿2019/12/05 05:53

編集2019/12/05 06:24
tiitoi

総合スコア21956

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問