()
| 55 | |
| 56 | |
| 57 | def train_resnet(): |
| 58 | fleet.init(is_collective=True) |
| 59 | |
| 60 | resnet = ResNet(BottleneckBlock, 18, num_classes=class_dim) |
| 61 | optimizer = optimizer_setting(parameter_list=resnet.parameters()) |
| 62 | optimizer = fleet.distributed_optimizer(optimizer) |
| 63 | resnet = fleet.distributed_model(resnet) |
| 64 | |
| 65 | dataset = RandomDataset(batch_num * batch_size) |
| 66 | train_loader = DataLoader( |
| 67 | dataset, |
| 68 | batch_size=batch_size, |
| 69 | shuffle=True, |
| 70 | drop_last=True, |
| 71 | num_workers=2, |
| 72 | ) |
| 73 | |
| 74 | print("Distributed training start...") |
| 75 | for eop in range(epoch): |
| 76 | resnet.train() |
| 77 | |
| 78 | for batch_id, data in enumerate(train_loader()): |
| 79 | img, label = data |
| 80 | label.stop_gradient = True |
| 81 | |
| 82 | out = resnet(img) |
| 83 | loss = paddle.nn.functional.cross_entropy(input=out, label=label) |
| 84 | avg_loss = paddle.mean(x=loss) |
| 85 | acc_top1 = paddle.metric.accuracy(input=out, label=label, k=1) |
| 86 | acc_top5 = paddle.metric.accuracy(input=out, label=label, k=5) |
| 87 | |
| 88 | avg_loss.backward() |
| 89 | optimizer.step() |
| 90 | resnet.clear_gradients() |
| 91 | |
| 92 | print( |
| 93 | f"[Epoch {eop}, batch {batch_id}] loss: {avg_loss:.5f}, acc1: {acc_top1:.5f}, acc5: {acc_top5:.5f}" |
| 94 | ) |
| 95 | |
| 96 | print("Distributed training completed") |
| 97 | |
| 98 | |
| 99 | if __name__ == '__main__': |
no test coverage detected