kumitatepazuru's blog

中学生のメモブログ。みんなの役に立ちたい。

tensorflowjsで謎のエラー

f:id:kumitatepazuru:20200805202307p:plain
てんそるふろー
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.com

見てみると、自分のプログラムと共通点が一つ。

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 シミュレーションリーグのチームでは参加者募集中です!活動の見学、活動に参加したい方、ご連絡お待ちしております!

詳しくはこちら

kumitatepazuru.github.io