通过数据生成器解决大文件无法一次性载入内存训练的问题

通过数据生成器解决大文件无法一次性载入内存训练的问题

from keras.models import Model

def process_line(line):
    tmp = [float(val) for val in line.strip().split(',')]
    x = np.array(tmp[:-1])
    y = np.array(tmp[-1:])
    return x,y

def generate_arrays_from_file(path,batch_size):
    while 1:
        with open(path) as f:
            cnt, X, Y = 0, [], []
            for line in f:
                x, y = process_line(line)
                X.append(x)
                Y.append(y)
                cnt += 1
                if cnt==batch_size:
                    yield (np.array(X), np.array(Y))
                    cnt, X, Y = 0, [], []
model = Model()
model.fit_generator(generate_arrays_from_file('./train.txt',batch_size=32))

说明:

open() 并不会把文件一次性读入内存,他只是返回一个句柄,open()并不知道你要读还是要写。

while 1:是为了能对文件进行多轮读取,如果不加这一句,读完一次文件后就会退出。

keras 中的fit_generator 使用 Python 生成器逐批生成的数据,按批次训练模型。

数据最好先打乱,因为生成器只能顺序读取,或者在生成一批次数据之后也可以进行一次打乱

你可能感兴趣的:(深度学习)