前提・実現したいこと
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ではレイヤーラッパーはうまく使えないのでしょうか。
それとも、エラーの行の引数を工夫すれば問題ないエラーなのでしょうか。
よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/19 11:17
2019/04/19 11:54
2019/04/24 13:58