文章目录
- 前言
- 1. 神经网络基础概念
- 1.1 神经元
- 1.2 激活函数
- 1.3 神经网络结构
- 1.4 安装 Python
- 1.5 选择开发环境
- 2. 使用numpy构建简单神经网络
- 3. 使用PyTorch构建复杂神经网络
前言
本教程旨在为广大初学者和有一定基础的开发者提供一个系统、全面且深入的 Python 神经网络学习指南。无论你是对人工智能充满好奇的新手,还是希望在神经网络领域进一步提升技能的从业者,都能从本教程中找到适合自己的内容。
Python 作为一种功能强大、易于学习且应用广泛的编程语言,在神经网络领域中扮演着举足轻重的角色。它拥有丰富的科学计算和深度学习库,如 NumPy、PyTorch、TensorFlow 等,为开发者提供了便捷的工具和高效的开发环境。借助 Python,我们可以轻松地构建、训练和部署各种复杂的神经网络模型。
1. 神经网络基础概念
1.1 神经元
神经元是神经网络的基本单元,它接收多个输入,对输入进行加权求和,再通过一个激活函数处理后输出。
1.2 激活函数
激活函数为神经网络引入非线性因素,使网络能够学习复杂的模式。常见的激活函数有 Sigmoid、ReLU、Tanh 等。
1.3 神经网络结构
神经网络通常由输入层、隐藏层和输出层组成。隐藏层可以有多个,层数越多,网络越复杂,能学习的模式也越复杂。
1.4 安装 Python
访问 Python 官方网站,根据你的操作系统(Windows、Mac 或 Linux)下载并安装 Python 3.x 版本。安装时勾选 “Add Python to PATH”,方便在命令行中使用 Python。
Python 3.7安装教程:https://blog.csdn.net/u014164303/article/details/145620847
Python 3.9安装教程:https://blog.csdn.net/u014164303/article/details/145570561
Python 3.11安装教程:https://blog.csdn.net/u014164303/article/details/145549489
1.5 选择开发环境
下载 PyCharm 社区版(免费)或专业版(需付费或申请教育版)。安装完成后,打开 PyCharm,创建一个新的项目,在项目设置中选择之前创建的虚拟环境作为项目的 Python 解释器。PyCharm 功能强大,提供代码自动补全、调试等功能,适合开发大型项目。
Pycharm安装教程:https://blog.csdn.net/u014164303/article/details/145674773
PyCharm下载地址:https://pan.quark.cn/s/5756c8cf8b2a
2. 使用numpy构建简单神经网络
以下是一个使用numpy构建的简单两层神经网络示例,用于解决二分类问题。
import numpy as np# 定义激活函数及其导数
def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):return x * (1 - x)# 输入数据集
X = np.array([[0, 0, 1],[0, 1, 1],[1, 0, 1],[1, 1, 1]])# 输出数据集
y = np.array([[0], [1], [1], [0]])# 设置随机数种子以保证结果可复现
np.random.seed(1)# 初始化权重
syn0 = 2 * np.random.random((3, 4)) - 1
syn1 = 2 * np.random.random((4, 1)) - 1# 训练次数
for iter in range(60000):# 前向传播l0 = Xl1 = sigmoid(np.dot(l0, syn0))l2 = sigmoid(np.dot(l1, syn1))# 计算误差l2_error = y - l2# 根据误差调整权重l2_delta = l2_error * sigmoid_derivative(l2)l1_error = l2_delta.dot(syn1.T)l1_delta = l1_error * sigmoid_derivative(l1)syn1 += l1.T.dot(l2_delta)syn0 += l0.T.dot(l1_delta)print("Output After Training:")
print(l2)
3. 使用PyTorch构建复杂神经网络
PyTorch是一个广泛使用的深度学习框架,下面是一个使用PyTorch构建简单全连接神经网络进行手写数字识别的示例。
3.1 安装PyTorch
根据自己的系统和 CUDA 版本,从PyTorch 官方网站选择合适的安装命令进行安装。
3.2 代码示例
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.1307,), (0.3081,))
])# 加载训练集和测试集
train_dataset = datasets.MNIST(root='./data', train=True,download=True, transform=transform)
test_dataset = datasets.MNIST(root='./data', train=False,download=True, transform=transform)# 创建数据加载器
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)# 定义神经网络模型
class SimpleNet(nn.Module):def __init__(self):super(SimpleNet, self).__init__()self.fc1 = nn.Linear(28 * 28, 128)self.fc2 = nn.Linear(128, 64)self.fc3 = nn.Linear(64, 10)self.relu = nn.ReLU()def forward(self, x):x = x.view(-1, 28 * 28)x = self.relu(self.fc1(x))x = self.relu(self.fc2(x))x = self.fc3(x)return x# 初始化模型、损失函数和优化器
model = SimpleNet()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)# 训练模型
def train(model, train_loader, criterion, optimizer, epoch):model.train()for batch_idx, (data, target) in enumerate(train_loader):optimizer.zero_grad()output = model(data)loss = criterion(output, target)loss.backward()optimizer.step()if batch_idx % 100 == 0:print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(epoch, batch_idx * len(data), len(train_loader.dataset),100. * batch_idx / len(train_loader), loss.item()))# 测试模型
def test(model, test_loader):model.eval()test_loss = 0correct = 0with torch.no_grad():for data, target in test_loader:output = model(data)test_loss += criterion(output, target).item()pred = output.argmax(dim=1, keepdim=True)correct += pred.eq(target.view_as(pred)).sum().item()test_loss /= len(test_loader.dataset)print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(test_loss, correct, len(test_loader.dataset),100. * correct / len(test_loader.dataset)))# 训练和测试模型
for epoch in range(1, 5):train(model, train_loader, criterion, optimizer, epoch)test(model, test_loader)
```c