【问题标题】:Mxnet Gluon custom data iteratorMxnet Gluon 自定义数据迭代器
【发布时间】:2017-11-13 20:02:24
【问题描述】:

我使用mx.io.DataIter 类编写了一个自定义数据迭代器。将此数据迭代器与Gluon 接口一起使用的最简单方法是什么?

我浏览了文档,但找不到简单的方法。我的一个想法是将它用作迭代器并从每个批次中获取数据和标签,如下所示。

for e in range(epochs):
    train_iter.reset()
    for batch_data in train_iter:
        data = nd.concatenate(([d for d in batch_data.data]))
        label = nd.concatenate(([l for l in batch_data.label]))
        with autograd.record():
            output = net(data)
            loss = softmax_cross_entropy(output, label)
        loss.backward()
        trainer.step(batch_size)
        print(nd.mean(loss).asscalar())

但这可能不是最优的,因为我需要每批连接。

  1. 实现这一目标的最佳方法是什么?即是否有系统的
    为胶子编写一个简单的自定义迭代器的方法?

  2. 以上情况如何添加上下文信息?

【问题讨论】:

  • 你知道如何添加上下文信息吗?

标签: mxnet


【解决方案1】:

我认为你的方法有效。基本上你可以从batch_data.datalabelbatch_data.label 获得data 并将它们输入网络。

我不确定您为什么需要连接数据和标签 - 可能与您的网络定义有关。

如果您需要拆分数据并在多个 GPU 上进行训练,您可以使用 gluon.utils.split_and_load 函数来执行此操作。

【讨论】:

  • 谢谢埃里克。我只是希望有一种更简洁的方式来实现批处理数据。没有与胶子兼容的 API 似乎非常奇怪和令人惊讶!
猜你喜欢
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 2015-02-04
  • 2013-02-17
  • 2015-11-19
  • 2013-09-02
  • 2016-06-18
相关资源
最近更新 更多