📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记!
🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流!
- 前言
- 什么是神经网络?
- 基本结构
- 核心概念
- 1. 神经元
- 2. 激活函数
- 3. 前向传播
- PyTorch实战代码
- 1. 定义神经网络
- 2. 训练循环
- 训练流程图
- 损失函数的作用
- 反向传播与梯度下降
- 完整训练示例
- 总结
- 进一步学习方向
前言
神经网络是深度学习的基石,也是人工智能领域最激动人心的技术之一。本文将带你从零开始,理解神经网络的核心概念,并用代码实现一个简单的神经网络模型。
什么是神经网络?
神经网络是一种受人脑神经元结构启发的机器学习模型。它由相互连接的节点(神经元)组成,通过层层传递和处理信息来完成学习任务。
基本结构
核心概念
1. 神经元
每个神经元接收输入,通过权重和偏置计算,最后通过激活函数产生输出:
output = activation(Σ(input × weight) + bias)2. 激活函数
激活函数引入非线性,使网络能够学习复杂的模式。
| 激活函数 | 特点 | 适用场景 |
|---|---|---|
| ReLU | 计算简单,缓解梯度消失 | 隐藏层首选 |
| Sigmoid | 输出在0-1之间 | 二分类输出层 |
| Softmax | 输出概率分布 | 多分类输出层 |
3. 前向传播
前向传播是数据从输入层流向输出层的过程。
PyTorch实战代码
1. 定义神经网络
importtorchimporttorch.nnasnnimporttorch.optimasoptim# 定义一个简单的全连接神经网络classSimpleNet(nn.Module):def__init__(self,input_size,hidden_size,num_classes):super(SimpleNet,self).__init__()# 第一层:输入层到隐藏层self.layer1=nn.Linear(input_size,hidden_size)self.relu=nn.ReLU()# 第二层:隐藏层到输出层self.layer2=nn.Linear(hidden_size,num_classes)defforward(self,x):out=self.layer1(x)out=self.relu(out)out=self.layer2(out)returnout# 初始化模型model=SimpleNet(input_size=784,hidden_size=128,num_classes=10)print(model)2. 训练循环
# 定义损失函数和优化器criterion=nn.CrossEntropyLoss()optimizer=optim.Adam(model.parameters(),lr=0.001)# 训练循环num_epochs=10forepochinrange(num_epochs):forbatch_idx,(data,targets)inenumerate(train_loader):# 前向传播outputs=model(data)loss=criterion(outputs,targets)# 反向传播和优化optimizer.zero_grad()loss.backward()optimizer.step()print(f'Epoch [{epoch+1}/{num_epochs}], Loss:{loss.item():.4f}')训练流程图
损失函数的作用
损失函数衡量模型预测与真实值的差距:
# 常用损失函数示例# 1. 均方误差(回归任务)mse_loss=nn.MSELoss()# 2. 交叉熵(分类任务)cross_entropy=nn.CrossEntropyLoss()# 3. 二元交叉熵(二分类)bce_loss=nn.BCELoss()反向传播与梯度下降
反向传播是训练神经网络的核心算法:
完整训练示例
importtorchimporttorch.nnasnnfromtorch.utils.dataimportDataLoader,TensorDataset# 创建示例数据X=torch.randn(1000,20)# 1000个样本,20个特征y=torch.randint(0,2,(1000,))# 二分类标签# 创建数据加载器dataset=TensorDataset(X,y)train_loader=DataLoader(dataset,batch_size=32,shuffle=True)# 定义模型classBinaryClassifier(nn.Module):def__init__(self):super().__init__()self.network=nn.Sequential(nn.Linear(20,64),nn.ReLU(),nn.Dropout(0.2),nn.Linear(64,32),nn.ReLU(),nn.Linear(32,1),nn.Sigmoid())defforward(self,x):returnself.network(x)# 训练model=BinaryClassifier()optimizer=torch.optim.Adam(model.parameters(),lr=0.001)criterion=nn.BCELoss()forepochinrange(5):epoch_loss=0forX_batch,y_batchintrain_loader:optimizer.zero_grad()predictions=model(X_batch).squeeze()loss=criterion(predictions,y_batch.float())loss.backward()optimizer.step()epoch_loss+=loss.item()print(f'Epoch{epoch+1}, Average Loss:{epoch_loss/len(train_loader):.4f}')总结
通过本文,我们学习了:
- 神经网络的基本结构和组成
- 前向传播和反向传播的原理
- 使用PyTorch构建和训练神经网络
进一步学习方向
- CNN(卷积神经网络):图像处理领域
- RNN/LSTM:序列数据处理
- Transformer:自然语言处理
- GAN(生成对抗网络):图像生成
神经网络的世界非常广阔,继续探索吧!
参考资料:
- PyTorch官方文档
- 《深度学习》- Ian Goodfellow
- CS231n: 卷积神经网络课程
✍️ 坚持用清晰易懂的图解+可落地的代码,让每个知识点都简单直观!
💡座右铭:“道路是曲折的,前途是光明的!”