#用PyTorch的工具实现我们的线性模型#
用pytorch实现的一个代码框架
#步骤一(准备数据集)#
1.进行小批量计算的时候会进行一个广播机制,所以我们在准备数据集的时候,需要对数据进行向量化,构造的数据集必须是一个矩阵。
#步骤二(构造计算图)#
1.w和b 的维度得根据x、z、y的维度来确定,比如说已经知道x的维度是4*1,z的维度是3*1,那么根据线性代数的知识可以知道w的维度应该是3*4,b的维度应该是3*1才能与x相乘得到z的维度。
2.先通过正向传播进行计算之后再用backward进行反向传播。
3.loss得出的应该是标量,但是如下图,我们一开始计算得出的loss是一个多维的矩阵,在此我们应该做的就是对求出的多维loss进行求和,然后我们可以自己选择是否对其进行求均值。为什么要求loss是一个标量?因为如果loss是一个向量的话,那么我们是无法再进行backward的
4.在pytorch中的模型
(1)要求掌握编写方式,它是后期所学模型的一个基本代码框架。
class LinearModel(torch.nn.Module)://我们所构造的类都要继承nn.Module这个父类
def __init__(self): //构造函数
super(LinearModel, self).__init__()
self.linear = torch.nn.Linear(1,1) //nn.Linear是pytorch里面的一个类,这步是在构造对象,Linear对象包含权重和偏置(w,b),Linear也是继承Module
def forward(self,x): //前馈过程所要执行的计算
y_pred = self.linear(x)
return y_pred
model = LinearModel()
//在用model构造的对象中,会自动给我们计算backward
(2) __init__()和forward()两个函数是这个类中的“基本函数”。nn(newrod network)
(3) Linear类的介绍,一般初始化为(输入列维度,输出列维度,bool型是否要偏置)
(4)forward函数是在覆盖__call__函数,进行实例化,linear(x)实现的是x*w+b,至于是w还是w得转置无所谓。
#步骤三(构造损失函数和优化器)#
critertion传参y和y_head便可以把损失函数求出来。设计图来自于SGD,model.parameters不管模型多复杂都可以找到我们需要计算的参数(比如w),lr是学习率。
#步骤四(训练过程)
注意要把梯度归零,所以要告诉optimizer要把梯度归零。optimizer.step()用来更新。