【发布时间】:2016-12-06 10:29:02
【问题描述】:
我对 Google 和 Tensorflow 发布的新模型(即wide_n_deep learning)感到兴奋。所以我试图通过运行the tutorial example 来玩它。
作为机器学习中的一个常见技巧,当整个训练数据集很大时,批量学习很重要。所以我尝试修改提供的wide_n_deep学习教程示例来获得batch learning,如下:
index_in_epoch = 0
num_examples = df_train.shape[0]
for i in xrange(FLAGS.train_steps):
startTime = datetime.now()
print("start step %i" %i)
start = index_in_epoch
index_in_epoch += batch_size
if index_in_epoch > num_examples:
if start < num_examples:
m.fit(input_fn=lambda: input_fn(df_train[start:num_examples], steps=1)
df_train.reindex(np.random.permutation(df_train.index)
start = 0
index_in_epoch = batch_size
if i%5 == 1:
results = m.evaluate(input_fn=lambda: input_fn(df_test), steps = 1)
for key in sorted(results):
print("%s: %s %(key, results[key]))
end = index_in_epoch
m.fit(input_fn=lambda: input_fn(df_train[start:end], steps=1)
简单来说,我逐批迭代整个训练数据集,对于每一批,我调用“fit”函数重新训练模型。
这种幼稚策略的问题是处理时间太慢(例如,我们想迭代一个 400 万条记录的数据集 100 次,批量大小为 100k,训练和评估时间会大约 1 周)。所以我真的怀疑我是否以正确的方式使用批量学习。
如果有任何人才可以分享您在使用 wide_n_deep 学习模型时处理批量学习的经验,我将不胜感激。
【问题讨论】:
-
那些训练时间并不少见。 Imagenet 大约需要 2 周时间。