# set visualizer

visualizer = Visualizer(opt, dataLoader.dataset).reset()

steps = 0
for epoch in range(opt.epochStart, opt.nEpochStart + opt.nEpochDecay + 1):
    for i, data in enumerate(dataLoader):
        steps += 1

        model.set_input(data)
        model.optimize_parameters()

        visualizer.print_process('Train', epoch, loss=model.current_losses())

        if steps % opt.displayInterval == 0:  # default: 5
            visualizer.displayImage(model.current_images(), steps)
            visualizer.displayLoss(model.current_losses(), steps)

        if steps % opt.saveLatestInterval == 0:  # default: 5000
            print('saving the latest model (epoch %d, total_steps %d)\n' %
                  (epoch, steps))
            model.save_networks('latest')  # latest model will override

    if epoch % opt.saveEpochInterval == 0:  # default: 5
        print('saving the model at the end of epoch %d, iters %d\n' %
              (epoch, steps))
        model.save_networks('latest')
        model.save_networks(epoch)

    visualizer.print('Train', epoch, miou=model.current_mious())
    # important