Я нашел решение этой проблемы с помощью этой статьи . То, что я нашел действительно удобным, это сделать два генератора. Один для функций, или X, и один для меток, или y.
def generate_X():
while True:
with open("/mypath/myData.csv") as f:
for line in f:
x= line.rstrip('\n').split(",")
x= np.asarray(x)
x=x[1:]
x= x.reshape(1,1,12)
yield x
def generate_y():
while True:
for i in range(len(y_train)):
y= y_train[i]
yield y
А потом я go вперед и использую эти два генератора в качестве входных данных для моего третьего генератора, который будет составлять партии желаемый размер для fit_generator ()
def batch_generator(batch_size, gen_x,gen_y):
batch_features = np.zeros((batch_size,1, 12))
batch_labels = np.zeros((batch_size,9))
while True:
for i in range(batch_size):
batch_features[i] = next(gen_x)
batch_labels[i] = next(gen_y)
yield batch_features, batch_labels
И последнее, но не менее важное: теперь я могу использовать batch_generator при обучении моей модели
model.fit_generator(batch_generator(128, generate_X(), generate_y()),
steps_per_epoch=(len(y_train)/128), epochs=2, verbose=1)