神经网络简介

神经网络的主要工作就是输入数据,处理数据,然后给出一个结果作为输出,我们先介绍一下神经元,了解神经网络的组成

1 神经元

神经元是组成神经网络的最基本单位,它起初来源于人体,模仿人体的神经元,功能也与人体的神经元一致,得到信号的输入,经过数据处理,然后给出一个结果作为输出或者作为下一个神经元的输入。它的结构如下:

1)x1,x2,...,xn表示信号的输入,例如苹果的颜色,苹果的形状等,这些都是信号
2)w1,w2,...,w3表示输入信号的权重,指的是输入信号的重要性,一个较大的权重意味着神经网络认为这个信号输入比其它信号输入更重要,较小的权重意味着数据不是那么重要。比如你想要这个神经元可以区分苹果和香蕉,颜色和形状都是比较重要的信号,可以有助于神经元去区分,而它们的重量信号将很难帮助神经元去区分谁是苹果,谁是香蕉。
3)sum表示数据处理的过程,这个过程是将每个信号与对应权重的相乘,并将它们全部相加得到的一个结果,用数学公式表示为sum=w1x1+w2x2+...+wnxn+b,用矩阵的形式进行简化计算表达sum=WX+b
4)f表示激活函数,激活函数的主要作用是使得神经元具有非线性,在数据处理的过程中,计算其实是一个线性组合,实际中,有很多都不是线性的,所以我们需要神经元具有非线性。目前激活函数使用比较多的是sigmoid、tanh、ReLU等激活函数。
5)b表示偏置,加上偏置是为了让神经元的计算不单单只能经过原点。

2 神经网络

神经网络是由多个神经元组合而成,前一个神经元的结果作为后一个神经元的输入,依次组合而成。神经网络一般分为三层,第一层作为输入层,最后一层作为输出层,中间的全部是隐含层。它的结构如下
神经网络

3 神经网络训练的原理

神经网络的训练,简单来说就是,首先随机初始化所有的神经网络权重,根据输入值,经过神经网络的计算得到输入,得到实际输出的与期望输出的误差,根据误差的大小调整所有神经网络权重,重复执行之前的操作,不停地降低误差。
由单个神经元组成的神经网络,我们称之为感知器。我们以感知器为例,激活函数采用sigmoid函数,训练一个能够进行与(&)运算的感知器
其训练过程如下:

### 卷积神经网络 (CNN) 的基本原理 卷积神经网络是一种专门用于处理具有网格状拓扑数据的前馈神经网络,最常应用于图像分类、目标检测等领域。其核心思想在于利用局部连接和权值共享机制减少参数数量并提高模型泛化能力。 #### 局部连接与权值共享 传统全连接神经网络中的每一个节点都与其他层的所有节点相连,这种方式对于高维数据(如图像)会导致计算量巨大且容易过拟合。而卷积神经网络通过局部感受野的概念,仅让每个神经元与其邻近区域内的像素建立联系[^1]。这种设计不仅降低了复杂度,还模拟了生物视觉系统的特性。 #### 特征提取过程 - **卷积层**: 这一层负责执行滤波器扫描整个输入图片的操作,在不同位置重复使用相同的权重集合形成多个特征图。这些过滤器可以自动学习到诸如边缘、角点之类的低级模式以及更高级别的语义信息随着层数加深逐渐显现出来[^2]。 - **激活函数**: 经过线性的卷积运算之后加入非线性变换是非常重要的环节之一;常用的有ReLU(Rectified Linear Unit),它能有效缓解梯度消失问题同时加快收敛速度。 - **池化层(Pooling Layer)**: 主要作用是对前面得到的空间分辨率做降采样处理从而进一步降低维度大小同时也增强了平移不变形的能力即当物体稍微移动一点距离时仍可被正确辨认。 #### 应用场景举例说明 以MNIST手写数字为例,虽然普通的MLP也可以完成该任务但是相比而言Cnn具备以下几个方面的优越之处: - 更少的手动工程:不需要像SVM那样精心挑选合适的kernel或者PCA降维等预处理步骤; - 自适应性强:能够自己发现哪些部分更重要而不是依赖人为设定规则; - 泛化性能好:由于采用了上述提到的各种技术手段使得即使面对未曾见过的新样本也能给出较为合理的预测结果。 ```python import paddle from paddle.nn import Conv2D, MaxPool2D, Linear class SimpleCNN(paddle.nn.Layer): def __init__(self): super(SimpleCNN, self).__init__() # 定义第一个卷积层 self.conv1 = Conv2D(in_channels=1, out_channels=32, kernel_size=(5, 5)) self.pool1 = MaxPool2D(kernel_size=2, stride=2) # 第二个卷积层 self.conv2 = Conv2D(in_channels=32, out_channels=64, kernel_size=(5, 5)) self.pool2 = MaxPool2D(kernel_size=2, stride=2) # 全连接层 self.fc1 = Linear(in_features=1024, out_features=512) self.fc2 = Linear(in_features=512, out_features=10) def forward(self, inputs): x = self.pool1(F.relu(self.conv1(inputs))) x = self.pool2(F.relu(self.conv2(x))) x = paddle.flatten(x, start_axis=1) x = F.relu(self.fc1(x)) output = self.fc2(x) return output ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值