我正在使用约5,000,000行的训练集训练Keras神经网络模型。我一次只读取该文件的几行内容,以使用类似于以下内容的代码进行训练:
n_lines = 5000000
skiprows = np.delete(np.arange(1, n_lines), np.arange(first_line, first_line+batch_size))
X = pd.read_csv('training.csv', skiprows=skiprows)
在X
上执行了一些转换,然后使用model.train_on_batch(X, y)
将其传递给模型。
我认为这是目前我训练过程中的瓶颈,所以我想知道是否有更有效的方法来实现这一目标。
我定时检查它的差异(training_data.csv
有50,000行):
pd.read_csv('training_data.csv') # 0.86 seconds
n_batches = 1000
for i in range(n_batches):
skiprows = np.delete(np.arange(1, 50000), np.arange(i*50, (1+i)*50))
pd.read_csv('training_data.csv', skiprows=skiprows)
# 152.23 seconds to iterate through all 1000 batches
答案 0 :(得分:1)
我相信我找到了一种可以使用chunksize
的{{1}}参数的方法。
pd.read_csv
这将在大约3.86秒内读取1,000个大小为50的批次,并允许我使用for batch in pd.read_csv('training_data.csv', chunksize=50):
# transform/reshape batch
#model.train_on_batch(batch, y)
next
方法。我仍然需要找到一种更好的方法来读取train_on_batch
数据,但是我想我可能会考虑将y
和X
都存储在单个csv中并使用y
。