深度网络定义与使用
具体可见:https://zh.d2l.ai/chapter_linear-networks/linear-regression-concise.html
深度学习总体框架包括:
数据准备,定义模型(输入,输出,前向传播),定义损失函数(网络输出与真值的函数关系),定义优化方法(基于已有梯度更新参数的方法),训练(迭代次数,输出loss)
1. 定义网络
class MLP(nn.Module)
init() 是数据准备,定义forward函数中所需要的参数
forwar()函数要跑一遍传播过程
总体包括:
(可选)参数初始化
前向运算
激活函数,或者自己写的任意函数,进行传递
输出
2. 定义损失函数
网络输出与真值之间的损失函数
3. 定义优化方法
梯度可以通过自动求导求得。如何更新参数,要根据优化方法来确定。sgd,adam等
网络是按照batch更新新的,梯度取batchsize的平均进行更新
实例:
num_epochs = 3
for epoch in range(num_epochs):
for X, y in data_iter:
l = loss(net(X) ,y)
trainer.zero_grad()
l.backward()#更新梯度(根据输入纬度和网络定义的纬度判断batchsize并更新梯度)
trainer.step()
l = loss(net(features), labels)
print(f'epoch {epoch + 1}, loss {l:f}')