TFのバックエンドを使用してKerasを画像認識に使用する方法を学習しているので、ここで何が間違っているのかまだ分かりません。Keras ValueError:リストを生成するfit_generator
私は2つのモデルを積み重ねようとしています.1つはVGG16、もう一つは無作為にスタックする方法を学んだだけです。私は5つのクラスの間でイメージを分類したいと思います。
私はfit_generatorを実行するときに問題が最後にあります。有効なタプルを生成する代わりに、それはリストであると思われるものを生成します。多くの人が同様の問題を抱えているのを見たことがありますが、そのケースでは出力はNoneでしたので、解決策が同じかどうかはわかりません。
パラメータ
nb_train_samples = 576
nb_validation_samples = 144
epochs = 30
batch_size = 12
img_width, img_height = 150, 150
ジェネレータ
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=50,
width_shift_range=0.3,
height_shift_range=0.3,
shear_range=0.4,
zoom_range=0.4,
horizontal_flip=True)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None,
shuffle=False)
validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_width, img_height),
batch_size=batch_size,
class_mode=None,
shuffle=False)
マイモデル
input = Input(batch_shape=model.output_shape)
x = Flatten()(input)
x = Dense(256, activation='relu', name="new_block_1")(x)
x = Dropout(0.5)(x)
x = Dense(256, activation='relu', name="new_block_2")(x)
x = Dropout(0.5)(x)
x = Dense(5, activation='softmax', name="new_block_3")(x)
top_model = Model(input,x)
input = Input(shape=(img_width, img_height, 3))
x = model(input)
x = top_model(x)
final_model = Model(input, x)
final_model.compile(optimizer='rmsprop',
loss='categorical_crossentropy', metrics=['accuracy'])
フィットとエラー
final_model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size)
ValueError: output of generator should be a tuple `(x, y, sample_weight)` or `(x, y)`. Found: [[[[ 0.89411771 0.89019614 0.87450987]
[ 0.89411771 0.89019614 0.87450987]
[ 0.89411771 0.89019614 0.87450987]
...,
アップデート1:@ petezurichの先端あたりとしては、「ソフトマックス」から「シグモイド」訓練のための
これはあなたの質問を直接参照しているわけではありませんが、ソフトマックスではなく最後の高密度レイヤにシグモイドがある特定の理由がありますか? – petezurich
理由はありませんが、実際には変更することもできます。私はちょっと試してみたので、気づかずにコピー貼り付けをしていたかもしれません。 – htcoelho
あなたの5つのクラスごとに確率を与えるSoftmaxがあなたのケースでは正しい選択です。シグモイドはバイナリ分類に適しています。私は見る。 – petezurich