1

画像入力 (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])

ただし、出力と入力の長さを同じにする方法がわかりません。

4

1 に答える 1

0

@Djib2011 に感謝します。ドキュメントで辞書に渡す例を調べたところ、すべての例で を使用し、 を使用しmodel.fit()ていないことに気付きましたmodel.fit_generator()

そのため、調査を行ったところ、単一の入力と複数の出力を持つ ImageDataGenerator にまだバグ(2016 年からオープン!)があることがわかりました。悲しい話。

したがって、解決策は のmodel.fit()代わりに使用することですmodel.fit_generator()

于 2019-06-24T06:50:07.390 に答える