神经网络

bp神经网络和cnn神经网络,bp神经网络和神经网络 一、计算方法不同1、前馈神经网络:一种最简单的神经网络,各神经元分层排列。每个神经元只与前一层的神经元相连。接收前一层的输出,并输出给下一层.各层间没有反馈。2、BP神经网络:是一种按照误差逆向传播算法训练的多层前馈神经网络。3、卷积神经网络:包含卷积计算且具有深度结构的前馈神经网络。二、用途不同1、前馈神经网络:主要应用包括感知器网络、BP网络和RBF网络。2、BP神经网络:(1)函数逼近:用输入向量和相应的输出向量训练一个网络逼近一个函数;(2)模式识别:用一个待定的输出向量将它与输入向量联系起来;(3 阅读详情

目录


神经网络可以使用 torch.nn 包来构建。nn 依赖 autograd 来定义模型并对其进行微分。一个 nn.Module 包含层以及返回输出的 forward 方法。

下图为对数字进行分类的神经网络:在这里插入图片描述
它是一个简单的前馈网络。 它接受输入,一个接一个地将其通过几个层,最终给出输出。

神经网络的典型训练过程如下:

  • 定义具有一些可学习参数(或权重)的神经网络。
  • 迭代输入数据集
  • 通过神经网络处理输入
  • 计算损失(输出距离正确的目标值有多远)
  • 将梯度传播回神经网络的参数
  • 通常使用简单的更新规则更新网络权重:weight = weight - learning_rate * gradient

1、定义神经网络

import torch
import torch.nn as nn
import torch.nn.functional as F


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        # 1 input image channel, 6 output channels, 3x3 square convolution kernel
        self.conv1 = nn.Conv2d(1, 6, 3)
        self.conv2 = nn.Conv2d(6, 16, 3)
        # an affine operation: y = Wx + b
        self.fc1 = nn.Linear(16 * 6 * 6, 120)  # 6*6 from image dimension
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    def forward(self, x):
        # Max pooling over a (2, 2) window
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # If the size is a square you can only specify a single number
        x = F.max_pool2d(F.relu(self.conv2(x)), 2)
        x = x.view(-1, self.num_flat_features(x))
        x = F.relu(self.fc1(x))
        x = F.relu(self.fc2(x))
        x = self.fc3(x)
        return x

    def num_flat_features(self, x):
        size = x.size()[1:]  # all dimensions except the batch dimension
        num_features = 1
        for s in size:
            num_features *= s
        return num_features


net = Net()
print(net)

输出

Net(
  (conv1): Conv2d(1, 6, kernel_size=(3, 3), stride=(1, 1))
  (conv2): Conv2d(6, 16, kernel_size=(3, 3), stride=(1, 1))
  (fc1): Linear(in_features=576, out_features=120, bias=True)
  (fc2): Linear(in_features=120, out_features=84, bias=True)
  (fc3): Linear(in_features=84, out_features=10, bias=True)
)

你只需要定义 forward 方法,backward 方法将会自动被定义。你可以在 forward 方法中使用任何tensor操作。

net.patameters() 返回模型的可学习参数。

params = list(net.parameters())
print(len(params))
print(params[0].size())  # conv1's .weight

输出:

10
torch.Size([6, 1, 3, 3])

让我们尝试一个随机的32x32输入。 注意:此网络(LeNet)的预期输入大小为32x32。 要在MNIST数据集上使用此网络,请将数据集中的图像调整为32x32。

input = torch.randn(1, 1, 32, 32)
out = net(input)
print(out)

输出:

tensor([[ 0.0057, -0.0952,  0.1055, -0.0916, -0.1350,  0.0857, -0.0890,  0.0326,
         -0.0554,  0.1451]], grad_fn=<AddmmBackward>)

将所有参数的梯度缓冲区置零,并使用随机梯度进行反向传播:

net.zero_grad()
out.backward(torch.randn(1, 10))

注意

  • torch.nn仅支持 mini-batches。 整个torch.nn包只支持小批量样本的输入,而不是单个样本
  • 例如,nn.Conv2d 将采用4维张量:nSamples x nChannels x Height x Width。
  • 如果你有单个样本,只需使用 input.unsqueeze(0)添加一个假的批量维度。

总结:

  • torch.Tensor - 支持autograd操作(如backward())的多维数组。 同时保存关于tensor的梯度。
  • nn.Module - 神经网络模块。 方便的封装参数的方法,使用帮助程序将它们移动到GPU,导出,加载等。
  • nn.Parameter - 一种Tensor,在被指定为Module的属性时自动注册为参数。
  • autograd.Function - 实现 autograd 操作的 forward 和 backward 定义。 每个Tensor操作都会创建至少一个 Function节点,该节点连接到创建Tensor并对其历史进行编码的函数。

2、损失函数

损失函数以(输出,目标)对为输入,并计算一个值以估计输出距和目标之间的距离。
nn包下有几种不同的损失函数。 一个简单的损失是:nn.MSELoss,计算输入和目标之间的均方误差。

例如:

output = net(input)
target = torch.randn(10)  # a dummy target, for example
target = target.view(1, -1)  # make it the same shape as output
criterion = nn.MSELoss()

loss = criterion(output, target)
print(loss)

输出:

tensor(0.9991, grad_fn=<MseLossBackward>)

现在,如果你使用 .grad_fn 属性在反向方向上跟随损失,你将看到如下所示的计算图:

input -> conv2d -> relu -> maxpool2d -> conv2d -> relu -> maxpool2d
      -> view -> linear -> relu -> linear -> relu -> linear
      -> MSELoss
      -> loss

因此,当我们调用 loss.backward() 时,整个计算图关于loss被微分,图中所有具有requires_grad = True的tensor将拥有梯度累积的.grad Tensor。

print(loss.grad_fn)  # MSELoss
print(loss.grad_fn.next_functions[0][0])  # Linear
print(loss.grad_fn.next_functions[0][0].next_functions[0][0])  # ReLU

输出:

<MseLossBackward object at 0x7ff716c28630>
<AddmmBackward object at 0x7ff716c28400>
<AccumulateGrad object at 0x7ff716c28400>

3、反向传播

要反向传播误差,我们所要做的就是 lost.backward()。 你需要清除现有梯度,否则梯度将累积到现有梯度上。

现在我们将调用 loss.backward(),并查看 conv1 在反向传播之前和之后的偏置梯度。

net.zero_grad()     # zeroes the gradient buffers of all parameters

print('conv1.bias.grad before backward')
print(net.conv1.bias.grad)

loss.backward()

print('conv1.bias.grad after backward')
print(net.conv1.bias.grad)

输出:

conv1.bias.grad before backward
tensor([0., 0., 0., 0., 0., 0.])
conv1.bias.grad after backward
tensor([ 0.0081,  0.0029,  0.0248, -0.0054,  0.0051,  0.0008])

4、更新参数

实践中使用的最简单的更新规则是随机梯度下降(SGD):
weight = weight - learning_rate * gradient

我们可以使用简单的Python代码实现:

learning_rate = 0.01
for f in net.parameters():
    f.data.sub_(f.grad.data * learning_rate)

然而,当你使用神经网络时,您希望使用各种不同的更新规则,例如SGD,Nesterov-SGD,Adam,RMSProp等。为了实现这一点,我们构建了一个包:torch.optim,它实现了所有这些方法。 使用它非常简单:

import torch.optim as optim

# create your optimizer
optimizer = optim.SGD(net.parameters(), lr=0.01)

# in your training loop:
optimizer.zero_grad()   # zero the gradient buffers
output = net(input)
loss = criterion(output, target)
loss.backward()
optimizer.step()    # Does the update

注意:
观察如何使用 optimizer.zero_grad() 手动将梯度缓冲区设置为零。 这是因为梯度是累积的。

人工神经网络—多层神经网络 多层神经网络1. 回顾2. 多层神经网络结构 1. 回顾 在上一讲中,我们提到从上个世纪80年代开始,人工神经网络领域迎来了新的突破,产生了多层神经网络,人们终于可以利用人工神经网络处理非线性问题了。 2. 多层神经网络结构 这一讲主要介绍多层神经网络的结构。下面这幅图是最简单的多层神经网络,它包含2层,总共由3个神经元相互连接而成。 图1 两层神经网络例子 输入XXX向量,有两个分量x1x_1x1​,x2x_2x2​,输出yyy是一个数值。我们逐层写出输入到输出之间的关系:   a1=ω11x1+ω12 阅读详情

相关推荐

bp神经网络是前馈网络吗,什么是前馈神经网络

BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:1、从训练集中取出某一样本,把信息输入网络中。2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。3、计算网络实际输出与期望输出的误差。

wenangou的博客 4540

神经网络训练过程概述

本文简要概述了神经网络的训练过程,即前向传播和反向传播

python_plus的博客 3471

神经网络②——python实现神经网络

上一篇博客介绍了神经网络其实就是两步,第一步是前向传输,根据输入的特征值与权重矩阵以及激活函数,不断往前计算,得到输出层的值,第二步就是后向传播,根据残差的加权求和,不断往后,直到输入层,然后更新权重,不断进行这两步,直接输出结果的误差在所要求范围内即可。 本篇博文通过python代码实现神经网络,采用sklearn自带的手写数字集,看分类情况如何 一、导入数据集并标准化 数据集的加载非常简单,直...

cindy407的博客 3303

训练神经网络的详细步骤,如何训练一个神经网络

词错率不是 100% 的原因在于每个字母有 29 种可能性(a-z、逗号、空格和空白),神经网络很快就能学会:某些字符(e,a,空格,r,s,t)比其他的更常见辅音-元音-辅音是英文的构词特征MFCC 输入声音信号振幅特征的增加只与字母 a-z 有关。神经网络具有学习、联想和容错功能,是地下水水质评价工作方法的改进,如何在现行的神经网络中进一步吸取模糊和灰色理论的某些优点,建立更适合水质评价的神经网络模型,使该模型既具有方法的先进性又具有现实的可行性,将是我们今后研究和探讨的问题。

aifamao2的博客 5430

bp网络和卷积神经网络,bp神经网络

极限学习机(extreme learning machine)ELM是一种简单易用、有效的单隐层前馈神经网络SLFNs学习算法。2006年由南洋理工大学黄广斌副教授提出。传统的神经网络学习算法(如BP算法)需要人为设置大量的网络训练参数,并且很容易产生局部最优解。极限学习机只需要设置网络的隐层节点个数,在算法执行过程中不需要调整网络的输入权值以及隐元的偏置,并且产生唯一的最优解,因此具有学习速度快且泛化性能好的优点。来自百度百科。

m0_54846070的博客 3538

神经网络算法实例说明,简单神经网络算法原理

在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能、构作专家系统、制成机器人、复杂系统控制等等。纵观当代新兴科学技术的发展历史,人类在征服宇宙空间、基本粒子,生命起源等科学技术领域的进程中历经了崎岖不平的道路。我们也会看到,探索人脑功能和神经网络的研究将伴随着重重困难的克服而日新月异。MATLAB中文论坛2010年出过一本书,北航出版社的,叫《MATLAB神经网络30个案例分析 (豆瓣)》。我觉得把它作为入门书挺好的,每一章配有视频和代码,可以依样画葫芦

aifans_bert的博客 3599

神经网络训练的一般步骤,神经网络是怎么训练的

指对人工神经网络训练。向网络足够多的样本,通过一定算法调整网络的结构(主要是调节权值),使网络的输出与预期值相符,这样的过程就是神经网络训练。根据学习环境中教师信号的差异,神经网络训练大致可分为二分割学习、输出值学习和无教师学习三种。

wenangou的博客 9180

神经网络的理解

个人对神经网络的一些浅显理解 本文参考博客 神经网络是深度学习的基础,学习和理解神经网络不仅可以使我们掌握一门强大的机器学习基础,同时也可以更好的理解深度学习。 1. 单层神经网络(感知机) 1958年,计算机科学家Rosenblatt提出由两层神经元组成的网络。给它起了个名字叫“感知机”。感知机是当时首个可以学习的人工神经网络。 感知机的结构: 就像上述所说,感知机具有两层神经网络。第一层,称...

shanhui123的博客 3173

几种主要的神经网络----全连接神经网络、前馈神经网络、卷积神经网络、循环神经网络

几种主要的神经网络一、全连接神经网络二、前馈神经网络(Feedforward neural network,FNN)三、卷积神经网络(Convolutional Neural Network,CNN)四、循环神经网络(Recurrent neural network,RNN ) 一、全连接神经网络 顾名思义,全连接神经网络中,对n-1层和n层而言,n-1层的任意一个节点,都和第n层所有节点有连接。即第n层的每个节点在进行计算的时候,激活函数的输入是n-1层所有节点的加权,这个激活函数是非线性的。它的缺点就是

weixin_43580130的博客 2万+

简述神经网络的训练过程?

简述神经网络的训练过程? 训练神经网络由以下基本步骤构成: 步骤1:神经网络的初始化(Weights Initalization):初始化权值(weights)和偏差(bias)。可以理解为方程Y =wX+b中的w和b。 步骤2:正向传播(前向传播, forward propagation):使用给定的输入X、权重W和偏差b,对于每一层,我们计算输入和权重的线性组合值,然后将激活函数应用于该线性组合值。 在最后一层,如果是一个二分类问题使用sigmoid函数计算概率值,如果是多分类使用s

data+scenario+science+insight 1万+

Keras深度学习实战(1)——神经网络基础与模型训练过程详解

神经网络是一种性能强大的学习算法,其灵感来自大脑的运作方式。类似于神经元在大脑中彼此连接的方式,神经网络获取输入后,通过某些函数在网络中进行传递输入信息,连接在其后的一些神经元会被激活,从而产生输出。本文主要介绍神经网络中重要的基础知识,然后使用 Python 从零开始构建神经网络的训练流程,包括前向传播和反向传播,更直观的了解神经网络的通用训练流程。............

盼小辉丶的博客 9万+

神经网络中的单层神经网络

文章目录一、神经网络1.概述1.1 结构1.2 神经元模型使用2. 单层神经网络2.1 感知器2.2 数学描述2.3 感知器分类效果2.4 单层神经网络表示2.5 单层神经网络训练算法2.6 单层神经网络中的计算公式表示 文章综合一下几位大佬的文章: 杨强AT南京: DL01-6: 单层神经网络 企鹅号 - 轨道车辆: 技术篇:单层神经网络是什么,看完这篇文章你就懂了 一、神经网络 1.概述 ...

WaitFoF 2万+

卷积神经网络的训练流程图

所用的方法是梯度下降(Gradient descent):通过使loss值向当前点对应梯度的反方向不断移动,来降低loss。一次移动多少是由学习速率(learning rate)来控制的。

bp神经网络是什么网络,神经网络和bp神经网络

BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:1、从训练集中取出某一样本,把信息输入网络中。2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。3、计算网络实际输出与期望输出的误差。

wenangou的博客 9908

BP神经网络训练过程(详细)

BP神经网络训练步骤 PPT

MATLAB下pdf文件操作读取示例

当遇到一些需要大量数据的项目,数据的读取与储存显得尤为重要。怎样把数据从其他格式的文件中读取,并运用到程序中是很多时候我们要解决的问题。对于平常的.txt,和.xlsx文件,MATLAB有对应的函数帮助读取,但是遇到pdf文件时MATLAB很难读取内容。本文以一个操作实例提供了一个从pdf文件中读取数据的方法。

UESTC 五高考3模拟的博客 6558

一文讲清神经网络、BP神经网络、深度学习的关系

一文讲清神经网络、BP神经网络、深度学习的关系

ywj_1991的博客 2万+

高速PCB差分对布线仿真实战案例

差分对布线是高速PCB设计的关键环节,直接影响信号完整性与EMI性能。本文结合实际项目,详解等长控制、阻抗匹配、间距优化等核心技巧,并通过仿真工具验证眼图、串扰和时序裕量,助力工程师规避常见高速pcb设计陷阱。

weixin_29092787的博客 349

什么是神经网络?

1.神经网络是什么? 神经网络是一种计算模型,由大量的节点(或神经元)直接相互关联而构成; 每个节点(除输入节点外)代表一种特定的输出函数(或者认为是运算),称为激励函数; 每两个节点的连接都代表该信号在传输中所占的比重(即认为该节点的“记忆值”被传递下去的比重),称为权重; 网络的输出由于激励函数和权重的不同而不同,是对于某种函数的逼近或是对映射关系的近似描述; 说明:在部分网络中,存...

qq_36890572的博客 3万+

STM32CUBEIDE调试中HardFault_Handler崩溃的故障分析器实战解析

本文详细解析STM32CUBEIDE调试中HardFault_Handler崩溃问题的实战处理方法。通过内置故障分析器自动诊断硬件异常原因,如内存越界、堆栈溢出等,提供图形化界面简化调试流程,并分享配置步骤、典型案例及高级调试技巧,帮助开发者快速定位和解决嵌入式系统崩溃问题。

night的博客 643

窥秘Windows 10:SAM密码破解

Windows 10作为广受欢迎的操作系统,拥有一套强大的安全措施来保护用户账号和数据安全。然而,有时候我们需要了解更多关于密码破解的知识,以加强我们的防护措施。本文将深入探讨如何突破Windows 10的SAM密码,以便更好地了解密码安全性并加强系统的保护。

Sgirll的博客 6840

【神经网络】从生物神经网络到人工神经网络

生物神经网络与人工神经网络的发展与对比 摘要:本文系统探讨了生物神经网络与人工神经网络的发展历程及相互关系。生物神经网络作为自然界数十亿年进化的产物,通过860亿个神经元和突触的复杂连接实现感知、学习和记忆功能。人工神经网络始于20世纪40年代McCulloch-Pitts模型,历经感知机、多层感知机等发展阶段,在遭遇挫折后因反向传播算法和硬件进步而复兴。现代人工神经网络已发展出CNN、RNN、Transformer等多种结构,广泛应用于计算机视觉、自然语言处理等领域。

大雨淅淅的博客 1296

ConvNeXt 系列改进:引入大核注意力(LKA)替换 7×7 深度卷积,涨点 2.1%

LSKA替换7×7深度卷积,在ImageNet分类任务上实现2.1%的显著提升,参数量仅增加1M。LSKA的四层1D分解将计算复杂度从O(k²)降至O(k),21×21大核的计算量仅相当于原版7×7的1.7倍,实现了感受野与计算成本的完美平衡。部署友好度极高:LSKA模块在TensorRT FP16量化后延迟仅1.2ms,精度损失<0.1%,远优于Transformer类模型。下游任务全面领先。

ZXSXJ的博客 699
上一篇: torch.nn到底是什么?(精简版)
下一篇: 训练一个分类器
Spring_24
博客等级 码龄12年 46粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值