文章目录 线性回归的从零开始实现 1. 构造人造数据集 2. data_iter每次读取一个小批量 3. 定义 初始化模型参数 4. 定义模型 5. 定义损失函数 6. 定义优化算法 7. 训练过程
线性回归的从零开始实现
导入需要使用的包 数据流水线、模型、损失函数、小批量随机梯度下降器
1. 构造人造数据集
y=xw+b+c feature,label=synthetic_data(w,b,num) detach().numpy()有些版本tensor需要线detach出来才能转换为numpy
2. data_iter每次读取一个小批量
data_iter(batch_size,features,labels) num 打乱下标索引 随机顺序访问样本 每次跳batch_size的大小,如果超出取最后一个 yeid每次返回一个x,y
3. 定义 初始化模型参数
w正态分布,resuires_gard=True b
4. 定义模型
linreg(x,w,b) 线性回归模型 return torch.matual(x,w)+b
5. 定义损失函数
def squared_loss ( y_hat, y) return ( y_hat- y. reshape( y_hat. shape) ) ** 2 / 2
6. 定义优化算法
def sgd ( params, lr, batch_size) with torch. no_grad( ) : for param in params: param-= lr* param. grad/ batch_sizeparam. grad. zero_( )
7. 训练过程
lr= 0.03
num_epochs= 3
net= lireg
loss= squared_lossfor epoch in range ( num_epoch) for x, y in data_iter( batch_size, features, labels) : l= loss( net( x, w, b) , y) l. sum ( ) . backward( ) sgd( [ w, b] , lr, batch_size) with torch. no_gard( ) : train_l= loss( net( features, w, b) , labels) printf( f'epoch { epoch+ 1 } ,loss { float ( train_l. mean( ) ) : f } ' )
比较真实参数和通过训练学到的参数来评估训练的成功成功程度