当前位置:   article > 正文

Python实现深度学习

Python实现深度学习

在Python中实现深度学习,最常用的库是TensorFlow和PyTorch。以下是一个使用PyTorch的简单深度学习模型示例,用于图像分类任务(例如,MNIST手写数字识别)。

首先,确保你已经安装了PyTorch。你可以通过pip安装:

pip install torch torchvision

然后,你可以使用以下代码来创建一个简单的神经网络,训练它,并在测试集上进行评估:

  1. import torch
  2. import torch.nn as nn
  3. import torch.optim as optim
  4. from torchvision import datasets, transforms
  5. # 定义超参数
  6. input_size = 784 # 28x28像素的图像
  7. hidden_size = 500 # 隐藏层的大小
  8. num_classes = 10 # 输出层的神经元数量(0-9的数字)
  9. num_epochs = 5 # 训练轮数
  10. batch_size = 100 # 批处理大小
  11. learning_rate = 0.001 # 学习率
  12. # 转换图像为Tensor并归一化
  13. transform = transforms.Compose([transforms.ToTensor(),
  14. transforms.Normalize((0.5,), (0.5,))])
  15. # 下载和加载MNIST训练集
  16. trainset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=True, transform=transform)
  17. trainloader = torch.utils.data.DataLoader(trainset, batch_size=batch_size, shuffle=True)
  18. # 下载和加载MNIST测试集
  19. testset = datasets.MNIST('~/.pytorch/MNIST_data/', download=True, train=False, transform=transform)
  20. testloader = torch.utils.data.DataLoader(testset, batch_size=batch_size, shuffle=False)
  21. # 定义神经网络模型
  22. class Net(nn.Module):
  23. def __init__(self, input_size, hidden_size, num_classes):
  24. super(Net, self).__init__()
  25. self.fc1 = nn.Linear(input_size, hidden_size)
  26. self.relu = nn.ReLU()
  27. self.fc2 = nn.Linear(hidden_size, num_classes)
  28. def forward(self, x):
  29. out = self.fc1(x)
  30. out = self.relu(out)
  31. out = self.fc2(out)
  32. return out
  33. model = Net(input_size, hidden_size, num_classes)
  34. # 定义损失函数和优化器
  35. criterion = nn.CrossEntropyLoss()
  36. optimizer = optim.Adam(model.parameters(), lr=learning_rate)
  37. # 训练模型
  38. for epoch in range(num_epochs):
  39. for i, (images, labels) in enumerate(trainloader, 0):
  40. # 将图像数据展平
  41. images = images.reshape(-1, 28*28)
  42. # 前向传播
  43. outputs = model(images)
  44. loss = criterion(outputs, labels)
  45. # 反向传播和优化
  46. optimizer.zero_grad()
  47. loss.backward()
  48. optimizer.step()
  49. if (i+1) % 100 == 0:
  50. print (f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{len(trainloader)}], Loss: {loss.item():.4f}')
  51. # 测试模型
  52. correct = 0
  53. total = 0
  54. with torch.no_grad():
  55. for images, labels in testloader:
  56. images = images.reshape(-1, 28*28)
  57. outputs = model(images)
  58. _, predicted = torch.max(outputs.data, 1)
  59. total += labels.size(0)
  60. correct += (predicted == labels).sum().item()
  61. print(f'Accuracy of the network on the 10000 test images: {100 * correct / total}%')

这个代码首先定义了一个简单的全连接神经网络,然后在一个训练循环中训练这个网络。在每个训练步骤中,它都会进行前向传播以计算损失,然后进行反向传播以计算梯度,并最后更新网络的权重。训练完成后,代码会在测试集上评估模型的准确性。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/480472
推荐阅读
相关标签
  

闽ICP备14008679号