Я пытаюсь построить генератор данных для .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