今天学习了模型训练部分,感觉稍微比pytorch复杂一点,但也更好地表现了算法的细节:
数据准备
- 使用内置数据集或者自定义数据集GeneratorDataset,使用map函数数据集进行广播处理,然后使用batch函数设置batch_size
定义模型
- 使用SequentialCell函数对网络层进行打包,后面的construct相当于forward函数
定义超参数、损失函数和优化器
- epochs、lr、loss_fn=nn.CrossEntropyLoss、optimizer=nn.SGD(model.trainable_params(), learning_rate=lr)
训练与验证:
- 首先定义forward_fn,输入自变量和标签张量,返回损失和预测值
- 使用value_and_grad函数生成梯度计算函数,注意第二个和第三个参数对应不同的求导目标
- 构造一个batch_size数据的训练过程,这里完成网络参数的更新
- 构建一个loop的训练过程
- 构建测试函数
- 开炼!