深度学习-如何用pytorch提供的工具来构建线性模型-自用笔记3

深度学习-如何用pytorch提供的工具来构建线性模型-自用笔记3

分为四部分

1、 Prepare data set 准备数据集
2、Design model using Class 设计模型
3、 Construct loss and optimizer —using PyTorch API 用 using PyTorch的应用接口API,构造损失函数loss和优化器optimizer
4、Training cycle----forward, backward, update 训练过程

Prepare data set 准备数据集

  1. Prepare dataset
    此次我们用 mini-batch 的形式,因为在我们的例子中只有三条数据集,所以我们把这三条数据集都放入 mini-batch 中, so X and Y are 3 × 1 Tensors

代码

import torch
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

在这里插入图片描述

Design model using Class 设计模型

Design Model 主要任务就是构造计算图来设计模型
通过X,Y的维度可知W和b的维度
在这里插入图片描述

注意:loss最终必须是一个标量,如下图,一开始loss是一个3x1的一个矩阵,但最终要对loss求和必须是一个标量。最后看loss的需求看是否需要求均值。只有loss的标量才可以用调用backward的。
在这里插入图片描述
代码片

class LinearModel(torch.nn.Module): #模型 class LinearModel(自己起的类的名字)类都要继承nn.Module的类,因为nn.Module中的好多方法我们训练模型时可以用到。
	def __init__(self): # __init__(self)这个函数为构造函数,初始化的作用
		super(LinearModel, self).__init__() #LinearModel我定义的名称,后面跟一个self,后面的__init__()是继承父类nn.Module的__init__()的构造资源
		self.linear = torch.nn.Linear(1, 1)#torch.nn.Linear在构造对象包括两个Tensor类型的成员two member Tensors: weight and bias,torch.nn.Linear也是继承nn.Module的,所以linear也可以进行反向传播。(1, 1)代表的意思是第一个参数1代表输入的维度是1、第二个参数1代表输出的维度为1
	def forward(self, x): #forward(self, x)这个函数是进行前馈计算的作用
		y_pred = self.linear(x) 
		return y_pred
model = LinearModel()
#会发现咱们这里面没有写后弦传播的函数,这是因为用nn.Module构造的计算图,会自动的计算出反馈传播的过程

代码解释
首先要定义成一个类class,实际上我们到后面无论是构造多层的感知机还是RNN等其他神经网络模型,我们在构造模型的时候使用的都是的一种类的模板。所以必须掌握这种类class的编写方式,以后咱们可以扩展模型。

self.linear = torch.nn.Linear(1, 1)的任务就是构造下图中的Linear Unit
在这里插入图片描述
torch.nn.Linear的说明
在这里插入图片描述
实例化model = LinearModel()后,调用model(x)即可,就将x传入forward()函数中
在这里插入图片描述

如何用pytorch工具构造loss

代码

criterion = torch.nn.MSELoss(size_average=False)

torch.nn.MSELoss类说明如下
在这里插入图片描述

如何用pytorch工具构造SGD

代码

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

torch.optim.SGD类说明如下:model.parameters()这个代表搜索所有需要更新的权重参数,lr=0.01代表学习率。
在这里插入图片描述

Training cycle

代码

for epoch in range(100): 
	y_pred = model(x_data) 
	loss = criterion(y_pred, y_data)
	print(epoch, loss.item())
	optimizer.zero_grad() #梯度归0
	loss.backward() #反向传播Backward: Autograd
	optimizer.step()#更新Update

结果

代码

# Output weight and bias 
print('w = ', model.linear.weight.item()) 
print('b = ', model.linear.bias.item())
# Test Model 
x_test = torch.Tensor([[4.0]]) 
y_test = model(x_test) 
print('y_pred = ', y_test.data)

如下图结果
在这里插入图片描述

线性模型全部代码

import torch
x_data = torch.Tensor([[1.0], [2.0], [3.0]])
y_data = torch.Tensor([[2.0], [4.0], [6.0]])

class LinearModel(torch.nn.Module): 
	def __init__(self): 
		super(LinearModel, self).__init__() 
		self.linear = torch.nn.Linear(1, 1)
	def forward(self, x): 
		y_pred = self.linear(x)
		return y_pred 
model = LinearModel()

criterion = torch.nn.MSELoss(size_average=False) 
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

for epoch in range(1000):
	y_pred = model(x_data) l
	oss = criterion(y_pred, y_data) 
	print(epoch, loss.item())
	optimizer.zero_grad() 
	loss.backward() 
	optimizer.step()

print('w = ', model.linear.weight.item()) 
print('b = ', model.linear.bias.item())

x_test = torch.Tensor([[4.0]]) 
y_test = model(x_test)
 print('y_pred = ', y_test.data)

如图:

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值