基于pytorch的神经网络之regression(代码片段)

ZDDWLIG ZDDWLIG     2023-03-09     483

关键词:

目录

1.引言

2.神经网络搭建

2.1 准备工作

2.2 搭建网络

2.3 训练网络

3.效果

4. 完整代码


1.引言

我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与分类,现在让我们来搭建第一个用于拟合回归的神经网络吧。

2.神经网络搭建

2.1 准备工作

要搭建拟合神经网络并绘图我们需要使用python的几个库。

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt

x = torch.unsqueeze(torch.linspace(-5, 5, 100), dim=1)
y = x.pow(3) + 0.2 * torch.rand(x.size())

 既然是拟合,我们当然需要一些数据啦,我选取了在区间  内的100个等间距点,并将它们排列成三次函数的图像。

2.2 搭建网络

我们定义一个类,继承了封装在torch中的一个模块,我们先分别确定输入层、隐藏层、输出层的神经元数目,继承父类后再使用torch中的.nn.Linear()函数进行输入层到隐藏层的线性变换,隐藏层也进行线性变换后传入输出层predict,接下来定义前向传播的函数forward(),使用relu()作为激活函数,最后输出predict()结果即可。

class Net(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(n_feature, n_hidden)
        self.predict = torch.nn.Linear(n_hidden, n_output)

    def forward(self, x):
        x = F.relu(self.hidden(x))
        return self.predict(x)


net = Net(1, 20, 1)
print(net)
optimizer = torch.optim.Adam(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()

网络的框架搭建完了,然后我们传入三层对应的神经元数目再定义优化器,这里我选取了Adam而随机梯度下降(SGD),因为它是SGD的优化版本,效果在大部分情况下比SGD好,我们要传入这个神经网络的参数(parameters),并定义学习率(learning rate),学习率通常选取小于1的数,需要凭借经验并不断调试。最后我们选取均方差法(MSE)来计算损失(loss)。

2.3 训练网络

接下来我们要对我们搭建好的神经网络进行训练,我训练了2000轮(epoch),先更新结果prediction再计算损失,接着清零梯度,然后根据loss反向传播(backward),最后进行优化,找出最优的拟合曲线。

for t in range(2000):
    prediction = net(x)
    loss = loss_func(prediction, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

3.效果

使用如下绘图的代码展示效果。

for t in range(2000):
    prediction = net(x)
    loss = loss_func(prediction, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if t % 5 == 0:
        plt.cla()
        plt.scatter(x.data.numpy(), y.data.numpy(), s=10)
        plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
        plt.text(2, -100, 'Loss=%.4f' % loss.data.numpy(), fontdict='size': 10, 'color': 'red')
        plt.pause(0.1)
plt.ioff()
plt.show()

                 

最后的结果: 

 

4. 完整代码

import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt

x = torch.unsqueeze(torch.linspace(-5, 5, 100), dim=1)
y = x.pow(3) + 0.2 * torch.rand(x.size())
class Net(torch.nn.Module):
    def __init__(self, n_feature, n_hidden, n_output):
        super(Net, self).__init__()
        self.hidden = torch.nn.Linear(n_feature, n_hidden)
        self.predict = torch.nn.Linear(n_hidden, n_output)

    def forward(self, x):
        x = F.relu(self.hidden(x))
        return self.predict(x)
net = Net(1, 20, 1)
print(net)
optimizer = torch.optim.Adam(net.parameters(), lr=0.2)
loss_func = torch.nn.MSELoss()
plt.ion()
for t in range(2000):
    prediction = net(x)
    loss = loss_func(prediction, y)
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()
    if t % 5 == 0:
        plt.cla()
        plt.scatter(x.data.numpy(), y.data.numpy(), s=10)
        plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=2)
        plt.text(2, -100, 'Loss=%.4f' % loss.data.numpy(), fontdict='size': 10, 'color': 'red')
        plt.pause(0.1)
plt.ioff()
plt.show()

pytorch之基于经典网络架构训练图像分类模型(代码片段)

...型,并且直接用训练的好权重当做初始化参数2.参考pytorch官网例子3.设置哪些层需要训练4.优化器设置5.训练模块6.测试模型效果本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052一、模块简单介绍我们... 查看详情

基于pytorch的神经网络之autoencoder(代码片段)

...1.引言今天我们来学习一种在压缩数据方面有较好效果的神经网络:自编码(autoencoder)。2.结构自编码的主要思想就是将数据先不断encode进行降维提取其中的关键信息,再decode解码成新的信息,我们的目标是要使我们生... 查看详情

基于pytorch,如何构建一个简单的神经网络

本文为PyTorch官方教程中:如何构建神经网络。基于PyTorch专门构建神经网络的子模块torch.nn构建一个简单的神经网络。完整教程运行codelab→https://openbayes.com/console/open-tutorials/containers/OgcYkLjKw89torch.nn文档→https://pytorch.org/docs/stab... 查看详情

pytorch实战用pytorch实现基于神经网络的图像风格迁移(代码片段)

用PyTorch实现基于神经网络的图像风格迁移1.风格迁移原理介绍2.FastNeuralStyle网络结构3.用PyTorch实现风格迁移3.1首先看看如何使用预训练的VGG。3.2接下来要实现风格迁移网络参考资料风格迁移,又称为风格转换。只需要给定原... 查看详情

基于pytorch使用实现cnn如何使用pytorch构建cnn卷积神经网络(代码片段)

基于pytorch使用实现CNN如何使用pytorch构建CNN卷积神经网络本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基... 查看详情

pt之transformer:基于pytorch框架利用transformer算法针对imdb数据集实现情感分类的应用案例代码解析(代码片段)

...表达的情感倾向。Transformer模型是一种基于注意力机制的神经网络模型,可以有效地处理自然语言处理任务。这个代码可以对电影评论进行情感分类,输出评论的情感极性(正面 查看详情

softmax回归的简洁实现(softmax-regression-pytorch)(代码片段)

...上篇(线性回归的简洁实现)中已经了解了使用Pytorch实现模型的便利。下面,让我们再次使用Pytorch来实现一个softmax回归模型。首先导入所需的包或模块。importtorc 查看详情

pytorch入门之siamese网络

首次体验Pytorch,本文参考于:githuband PyTorch中文网人脸相似度对比       本文主要熟悉Pytorch大致流程,修改了读取数据部分。没有采用原作者的ImageFolder方法: ImageFolder(root,transform=None,target_transfo... 查看详情

基于pytorch完整的训练一个神经网络并进行验证(代码片段)

...thub地址之前学的也不少了,现在要去训练一个完整的神经网络,利用Pytorch和CIFAR10数据集准备数据集importtorchvision#导入torchvision##准备数据集train_data=torchvision.dataset 查看详情

基于pytorch平台实现对mnist数据集的分类分析(前馈神经网络softmax)基础版(代码片段)

基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版文章目录基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版前言一、基于“前馈神经网络”模型,分类分析... 查看详情

《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)(代码片段)

线性回归的简洁实现(linear-regression-pytorch)1.生成数据集2.读取数据3.定义模型4.初始化模型参数5.定义损失函数6.定义优化算法7.训练模型8.小结随着深度学习框架的发展,开发深度学习应用变得越来越便利。实践中... 查看详情

《动手学深度学习》线性回归的简洁实现(linear-regression-pytorch)(代码片段)

线性回归的简洁实现(linear-regression-pytorch)1.生成数据集2.读取数据3.定义模型4.初始化模型参数5.定义损失函数6.定义优化算法7.训练模型8.小结随着深度学习框架的发展,开发深度学习应用变得越来越便利。实践中... 查看详情

基于pytorch使用实现cnn如何使用pytorch构建cnn卷积神经网络(代码片段)

基于pytorch使用实现CNN如何使用pytorch构建CNN卷积神经网络本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基... 查看详情

pytorch深度学习实践入门01(代码片段)

文章目录基于PyTorch的两层神经网络一、基于numpy的两层神经网络实现:二、基于PyTorch的两层神经网络实现:三、使用nn库实现两层神经网络四、自定义nnModules实现两层神经网络总结基于PyTorch的两层神经网络提示:在... 查看详情

pytorch是啥?

...GPU加速的张量计算(如NumPy)。包含自动求导系统的深度神经网络。PyTorch的发展:PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团... 查看详情

“你什么意思”之基于rnn的语义槽填充(pytorch实现)(代码片段)

1.概况1.1任务口语理解(SpokenLanguageUnderstanding,SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图。SLU是口语对话系统(SpokenDialogSystems)的一个非常关键的环节。下图... 查看详情

pytorch之深度神经网络概念全面整理(代码片段)

深度神经网络就是用一组函数去逼近原函数,训练的过程就是寻找参数的过程。1、神经网络训练过程神经网络的训练过程如下:收集数据,整理数据实现神经网络用于拟合目标函数做一个真实值和目标函数值直接估... 查看详情

基于pytorch的cnnlstm神经网络模型调参小结

...N与LSTM、BiLSTM的结合还有多层多通道CNN、LSTM、BiLSTM等多个神经网络模型的的实现。这篇文章总结一下最近一段时间遇到的问题、处理方法和相关策略,以及经验(其实并没有什么经验)等,白菜一枚。DemoSite: https://github 查看详情