10 神经网络的基本结构

在前一篇教程中,我们探讨了torch.autograd如何实现自动求导,这是构建深度学习模型所必不可少的工具。今天,我们将继续深入学习神经网络的基础知识,特别是神经网络的基本结构

神经网络的基本组成

一个神经网络的基本结构通常由以下几个主要部分组成:

  1. 输入层(Input Layer):接收原始数据。
  2. 隐藏层(Hidden Layer):进行特征转换,可以有一个或多个隐藏层。
  3. 输出层(Output Layer):输出最终结果。
  4. 权重和偏置(Weights and Biases):每个连接都有一个权重,而每个神经元有一个偏置。

神经元的基本计算

一个单独的神经元的计算可以被表示为以下公式:

$$
y = f(w \cdot x + b)
$$

其中:

  • $y$ 是神经元的输出。
  • $f$ 是激活函数,常用的有ReLUSigmoidTanh等。
  • $w$ 是权重向量。
  • $x$ 是输入向量。
  • $b$ 是偏置。

这个计算通过对输入进行线性变换,然后应用激活函数,将非线性引入模型中。

激活函数

激活函数的选择对神经网络的性能有很大影响。以下是几种常用的激活函数:

  • ReLU(Rectified Linear Unit):$f(x) = \max(0, x)$。适用于深度神经网络,因为它能够解决梯度消失问题。
  • Sigmoid:$f(x) = \frac{1}{1 + e^{-x}}$。常用于二分类任务,但在深层网络中可能导致梯度消失。
  • Tanh:$f(x) = \tanh(x)$。输出范围在$[-1, 1]$之间,也能解决部分梯度消失问题。

网络结构示例

假设我们想要构建一个简单的全连接神经网络(Feedforward Neural Network),其结构可以用如下方式理解:

1
输入层(数据) → 隐藏层(特征提取) → 输出层(预测结果)

例如,一个简单的结构包括:

  • 输入层:有10个神经元(假设每个神经元对应一个特征)。
  • 隐藏层:有5个神经元,可以使用ReLU激活函数。
  • 输出层:有1个神经元,用于二分类任务,可以使用Sigmoid激活函数。

代码示例

下面是如何用PyTorch定义一个简单的神经网络结构的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import torch
import torch.nn as nn

class SimpleNN(nn.Module):
def __init__(self):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(10, 5) # 输入层到隐藏层
self.fc2 = nn.Linear(5, 1) # 隐藏层到输出层
self.relu = nn.ReLU() # 使用ReLU激活函数
self.sigmoid = nn.Sigmoid() # 使用Sigmoid激活函数

def forward(self, x):
x = self.fc1(x) # 前向传播到隐藏层
x = self.relu(x) # 激活
x = self.fc2(x) # 前向传播到输出层
x = self.sigmoid(x) # 激活
return x

# 创建一个神经网络实例
model = SimpleNN()
print(model)

在这个示例中,我们定义了一个名为SimpleNN的神经网络,它包含1个输入层,1个隐藏层和1个输出层。forward方法是网络的前向传播过程,它定义了输入数据如何通过网络进行传递。

总结

在本篇中,我们讲解了神经网络的基本结构,包括输入层、隐藏层、输出层及其对应的计算公式。我们还探讨了激活函数的选择及其作用,并通过一个简单的PyTorch代码示例展示了如何实现一个基本的神经网络。

接下来,我们将会学习如何定义模型的具体细节,这会帮助我们更深入地理解如何构建和训练神经网络。

10 神经网络的基本结构

https://zglg.work/pytorch-zero/10/

作者

AI免费学习网(郭震)

发布于

2024-08-10

更新于

2024-08-10

许可协议

分享转发

交流

更多教程加公众号

更多教程加公众号

加入星球获取PDF

加入星球获取PDF

打卡评论