【发布时间】:2018-07-16 20:38:22
【问题描述】:
我正在使用约 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
【问题讨论】:
-
你能添加更多代码吗?你在用 X 做什么?
-
你确定这是瓶颈吗?深度学习是一个计算成本很高的过程。
-
@VikasNS
X最终传递给 Kerasmodel.train_on_batch调用。 -
@ncfirth 当我将整个数据子集(比如 50,000 行)加载到内存中时,训练相同的模型要快得多。使用此方法生成一批 10 个样本大约需要 12 秒。
-
我很困惑,如果我错了,请纠正我。您对更多数据的培训,因此需要更多时间?如果您面临内存问题,那么您应该自定义生成器来加载数据并使用 model.fit_on_generator()