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

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

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

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

Q&A

解決済

1回答

2209閲覧

kerasでFunctional APIによってレイヤーラッパーを実装したい

keraker

総合スコア46

Keras

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

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

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

0グッド

0クリップ

投稿2019/04/16 04:39

編集2019/04/16 13:36

前提・実現したいこと

kerasでTimeDistributedをAveragePooling2Dにつかおうとしています。
python keras google colaboratory tpu,flow_from_directoryを使用
エラーが発生している行を消去すると動作するのは確認済みです。

発生している問題・エラーメッセージ

ValueError: Shape must be rank 4 but is rank 3 for 'time_distributed/AvgPool' (op: 'AvgPool') with input shapes: [?,24,256].

該当のソースコード

python

1 2from tensorflow.keras.layers import Input, Conv2D, BatchNormalization, Activation, AveragePooling2D, Dense, Dropout, Flatten 3 4def basic_cnn_module(input, chs): 5 x = Conv2D(chs, 3, padding="same")(input) 6 x = BatchNormalization()(x) 7 x = Activation("relu")(x) 8 return x 9from tensorflow.keras.layers import TimeDistributed 10 11def create_cnn_model(): 12 input = Input((96,96,3)) 13 x = basic_cnn_module(input, 96) 14 x = AveragePooling2D(2)(x) 15 x = basic_cnn_module(x, 256) 16 x = AveragePooling2D(2)(x) 17 x = basic_cnn_module(x, 384) 18 x = basic_cnn_module(x, 384) 19 x = basic_cnn_module(x, 256) 20 x = TimeDistributed(AveragePooling2D(2))(x)#エラー 21 x = Flatten()(x) 22 x = Dense(5, activation="softmax")(x) 23 return Model(input, x)

試したこと

エラーメッセージで検索してみましたが、関連のありそうなものは以下ぐらいでした。
https://stackoverflow.com/questions/55012775/how-do-i-solve-this-error-shape-must-be-rank-4-but-is-rank-3
これを参考にLambdaを用いてみましたが結果は同じでした。

ネットにはSequential ModelによるTimeDistributedの使い方がほとんどのようでしたが、Functional APIではレイヤーラッパーはうまく使えないのでしょうか。

それとも、エラーの行の引数を工夫すれば問題ないエラーなのでしょうか。

よろしくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

問題は、TimeDistributedをFunctional APIにて使っていることではなく、

TimeDistributedをAveragePooling2Dに使う場合に入力データとして
(batch_size、flame、hight、widht、channel)
を入力する必要があるにもかかわらず、
(batch_size、hight、widht、channel)
のデータしか入力されていない事が原因かと思います。

Python

1from tensorflow.keras.models import Model 2from tensorflow.keras.layers import Input, AveragePooling2D, TimeDistributed 3 4input = Input((100,96,96,3)) 5x = TimeDistributed(AveragePooling2D(2))(input) # 問題なし 6model = Model(input, x) 7model.summary() 8 9input = Input((96,96,3)) 10x = TimeDistributed(AveragePooling2D(2))(input) # エラー 11model = Model(input, x) 12model.summary()

投稿2019/04/19 04:54

magichan

総合スコア15898

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

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

keraker

2019/04/19 11:17

ありがとうございます。 モデルサイズの縮小に役立つという記事を見てともかく使ってみようと思っていたのですが、 これは時系列データのようなものに対してではないと使えないのですね。 それともほかにも用途がありますか。
magichan

2019/04/19 11:54

基本的には、時系列・テキスト・音声・動画などに適用するものでしょうね。
keraker

2019/04/24 13:58

重ねて御礼申し上げます。 コメントの返信にはメールは来ないのか、もしくは見逃していました。 テキストにもたしかLSTMが使われていましたね。 再発見でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問