Как использовать fit_generator и steps_per_epoch? (Keras) - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь создать генератор многоэтапного прогнозирования временных рядов.

Идея такова: у меня есть 5 папок, и в каждой из них есть разное количество файлов. Я беру первые 3 файла как x_train, а следующие 3 как y_train. Поэтому я беру первую папку, читаю все файлы и передаю fit_generator, например:

x_train = [[[file1, file2, file3], [file7, ..., file9], [...]]]

y_train = [[[file4, file5, file6], [file10, ..., file12], [...]]]

Затем я рассматриваю следующую папку и делаю то же самое, что и раньше, пока не закончу sh все папки, чтобы я мог перейти к следующей эпохе. Простой код такой:

folders=['folder1', 'folder2', 'folder3', 'folder3', 'folder4', 'folder5']
step=3 #the step prediction
point=10 #the number of points in one file (equal for each file)
count=0 

def gen(count):
    while count<len(folders):

        #read all files in folder=folders[count]
        dim=len(all_files_in_folder)/(2*step)

        #i insert the files in numpy array  
        x=np.random.randint(20, size=(dim, step, points))
        y=np.random.randint(20, size=(dim, step, points))

        yield (x,y)

        count+=1
        if count>=len(folders):
            #if i read all folders i can pass to the next epoch, so i reset the counter
            count=0


model=Sequential()


model.add(Dense(points, input_shape=(step, points)))
model.add(ELU(0.3))
model.add(Dense(points))
model.add(ELU(0.3))

model.summary()
model.compile(loss='mse', optimizer='adam')
history=model.fit_generator(generator=gen(count), steps_per_epoch=len(folders), epochs=2, shuffle=True)

Я понимаю, что это не правильно, как я могу исправить? Спасибо за ваш ответ:)

...