069. 编写一个函数,实现简单的神经网络模型
在 Python 中,可以使用 TensorFlow
或 PyTorch
这样的深度学习框架来实现简单的神经网络模型。以下我们将分别使用这两个框架来实现一个简单的神经网络模型,用于分类任务。
安装依赖库
在开始之前,请确保你已经安装了 TensorFlow
和 PyTorch
。如果没有安装,可以通过以下命令安装:
pip install tensorflow torch torchvision
示例代码:使用 TensorFlow 实现简单的神经网络
以下代码使用 TensorFlow 和 Keras(TensorFlow 的高级 API)实现一个简单的神经网络模型,用于分类任务。
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
def simple_neural_network_tensorflow():
# 加载 MNIST 数据集
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
# 数据预处理
train_images = train_images.reshape((60000, 28 * 28)).astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28)).astype('float32') / 255
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
# 构建简单的神经网络模型
model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape=(28 * 28,)))
model.add(layers.Dense(10, activation='softmax'))
# 编译模型
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(train_images, train_labels, epochs=5, batch_size=128)
# 评估模型
test_loss, test_acc = model.evaluate(test_images, test_labels)
print(f"测试集准确率: {test_acc:.4f}")
# 示例用法
if __name__ == "__main__":
simple_neural_network_tensorflow()
示例代码:使用 PyTorch 实现简单的神经网络
以下代码使用 PyTorch 实现一个简单的神经网络模型,用于分类任务。
import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms
from torch.utils.data import DataLoader
class SimpleNeuralNetwork(nn.Module):
def __init__(self):
super(SimpleNeuralNetwork, self).__init__()
self.fc1 = nn.Linear(28 * 28, 512)
self.fc2 = nn.Linear(512, 10)
def forward(self, x):
x = x.view(-1, 28 * 28) # 将图像展平
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
def simple_neural_network_pytorch():
# 数据预处理
transform = transforms.Compose([transforms.ToTensor(),
transforms.Normalize((0.5,), (0.5,))])
# 加载 MNIST 数据集
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=128, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=1000, shuffle=False)
# 初始化模型、损失函数和优化器
model = SimpleNeuralNetwork()
criterion = nn.CrossEntropyLoss()
optimizer = optim.RMSprop(model.parameters(), lr=0.001)
# 训练模型
num_epochs = 5
for epoch in range(num_epochs):
model.train()
for images, labels in train_loader:
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
print(f"Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}")
# 评估模型
model.eval()
correct = 0
total = 0
with torch.no_grad():
for images, labels in test_loader:
outputs = model(images)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f"测试集准确率: {100 * correct / total:.2f}%")
# 示例用法
if __name__ == "__main__":
simple_neural_network_pytorch()
代码说明
TensorFlow 示例
数据加载与预处理:
-
使用
mnist.load_data()
加载 MNIST 数据集。 -
将图像数据展平并归一化。
-
将标签转换为 one-hot 编码。
模型构建:
-
使用
Sequential
构建模型。 -
添加全连接层(
Dense
)和激活函数(relu
和softmax
)。
模型编译:使用 rmsprop
优化器和 categorical_crossentropy
损失函数。
模型训练与评估:
-
使用
fit
方法训练模型。 -
使用
evaluate
方法评估模型性能。
PyTorch 示例
数据加载与预处理:
-
使用
torchvision.datasets.MNIST
加载 MNIST 数据集。 -
使用
DataLoader
创建数据加载器。
模型定义:定义一个简单的神经网络模型,包含两个全连接层。
模型训练:
-
使用
CrossEntropyLoss
作为损失函数。 -
使用
RMSprop
作为优化器。 -
在训练过程中,对每个批次的数据进行前向传播、计算损失、反向传播和优化。
模型评估:在测试集上评估模型性能,计算准确率。
示例输出
假设运行上述代码,输出可能如下:
TensorFlow 输出
Epoch 1/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.2538 - accuracy: 0.9248
Epoch 2/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.1041 - accuracy: 0.9667
Epoch 3/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.0712 - accuracy: 0.9768
Epoch 4/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.0533 - accuracy: 0.9824
Epoch 5/5
1875/1875 [==============================] - 5s 3ms/step - loss: 0.0412 - accuracy: 0.9867
313/313 [==============================] - 1s 2ms/step - loss: 0.0789 - accuracy: 0.9824
测试集准确率: 0.9824
PyTorch 输出
Epoch [1/5], Loss: 0.2538
Epoch [2/5], Loss: 0.1041
Epoch [3/5], Loss: 0.0712
Epoch [4/5], Loss: 0.0533
Epoch [5/5], Loss: 0.0412
测试集准确率: 98.24%
注意事项
- 数据预处理:在实际应用中,通常需要对数据进行更复杂的预处理,例如归一化、标准化、数据增强等。
- 模型复杂度:根据任务需求,可以构建更复杂的模型,例如添加更多层、使用卷积层(CNN)等。
- 超参数调整:调整学习率、批次大小、优化器等超参数,以提高模型性能。
- 设备选择:如果有 GPU,可以在 TensorFlow 和 PyTorch 中设置设备,加速训练过程。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)