OneshotTrainer.rst 1.59 KB
Newer Older
kvartet's avatar
kvartet committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
One-shot NAS
============

在阅读本教程之前,我们强烈建议您先阅读有关如何 `定义一个模型空间 <./QuickStart.rst#id1>`__ 的教程。

使用 One-shot Trainer 进行模型搜素
--------------------------------------------------------------------

对于定义的模型空间,用户可以通过两种方式来探索。 一个是使用探索策略和单架构评估器,正如 `在这里 <./QuickStart.rst#id4>`__ 所演示的那样。 另一种是使用 one-shot trainer,与第一种相比,它消耗的计算资源要少得多。 在本教程中,我们专注于 One-Shot 方法。 One-Shot 方法的原理是将模型空间中的所有模型合并成一个大模型(通常称为超级模型或超级图)。 通过训练和评估整个超级模型,来实现搜索、训练和测试的任务。

我们在此列出已支持的 One-Shot Trainer:

* DARTS trainer
* ENAS trainer
* ProxylessNAS trainer
* Single-path (random) trainer

参见 `API 参考 <./ApiReference.rst>`__ 获得详细用法。 在这里,我们展示了一个例子来手动使用 DARTS Trainer。

.. code-block:: python

  from nni.retiarii.oneshot.pytorch import DartsTrainer
  trainer = DartsTrainer(
      model=model,
      loss=criterion,
      metrics=lambda output, target: accuracy(output, target, topk=(1,)),
      optimizer=optim,
      num_epochs=args.epochs,
      dataset=dataset_train,
      batch_size=args.batch_size,
      log_frequency=args.log_frequency,
      unrolled=args.unrolled
  )
  trainer.fit()
  final_architecture = trainer.export()

**导出架构的格式**:未来将会支持。