Вы можете сделать что-то вроде этого
используйте функцию генератора, посмотрите по этой ссылке fit_generator ищите метод fit_generator.
def data_generater(batch_size):
print("reading data")
training_file = 'data_location', 'r')
# assuming data is in json format so feels free to change accordingly
training_set = json.loads(training_file.read())
training_file.close()
batch_i = 0 # Counter inside the current batch vector
batch_x = [] # The current batch's x data
batch_y = [] # The current batch's y data
while True:
for obj in training_set:
batch_x.append(your input sequences one by one)
if obj['val'] == True:
batch_y.append([1])
elif obj['val'] == False:
batch_y.append([0])
batch_i += 1
if batch_i == batch_size:
# Ready to yield the batch
# pad input to max length in the batch
batch_x = pad_txt_data(batch_x)
yield batch_x, np.array(batch_y)
batch_x = []
batch_y = []
batch_i = 0
def pad_txt_data(arr):
# expecting arr to be in the shape of (10, m, 6)
paded_arr = []
prefered_len = len(max(arr, key=len))
# Now pad all your sequences to preferred length in the batch(arr)
return np.array(paded_arr)
и в модели
model = keras.Sequential()
model.add(keras.layers.Masking(mask_value=0., input_shape=(None,6)))
model.add(keras.layers.LSTM(32))
model.add(keras.layers.Dense(1, activation="softmax"))
model.compile(optimizer="Adam", loss='categorical_crossentropy', metrics=['categorical_accuracy'])
model.fit_generator(data_generater(10), steps_per_epoch=5, epochs=10)
Batch_size, steps_per_epoch, эпоха может быть разной.
Вообще
steps_per_epoch = (number of sequences/batch_size)
Примечание. Форма, в которой читается ваше описание, является задачей двоичной классификации, а не проблемой последовательности или последовательности. Хорошим примером последовательности для последовательности является языковой перевод. Просто погуглите вокруг, и вы поймете, что я имею в виду.
И если вы действительно хотите увидеть разницу во времени обучения, я предлагаю использовать графический процессор, если он доступен, и CuDNNLSTM .