来一段能跑的深度学习代码
时间: 2024-09-10 15:08:29 浏览: 35
下面是一个简单的Python代码示例,使用PyTorch框架创建了一个深度学习模型,用于分类MNIST手写数字数据集。这是一个可以运行的简单神经网络,训练过程中使用了随机梯度下降(SGD)优化器和交叉熵损失函数。
```python
# 导入所需库
import torch
import torch.nn as nn
from torchvision import datasets, transforms
# 定义模型
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(784, 50)
self.fc2 = nn.Linear(50, 10)
def forward(self, x):
x = x.view(-1, 784)
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# 设置超参数和数据加载
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))])
train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)
# 创建模型实例
model = Net()
# 损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
# 训练过程
for epoch in range(10): # 总共10个epoch
for i, (images, labels) in enumerate(train_loader):
# 假设我们有一个GPU可用
if torch.cuda.is_available():
images, labels = images.to('cuda'), labels.to('cuda')
# 前向传播
outputs = model(images)
loss = criterion(outputs, labels)
# 反向传播和优化
optimizer.zero_grad() # 清零梯度
loss.backward() # 反向传播求梯度
optimizer.step() # 更新权重
# 打印进度条信息
print(f'Epoch [{epoch+1}/{10}], Step [{i+1}/{len(train_loader)}], Loss: {loss.item():.4f}')
# 预测和评估
test_dataset = datasets.MNIST(root='./data', train=False, transform=transform)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False)
# ... (在这里添加测试代码)
```