PyTorch学习(四)--用PyTorch实现线性回归

教程视频:https://www.bilibili.com/video/BV1tE411s7QT

废话不多说,代码如下:

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)#构造对象,并说明输入输出的维数,第三个参数默认为true,表示用到b
    def forward(self, x):
        y_pred = self.linear(x)#可调用对象,计算y=wx+b
        return  y_pred

model = LinearModel()#实例化模型

criterion = torch.nn.MSELoss(size_average=False)
#model.parameters()会扫描module中的所有成员,如果成员中有相应权重,那么都会将结果加到要训练的参数集合上
optimizer = torch.optim.SGD(model.parameters(),lr=0.01)#lr为学习率

for epoch in range(1000):
    y_pred = model(x_data)
    loss = 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)

结果:

0 56.52023696899414
1 25.170454025268555
2 11.214292526245117
3 5.001270771026611
4 2.2352840900421143
5 1.0038176774978638
6 0.45547759532928467
7 0.21124869585037231
8 0.10240332782268524
9 0.05382827669382095
10 0.03208546340465546
……
90 0.004652736708521843
91 0.004585907328873873
92 0.004519954323768616
93 0.00445501459762454
94 0.004390999674797058
95 0.004327872302383184
96 0.004265678580850363
97 0.004204379860311747
98 0.004143938422203064
99 0.00408441387116909
w= 2.042545795440674
b= -0.09671643376350403
y_pred = tensor([[8.0735]])

不同优化器,他们的性能在使用上有什么区别?直接看图
以下包含了Adagrad Adam adamax ASGD RMSprop Rprop SGD七种优化器的loss下降图。其实还有一种优化器LBFGS,使用时需要传递闭包等等,我会在之后补上,暂时没有。
在这里插入图片描述

小知识点:可调用对象

如果要使用一个可调用对象,那么在类的声明的时候要定义一个 call()函数就OK了,就像这样

class Foobar:
	def __init__(self):
		pass
	def __call__(self,*args,**kwargs):
		pass

其中参数*args代表把前面n个参数变成n元组,**kwargsd会把参数变成一个词典,举个例子:

 def func(*args,**kwargs):
 	print(args)
 	print(kwargs)

#调用一下
func(1,2,3,4,x=3,y=5)

结果:
(1,2,3,4)
{‘x’:3,‘y’:5}

PyTorch-MNIST-MLP是一个使用PyTorch库和多层感知器(MLP)来训练和测试MNIST手写数字数据集的项目。 MNIST是一个经典的手写数字识别数据集,包含了大量的手写数字图片和对应的标签。通过训练一个模型,我们可以实现自动识别手写数字的功能。 MLP是一种基本的人工神经网络模型,包含了多个全连接的神经网络层,并且每个神经元都与相邻层的所有神经元连接。通过多层的非线性变换和权重调整,MLP可以处理复杂的分类和回归任务。 PyTorch是一个开源的机器学习框架,提供了丰富的工具和函数来简化神经网络模型的构建和训练过程。通过PyTorch,我们可以轻松地搭建和训练MLP模型,并在MNIST数据集上进行实验。 在PyTorch-MNIST-MLP项目中,我们首先加载MNIST数据集,并将其转换成适合MLP模型的格式。然后,我们定义MLP模型的结构,包括输入层、隐藏层和输出层,并使用PyTorch提供的函数来定义损失函数和优化器。 接下来,我们使用训练数据集对MLP模型进行训练,通过反向传播算法和优化器来逐步调整模型的权重和偏置。在训练过程中,我们可以监控模型的精确度和损失值,以评估模型的性能。 最后,我们使用测试数据集对训练好的模型进行测试,并计算模型在测试集上的准确率。通过比较预测结果和真实标签,我们可以评估模型在手写数字识别任务上的表现。 总之,PyTorch-MNIST-MLP是一个基于PyTorch库和MLP模型的项目,用于训练和测试MNIST手写数字数据集。通过该项目,我们可以学习和掌握使用PyTorch构建神经网络模型的基本方法,并实现手写数字识别的功能。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值