2017-01-25 2 views
3

Je reçois l'erreur suivante lorsque j'essaie d'utiliser un jeu de données HDF5 avec keras. Il semblerait que Sequential.fit(), en faisant une tranche de données de validation, rencontre qu'une clé de la tranche n'a pas l'attribut 'stop'. Je ne sais pas s'il s'agit d'un problème de formatage de mon jeu de données HDF5 ou d'autre chose. Toute aide serait appréciée.Erreur lors de la tentative d'utilisation d'un jeu de données HDF5 avec Keras

Traceback (most recent call last):
File "autoencoder.py", line 73, in module

validation_split=0.2)

File "/home/ben/.local/lib/python2.7/site-packages/keras/models.py", line 672, in fit

initial_epoch=initial_epoch)

File "/home/ben/.local/lib/python2.7/site-packages/keras/engine/training.py", line 1143, in fit

x, val_x = (slice_X(x, 0, split_at), slice_X(x, split_at))

File "/home/ben/.local/lib/python2.7/site-packages/keras/engine/training.py", line 301, in slice_X

return [x[start:stop] for x in X]

File "/home/ben/.local/lib/python2.7/site-packages/keras/utils/io_utils.py", line 71, in getitem

if key.stop + self.start <= self.end:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

training_input = HDF5Matrix("../../media/patches/data_rotated.h5", 'training_input_rotated') 
    training_target = HDF5Matrix("../../media/patches/data_rotated.h5", 'training_target_rotated') 

    # Model definition 
    autoencoder = Sequential() 

    autoencoder.add(Convolution2D(32, 3, 3, activation='relu', border_mode='same',input_shape=(64, 64, 3))) 
    autoencoder.add(MaxPooling2D((2, 2), border_mode='same')) 
    autoencoder.add(Convolution2D(64, 3, 3, activation='relu', border_mode='same')) 
    autoencoder.add(MaxPooling2D((2, 2), border_mode='same')) 
    autoencoder.add(Convolution2D(128, 3, 3, activation='relu', border_mode='same')) 
    autoencoder.add(Deconvolution2D(64, 3, 3, activation='relu', border_mode='same',output_shape=(None, 16, 16, 64),subsample=(2, 2))) 
    autoencoder.add(UpSampling2D((2, 2))) 
    autoencoder.add(Deconvolution2D(32, 3, 3, activation='relu', border_mode='same',output_shape=(None, 32, 32, 32),subsample=(2, 2))) 
    autoencoder.add(UpSampling2D((2, 2))) 
    autoencoder.add(Deconvolution2D(3, 3, 3, activation='sigmoid', border_mode='same',output_shape=(None, 64, 64, 3),subsample=(2, 2))) 
    autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy') 
    autoencoder.summary() 

    # Callback configure 
    csv_logger = CSVLogger('../../runs/training_' + start_time + '.log') 
    prog_logger = ProgbarLogger() 
    checkpointer = ModelCheckpoint(filepath='../../runs/model_' + start_time + '.hdf5', verbose=1, save_best_only=False) 

    # Training call 
    history = autoencoder.fit(
        x=training_input, 
        y=training_target, 
        batch_size=256, 
        nb_epoch=1000, 
        verbose=2, 
        callbacks=[csv_logger, prog_logger, checkpointer], 
        validation_split=0.2) 
+1

Essayez + str (start_time) –

+2

Je suis désolé, je ne comprends pas. Où devrais-je ajouter cela? – Ben

+0

Dans la définition de l'enregistreur Csv. –

Répondre

0

Je ne l'ai pas corriger l'erreur, mais je suis autour de lui en utilisant validation_data au lieu de validation_split dans mon appel en forme.