несколько ошибок в data_generator с файлом hdf5 - PullRequest
0 голосов
/ 04 апреля 2019

Я пытаюсь построить генератор данных для .fit_generator () в керасе, но, несмотря на многочасовую работу, я все еще получаю ошибки.Поскольку я не понимаю, что происходит в .fit_generator (), я понятия не имею, где ошибка и как ее исправить.Заранее спасибо

#import file 

f = h5py.File('filename', 'r')
f.keys()

#trace data
Data_signal = f['data_signal'] # dim = Nx6x600
Label = f['label'] # dim = N

n_train = n_data[0:50] # normally bigger but set to 50 for now
n_test = n_data[50:100] # normally bigger
batch_size = 10
shuffle = True
dim = (1,6,600)
class DataGenerator(keras.utils.Sequence):
    'Generates data for Keras'
    def __init__(self, list_IDs, signal,label, batch_size, dim, n_classes, shuffle):
        'Initialization'
        self.list_IDs = list_IDs
        self.signal = signal
        self.label = label
        self.batch_size = batch_size
        self.dim = dim
        self.n_classes = n_classes
        self.shuffle = shuffle
        self.on_epoch_end()

    def __len__(self):
        'Denotes the number of batches per epoch'
        return int(np.floor(len(self.list_IDs) / self.batch_size))

    def __getitem__(self, idx):
        'Generate one batch of data'
        # Generate indexes of the batch
        batch_idx = self.indices[idx * self.batch_size:(idx + 1) * self.batch_size]
        batch_idx.sort()
        print(batch_idx)

        # Generate data
        X, y = self.__data_generation(batch_idx)

        return X,y

    def on_epoch_end(self):
        'Updates indexes after each epoch'
        self.indices = np.arange(len(self.list_IDs))
        if self.shuffle == True:
            np.random.shuffle(self.indices)
            return self.indices

    def __data_generation(self, batch_idx):
        'Generates data containing batch_size samples' 
        # Initialization
        X = np.empty((self.batch_size, self.dim[1], self.dim[2]))
        y = np.empty((self.batch_size), dtype=int)

        # Generate data
        for i, ID in enumerate(batch_idx):
            # Store sample
            X[i,] = self.signal[ID,:,:]

            # Store class
            y[i] = self.label[ID]

        return X, keras.utils.to_categorical(y, num_classes=self.n_classes)


data_train = DataGenerator(n_train,Data_signal,Label,batch_size,dim,n_class,shuffle)
data_test  = DataGenerator(n_test,Data_signal,Label,batch_size,dim,n_class,shuffle)

np.random.seed(7)

## start model
model = Sequential()
model.add(Conv1D(32,2, input_shape=(6,600), activation='relu'))
model.add(Flatten())
model.add(Dense(8, activation='relu'))
model.add(Dense(4, activation='sigmoid'))

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit_generator(generator=data_train,validation_data=data_test, epochs=15)

Это ошибка, которую я получаю после запуска скрипта:

Using TensorFlow backend.

Epoch 1/15

Traceback (most recent call last):

  File "hoofdscript.py", line 150, in <module>
    model.fit_generator(generator=data_train,validation_data=data_test, epochs=15)

  File "/usr/local/lib/python2.7/dist-packages/keras/legacy/interfaces.py", line 91, in wrapper
    return func(*args, **kwargs)

  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training.py", line 1415, in fit_generator
    initial_epoch=initial_epoch)

  File "/usr/local/lib/python2.7/dist-packages/keras/engine/training_generator.py", line 177, in fit_generator
    generator_output = next(output_generator)

  File "/usr/local/lib/python2.7/dist-packages/keras/utils/data_utils.py", line 584, in get
    six.raise_from(StopIteration(e), e)

  File "/usr/local/lib/python2.7/dist-packages/six.py", line 737, in raise_from
    raise value

StopIteration: index 5 is out of bounds for axis 1 with size 4
...