4

現在、畳み込みネットワークで正常に動作するジェネレーターを使用しています。ただし、オートエンコーダーのフィッティングに同じジェネレーターを使用すると、次のエラーが発生します。

**Exception: output of generator should be a tuple (x, y, sample_weight) or (x, y). Found: [[[[ 0.86666673  0.86666673  0.86666673 ...,  0.62352943  0.627451
     0.63137257]
   [ 0.86666673  0.86666673  0.86666673 ...,  0.63137257  0.627451
     0.627451  ]
   [ 0.86666673  0.86666673  0.86666673 ...,  0.63137257  0.627451
     0.62352943]
   ...,**

私のコードは次のとおりです

from keras.layers import Input, Dense, Convolution2D, MaxPooling2D,       
from keras.models import Model,Sequential
from keras.preprocessing.image import ImageDataGenerator 
import numpy as np
import os
import h5py


img_width=140 
img_height=140
train_data_dir=r'SitePhotos\train'
valid_data_dir=r'SitePhotos\validation'
input_img = Input(batch_shape=(32,3, img_width, img_width))

x = Convolution2D(16, 3, 3, activation='relu', border_mode='same')(input_img)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = MaxPooling2D((2, 2), border_mode='same')(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
encoded = MaxPooling2D((2, 2), border_mode='same')(x)

# at this point the representation is (8, 4, 4) i.e. 128-dimensional

x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(8, 3, 3, activation='relu', border_mode='same')(x)
x = UpSampling2D((2, 2))(x)
x = Convolution2D(16, 3, 3, activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Convolution2D(1, 3, 3, activation='sigmoid', border_mode='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='mse')



valid_datagen = ImageDataGenerator(rescale=1./255)
train_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_width, img_height),
        batch_size=32,
        class_mode=None,
        shuffle=True)


valid_generator = valid_datagen.flow_from_directory(
        valid_data_dir,
        target_size=(img_width, img_height),
        batch_size=32,
        class_mode=None,
        shuffle=True)

autoencoder.fit_generator(train_generator,
                nb_epoch=50,                
                validation_data=valid_generator,
                samples_per_epoch=113,
                nb_val_samples=32
                )

ジェネレーターに加えた唯一の変更は、クラス モードを [なし] に設定することでした。クラスモードを「バイナリ」のままにしておくことも役に立ちませんでした。fit_generator はタプルを想定しているので、(train_generator, train_generator) と (valid_generator,valid_generator) を引数として fit_generator に渡してみました。

その場合、次の例外が発生しました

モデル入力をチェックする際のエラー: データは Numpy 配列、または Numpy 配列のリスト/dict である必要があります。見つかった:

しかし、何も機能していないようです。何が欠けているのかわからない。ケラスの初心者であるため、どんな助けでも大歓迎です。

ありがとうSK

4

2 に答える 2