【问题标题】:Tensorflow Wide&Deep tutorial Example with batchTensorFlow Wide&Deep 教程 批处理示例
【发布时间】: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 周时间。

标签: tensorflow deep-learning


【解决方案1】:

每次拟合/评估调用都会创建一个图表和一个会话,然后执行操作。如果你在循环中这样做,它会很慢。 为了使其更快,您需要提供一个input_fn,它将被批量称为张量。 如果您从数据框中读取数据,您可以使用to_feature_columns_and_input_fn 如果您从包含tf.Example 的文件中读取数据,则可以在input_fn 中使用read_batch_examples 之类的内容。

【讨论】:

  • 感谢您的回答!作为 tensorflow 的初学者,在阅读了您的 cmets 之后,我可以理解为什么我处理批处理的方法很慢的原因。如果您可以提供一个更具体的示例来说明如何根据您的建议逐批阅读,那将会更有帮助。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2016-11-26
  • 2018-08-17
  • 2018-08-24
  • 1970-01-01
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-22
相关资源
最近更新 更多