tensorflowjsで謎のエラー
tensorflow(js)が嫌いになった日でした。
環境
tensorflowアップデートしました。
OS: ubuntu 20.04LTS
CPU: Intel core i7
GPU: GTX 1050Ti
python: 3.6.4
tensorflow: 2.3.0
keras: tensorflow内蔵
どーでもいい情報入っているかもしれんが定型文だからしょうがない()
どんなエラー?
こんなえらー。
Error: Unknown layer: Functional. This may be due to one of the following reasons:
直訳すると、
こんなレイヤー知らないねん。(Functional)次のやつが原因かもよー。(google翻訳自分的解釈)
と言われても次のやつがエラーの詳細。(PCがハングってログ残ってませんテヘペロ)
原因は?
調べてみると、次のサイトが引っかかる。
見てみると、自分のプログラムと共通点が一つ。
stackoverflowのプログラム。
inputs = keras.Input(shape=(10,)) dense = layers.Dense(20, activation="relu") x = dense(inputs) x = layers.Dense(20, activation="relu")(x) outputs = layers.Dense(10)(x)
自分の。
inputs = Input(shape=(28, 28, 1)) x = Conv2D(64, (3, 3), padding="SAME", activation="relu")(inputs) x = Conv2D(64, (3, 3), padding="SAME", activation="relu")(x) x = Dropout(0.25)(x) x = MaxPooling2D()(x) x = Conv2D(128, (3, 3), padding="SAME", activation="relu")(x) x = Conv2D(128, (3, 3), padding="SAME", activation="relu")(x) x = Dropout(0.25)(x) x = MaxPooling2D()(x) x = Conv2D(256, (3, 3), padding="SAME", activation="relu")(x) x = Conv2D(256, (3, 3), padding="SAME", activation="relu")(x) x = GlobalAveragePooling2D()(x) x = Dense(1024, activation="relu")(x) x = Dropout(0.25)(x) y = Dense(62, activation="softmax")(x) model = Model(inputs, y)
そう。
Functional API使ってるやないかい。
なんと、tfjsはFunctional APIを対応しておらず、Sequencial APIに変えなくては読み込んだ時にエラーを吐く(さっきのエラー)。Functionalとはそういうことだったか。
どうしたの?
あまり難しいmodelではなかったのでSequencialに手書きで変換(間違ってるかもガクガクブルブル)。 できなかった場合は...ご愁傷さまです。
model = Sequential() model.add(Conv2D(64, (3, 3), padding="SAME", activation="relu", input_shape=(28, 28, 1))) model.add(Conv2D(64, (3, 3), padding="SAME", activation="relu")) model.add(Dropout(0.25)) model.add(MaxPooling2D()) model.add(Conv2D(128, (3, 3), padding="SAME", activation="relu")) model.add(Conv2D(128, (3, 3), padding="SAME", activation="relu")) model.add(Dropout(0.25)) model.add(MaxPooling2D()) model.add(Conv2D(256, (3, 3), padding="SAME", activation="relu")) model.add(Conv2D(256, (3, 3), padding="SAME", activation="relu")) model.add(GlobalAveragePooling2D()) model.add(Dense(1024, activation="relu")) model.add(Dropout(0.25)) model.add(Dense(62, activation="softmax"))
最後に
熱出て昼夜逆転しました。ううー。
個人的な質問等はこちらまで。
https://forms.gle/V6NRhoTooFw15hJdA
また、自分が参加しているRobocup soccer シミュレーションリーグのチームでは参加者募集中です!活動の見学、活動に参加したい方、ご連絡お待ちしております!
詳しくはこちら