详解用pytorch搭建一个简单的神经网络

前言

本文通过一个简单的神经网络的实现,来介绍相关的pytorch函数,以及相关流程。

前面首先介绍代码的实现,后面再针对问题进行相应的解释。


前期准备

1.pytorch中文文档

2.神经网络基础

3.BP算法

4.文中代码来源


代码实现

import torch
import torch.nn.functional as F
from torch.autograd import Variable
import matplotlib.pyplot as plt

x = torch.unsqueeze(torch.linspace(-1,1,100),dim = 1)
#unsqueeze函数创建一个维度是1的向量
linspace函数生成在-1到1之间的100个数

y = x**2+0.2*torch.rand(x.size())
#得到x自乘的矩阵,然后加上同x矩阵相同的噪声

print(x,y,x.size())
#输出x,y矩阵,以及矩阵x的大小

#以上操作为初始化矩阵

x,y = Variable(x),Variable(y)
#将矩阵转化为 变量

class Net(torch.nn.Moudule):
#定义神经网络
	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))
        #给x加权成为a,用激励函数将a变成特征b
		x = self.predict(x)
        #给b加权,预测最终结果
		return x
net = Net(1,10,1)
#定义一个神经网络
print(net)
#查看各层之间的参数

输出

以上代码已经构建完成神经网络,下面开始训练部分。

opt = torch.optim.SGD(net.parameters(),lr=0.5)
#设置学习率为0.5,用随机梯度下降发优化神经网络的参数

lossfunc = torch.nn.MSELoss()
#设置损失函数为均方损失函数,用来计算每次的误差

for t in range(100):
#进行100次的优化
	prediction = net(x)
	#得到预测值
	loss=lossfunc(prediction,y)
	#得到预测值与真实值之间的误差
	opt.zero_grad()
	#梯度清零
	loss.backward()
	#反向传播
	opt.step()
	#梯度优化
plt.ioff()
plt.show()

知识整理

可以看到上述代码执行神经网络的流程:创建矩阵 -> 转换为变量 -> 设置神经网络 -> 进行训练

把矩阵转化为变量,方便后面进行梯度计算。

设置神经网络是关键部分,此神经网络包括两部分:__init()__函数跟forward()函数

__init()__函数包括四个参数,分别是:初始信息,特征数,隐藏单元数,输出单元数

该函数包含三部分:首先是继承模块,此步骤是官方步骤。然后是定义输入层到隐藏层的函数,然后定义隐藏层到输出层的函数。

关于后两个函数,可以自己定义,nn包中封装了Linear()函数,用来处理形如y = wA^{T}+b的层间关系,此函数有三个参数,分别是输入样本大小,输出样本大小,bias,当bias为false时,图层不会学习附加偏差。

此模型只有三层结构,所以只有输入层跟隐藏层,隐藏层跟输出层的关系,对应数量分别是1对10,10对1。此处参数的更改会在后面过程中的opt参数体现出来。

forward函数是神经网络的前向传播函数,此函数主要会利用到激励函数,通过前面定义的各层之间的关系,产生新的结果,即新的预测值,此值会拿来跟最终的结果做比较,通过反向传播更新参数值。此函数中的relu()函数就是常用的将一个数换成(0,1)之间的小数的函数,可以自行百度。

然后就是训练部分,首先要定义Loss函数和优化器,此处的Loss函数用nn包自带的均方损失函数,即loss(xi,yi) = (xi-yi)^{2},

此函数形式有很多,用途就是计算预测值跟结果之间的差距。优化器的选择参考此处。(挖坑待填)

训练的过程:得到预测值 - - 利用Loss函数得到误差 - - 梯度清零 - - 反向传播 - - 梯度优化。

经过数次训练,net神经网络的参数会不断得到优化,直到达到预期效果。


最后

输出一下loss值,看一下每次的误差

初次了解pytorch,第一次搭建神经网络,若有错误以及不足之处,欢迎提出。

  • 25
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 是的,可以使用PyTorch搭建一个简单的目标检测网络。PyTorch一个强大的深度学习框架,提供了大量的预训练模型以及许多工具来帮助搭建目标检测网络。通过利用PyTorch的高级功能,您可以快速构建目标检测模型,并且可以轻松地训练它以适应您的数据集。 ### 回答2: 可以使用PyTorch搭建一个简单的目标检测网络。目标检测是计算机视觉领域的一个重要任务,旨在从图像中定位和识别出不同目标的位置和类别。 PyTorch一个基于Python的深度学习框架,具有灵活性和易用性。它提供了丰富的函数和库来帮助我们构建和训练深度学习模型。 在使用PyTorch搭建目标检测网络时,我们可以使用现有的卷积神经网络作为基础模型。常见的基础模型包括VGG、ResNet和MobileNet等。我们可以使用预训练的基础模型,并在其基础上添加额外的层来实现目标检测。 除了基础模型外,我们还需要添加一些特定的层来进行目标定位和分类。常见的目标检测算法包括Faster R-CNN、YOLO和SSD等。可以根据自己的需求选择适合的算法,并在PyTorch中实现相应的代码。 在构建目标检测网络后,我们可以使用PyTorch提供的优化器和损失函数来训练网络。通常,我们需要准备一组带有标签的训练数据集,用于网络的训练和调整参数。训练过程中,我们可以使用反向传播算法来更新网络中的权重和偏差,以逐渐提高网络性能。 总的来说,借助于PyTorch的强大功能和灵活性,我们可以相对容易地搭建一个简单的目标检测网络。但是,为了获得更好的性能,可能需要更多的调试、调整和训练。 ### 回答3: 当然可以使用PyTorch搭建一个简单的目标检测网络。PyTorch是一种广泛使用的深度学习框架,提供了丰富的函数和工具,方便构建和训练神经网络模型。 要搭建一个目标检测网络,通常可以使用一种称为"卷积神经网络"(Convolutional Neural Network)的模型。这种网络结构对于图像分类和目标检测任务有很好的性能。 在PyTorch中,可以使用torchvision包提供的现成的模型构建目标检测网络。常用的模型如Faster R-CNN、YOLO和SSD等,都可以在PyTorch中找到对应的实现。 首先,需要安装PyTorch和torchvision。然后,可以通过创建一个自定义的PyTorch模型类,继承torch.nn.Module类,并实现自己的网络结构。可以使用一些常用的卷积和池化层、全连接层等来构建模型。 接下来,需要定义模型的前向传播函数,即定义模型在输入数据上的计算过程。这涉及卷积、激活函数、池化等操作。同时,我们还需要定义损失函数和优化器来进行模型训练。 在训练过程中,可以使用标注好的目标检测数据集来训练模型,通过不断迭代优化模型的参数。 最后,可以使用训练好的模型对新的图像进行目标检测,可以得到目标的位置和类别等信息。 总而言之,使用PyTorch可以方便地搭建一个简单的目标检测网络。通过合理地设计和训练网络,可以获得较好的目标检测性能。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值