我正在致力于在大约 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
最佳答案
我相信我找到了一种可以使用 pd.read_csv
的 chunksize
参数的方法。
for batch in pd.read_csv('training_data.csv', chunksize=50):
# transform/reshape batch
#model.train_on_batch(batch, y)
next
这会在大约 3.86 秒内读取 1,000 个大小为 50 的批处理,并允许我使用 train_on_batch
方法。我仍然需要找到一种更好的方法来读取 y
数据,但我想我可能会考虑将 X
和 y
存储在一个单独的文件中csv 并使用 chunksize
。
关于python - 如何高效读取 CSV 的特定行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51369763/