画像入力 (130,130,1) と、それぞれ (10,1) ベクトルを含む 3 つの出力 (ソフトマックスが個別に適用される) を持つモデルをセットアップしています。
(J. Goodfellow、Yaroslav Bulatov、Julian Ibarz、Sacha Arnoud、Vinay D. Shet に触発されました。深い畳み込みニューラル ネットワークを使用したストリート ビュー画像からの複数桁の数字認識。CoRR、abs/1312.6082、2013。URL http:// arxiv.org/abs/1312.6082、残念ながら彼らはネットワークを公開していません)。
input = keras.layers.Input(shape=(130,130, 1)
l0 = keras.layers.Conv2D(32, (5, 5), padding="same")(input)
[conv-blocks etc]
l12 = keras.layers.Flatten()(l11)
l13 = keras.layers.Dense(4096, activation="relu")(l12)
l14 = keras.layers.Dense(4096, activation="relu")(l13)
output1 = keras.layers.Dense(10, activation="softmax")(l14)
output2 = keras.layers.Dense(10, activation="softmax")(l14)
output3 = keras.layers.Dense(10, activation="softmax")(l14)
model = keras.models.Model(inputs=input, outputs=[output1, output2, output3])
model.compile(loss=['categorical_crossentropy', 'categorical_crossentropy',
'categorical_crossentropy'],
loss_weights=[1., 1., 1.],
optimizer=optimizer,
metrics=['accuracy'])
train_generator = train_datagen.flow(x_train,
[[y_train[:, 0, :], y_train[:, 1, :], y_train[:, 2, :]],
batch_size=batch_size)
しかし、その後、次のようになります: ValueError: x
(images tensor) とy
(labels) は同じ長さでなければなりません。見つかった: x.shape = (1000, 130, 130, 1), y.shape = (3, 1000, 10)
しかし、次のように変更すると:
[same as before]
train_generator = train_datagen.flow(x_train,
y_train,
batch_size=batch_size)
それから私は得ています: ValueError: モデル ターゲットをチェックするときのエラー: モデルに渡す Numpy 配列のリストは、モデルが期待するサイズではありません。3 つの配列が表示されることが予想されます
- 次元 (x_train) = (1000, 130, 130, 1)
- 各単一画像は(130、130、1)であり、1000個の画像があります
- 次元 (y_train) = (1000, 3, 10)
ドキュメントには、そのようにする必要があると記載されています。
model = Model(inputs=[main_input, auxiliary_input], outputs=
[main_output, auxiliary_output])
ただし、出力と入力の長さを同じにする方法がわかりません。