用PyTorch进行回归运算的实现代码是什么
Admin 2022-09-16 群英技术资讯 420 次浏览
我发现不仅有很多的Keras模型,还有很多的PyTorch模型,还是学学Pytorch吧,我也想了解以下tensor到底是个啥。
PyTorch中神经网络的构建和Tensorflow的不一样,它需要用一个类来进行构建(后面还可以用与Keras类似的Sequential模型构建),当然基础还是用类构建,这个类需要继承PyTorch中的神经网络模型,torch.nn.Module,具体构建方式如下:
# 继承torch.nn.Module模型 class Net(torch.nn.Module): # 重载初始化函数(我忘了这个是不是叫重载) def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() # Applies a linear transformation to the incoming data: :math:y = xA^T + b # 全连接层,公式为y = xA^T + b # 在初始化的同时构建两个全连接层(也就是一个隐含层) self.hidden = torch.nn.Linear(n_feature, n_hidden) self.predict = torch.nn.Linear(n_hidden, n_output) # forward函数用于构建前向传递的过程 def forward(self, x): # 隐含层的输出 hidden_layer = functional.relu(self.hidden(x)) # 实际的输出 output_layer = self.predict(hidden_layer) return output_layer
该部分构建了一个含有一层隐含层的神经网络,隐含层神经元个数为n_hidden。
在建立了上述的类后,就可以通过如下函数建立神经网络:
net = Net(n_feature=1, n_hidden=10, n_output=1)
optimizer用于构建模型的优化器,与tensorflow中优化器的意义相同,PyTorch的优化器在前缀为torch.optim的库中。
优化器需要传入net网络的参数。
具体使用方式如下:
# torch.optim是优化器模块 # Adam可以改成其它优化器,如SGD、RMSprop等 optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)
loss用于定义神经网络训练的损失函数,常用的损失函数是均方差损失函数(回归)和交叉熵损失函数(分类)。
具体使用方式如下:
# 均方差lossloss_func = torch.nn.MSELoss()
训练过程分为三个步骤:
1、利用网络预测结果。
prediction = net(x)
2、利用预测的结果与真实值对比生成loss。
loss = loss_func(prediction, y)
3、进行反向传递(该部分有三步)。
# 均方差loss # 反向传递步骤 # 1、初始化梯度 optimizer.zero_grad() # 2、计算梯度 loss.backward() # 3、进行optimizer优化 optimizer.step()
这是一个简单的回归预测模型。
import torch from torch.autograd import Variable import torch.nn.functional as functional import matplotlib.pyplot as plt import numpy as np # x的shape为(100,1) x = torch.from_numpy(np.linspace(-1,1,100).reshape([100,1])).type(torch.FloatTensor) # y的shape为(100,1) y = torch.sin(x) + 0.2*torch.rand(x.size()) class Net(torch.nn.Module): def __init__(self, n_feature, n_hidden, n_output): super(Net, self).__init__() # Applies a linear transformation to the incoming data: :math:y = xA^T + b # 全连接层,公式为y = xA^T + b self.hidden = torch.nn.Linear(n_feature, n_hidden) self.predict = torch.nn.Linear(n_hidden, n_output) def forward(self, x): # 隐含层的输出 hidden_layer = functional.relu(self.hidden(x)) output_layer = self.predict(hidden_layer) return output_layer # 类的建立 net = Net(n_feature=1, n_hidden=10, n_output=1) # torch.optim是优化器模块 optimizer = torch.optim.Adam(net.parameters(), lr=1e-3) # 均方差loss loss_func = torch.nn.MSELoss() for t in range(1000): prediction = net(x) loss = loss_func(prediction, y) # 反向传递步骤 # 1、初始化梯度 optimizer.zero_grad() # 2、计算梯度 loss.backward() # 3、进行optimizer优化 optimizer.step() if t & 50 == 0: print("The loss is",loss.data.numpy())
运行结果为:
The loss is 0.27913737
The loss is 0.2773982
The loss is 0.27224126
…………
The loss is 0.0035993527
The loss is 0.0035974088
The loss is 0.0035967692
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
今天小编就为大家分享一篇python 实现GUI(图形用户界面)编程详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
大家好,本篇文章主要讲的是Python3.10和Python3.9版本之间的差异介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦
从ZoomEye到BugScan,再到TangScan,大型的Poc/EXP平台越来越多,各种扫描器也层出不穷。Web安全的门槛越来越高,自动化的渗透已经成了一种趋势。我一直梦想着,将来渗透的时候,先打开自己写的各种自动化工具,输入目标,然后喝着咖啡,刷着知乎,最后只需要把工具的分析报告整理整理就可以了。事实上,现在的扫描器也正在向这个方向发展,期待一键getshell的那一天。
利用json模块的dumps()函数和loads()函数可以实现Python对象和JSON数据之间的转换,下面来分别演示两种函数的用法
本篇文章给大家带来了关于Python的相关知识,通常我们用Python绘制的都是二维平面图,但有时也需要绘制三维场景图,下面介绍了关于python绘制三维图的相关资料,希望对大家有帮助。【相关推荐
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008