参数: iterator – 训练数据集的数据集迭代器。它也可以是一个将字符串映射到迭代器的字典。如果这只是一个迭代器,则该迭代器以名称“main”注册。
但实际上在chainer的代码中,我发现
def update_core(self):
batch = self._iterators['main'].next()
这意味着它只使用名为“main”的迭代器字典?
参数: iterator – 训练数据集的数据集迭代器。它也可以是一个将字符串映射到迭代器的字典。如果这只是一个迭代器,则该迭代器以名称“main”注册。
但实际上在chainer的代码中,我发现
def update_core(self):
batch = self._iterators['main'].next()
这意味着它只使用名为“main”的迭代器字典?
是的,默认情况下StandardUpdater
仅使用“主”迭代器。
我认为多重迭代器的功能只有在您定义自己的Updater
子类时才有用StandardUpdater
。
例如:
import chainer
from chainer import training
class MyUpdater(training.updaters.StandardUpdater):
# override `update_core`
def update_core(self):
# You can use several iterators here!
batch0 = self.get_iterator('0').next()
batch1 = self.get_iterator('1').next()
# do what ever you want with `batch0` and `batch1` etc.
...
...
train_iter0 = chainer.iterators.SerialIterator(train0, args.batchsize)
train_iter1 = chainer.iterators.SerialIterator(train1, args.batchsize)
# You can pass several iterators in dict format to your own Updater class.
updater = MyUpdater(
{'0': train_iter0, '1': train_iter1}, optimizer, device=args.gpu)
请注意,我尚未测试上述代码是否有效。
作为其他参考,DCGAN 示例代码显示了另一个覆盖update_core
定义您自己的更新方案的示例(但它也没有使用多个迭代器)。
https://github.com/chainer/chainer/blob/master/examples/dcgan/updater.py#L30