文章目錄
- 前言
- 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