import os import time import random import numpy as np import logging import argparse import shutil import torch import torch.backends.cudnn as cudnn import torch.nn as nn import torch.nn.parallel import torch.optim import torch.utils.data import torch.m
时间: 2025-05-13 09:39:14 浏览: 44
### PyTorch深度学习代码示例
以下是基于PyTorch框架的一个完整的深度学习代码实现,涵盖了`numpy`、`logging`、`argparse`、`torch.nn`以及`torch.optim`模块的使用方法。此代码还涉及数据加载与模型训练的过程。
#### 导入必要的库
首先需要导入所需的Python标准库和PyTorch相关模块:
```python
import numpy as np
import logging
import argparse
import torch
from torch import nn, optim
from torch.utils.data import DataLoader, Dataset
```
上述代码片段展示了如何通过`import`语句引入所需的功能模块[^4]。其中,`numpy`用于数值计算;`logging`负责日志记录功能;`argparse`则用来解析命令行参数;而`torch.nn`提供了神经网络构建的基础组件,`torch.optim`则是优化器所在的包。
#### 定义自定义数据集类
为了能够灵活地加载自己的数据,在这里创建了一个继承自`Dataset`的数据集类:
```python
class CustomDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
sample_data = self.data[idx]
label = self.labels[idx]
return sample_data, label
```
这段代码中的`CustomDataset`实现了两个必需的方法——`__len__()`返回数据长度,`__getitem__()`获取指定索引处的数据及其标签[^1]。
#### 构建简单的全连接神经网络模型
下面是一个基本的多层感知机(MLP)结构定义:
```python
class SimpleNN(nn.Module):
def __init__(self, input_dim, hidden_dim, output_dim):
super(SimpleNN, self).__init__()
self.fc1 = nn.Linear(input_dim, hidden_dim)
self.relu = nn.ReLU()
self.fc2 = nn.Linear(hidden_dim, output_dim)
def forward(self, x):
out = self.fc1(x)
out = self.relu(out)
out = self.fc2(out)
return out
```
这里的`SimpleNN`继承了`nn.Module`基类,并重写了其构造函数和前向传播逻辑。它由两层线性变换加ReLU激活组成。
#### 设置超参数及初始化模型实例
接着设置一些全局性的配置项并将它们传递给后续操作:
```python
parser = argparse.ArgumentParser(description='PyTorch Training Example')
parser.add_argument('--batch-size', type=int, default=64, metavar='N',
help='input batch size for training (default: 64)')
args = parser.parse_args()
device = 'cuda' if torch.cuda.is_available() else 'cpu'
model = SimpleNN(input_dim=784, hidden_dim=128, output_dim=10).to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
```
利用`argparse`可以方便地接受来自终端用户的输入选项[^2]。同时判断是否有可用GPU设备加速运算过程。最后实例化前面设计好的神经网络架构并指定了损失函数与优化算法。
#### 加载数据并执行训练循环
准备完毕之后就可以正式进入训练环节了:
```python
def load_data():
X_train = np.random.rand(1000, 784) * 255.
y_train = np.random.randint(0, high=9, size=(1000,))
dataset = CustomDataset(X_train.astype(np.float32), y_train.astype(np.int64))
dataloader = DataLoader(dataset, batch_size=args.batch_size, shuffle=True)
return dataloader
dataloader = load_data()
for epoch in range(10): # loop over the dataset multiple times
running_loss = 0.0
for i, data in enumerate(dataloader, 0):
inputs, labels = data[0].to(device), data[1].to(device)
optimizer.zero_grad()
outputs = model(inputs.view(-1, 784)) # reshape tensor to match expected dimensions
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
if i % 10 == 9: # print every 10 mini-batches
logging.info(f'[Epoch {epoch + 1}, Batch {i + 1}] Loss: {running_loss / 10}')
running_loss = 0.0
```
以上脚本完成了整个训练流程的设计,包括但不限于批量读取样本、清零梯度缓冲区、正向传播预测值、反向传播更新权重等核心步骤[^3]。
---
阅读全文
相关推荐
















