当前位置:   article > 正文

机器学习——python训练CNN模型实战(傻瓜式教学,小学生都可以学会)代码开源_python如何训练cnn网络

python如何训练cnn网络

机器学习实战目录

第一章 python训练线性模型实战

第二章 python训练决策树模型实战

第三章 python训练神经网络模型实战

第四章 python训练支持向量机模型实战

第五章 python训练贝叶斯分类器模型实战

第六章 python训练集成学习模型实战

第七章 python训练聚类模型实战

第八章 python训练KNN模型实战

第九章 python训练CNN模型实战

第十章 python训练RNN模型实战

......(会一直更新)

第九章 python训练CNN模型实战

目录

机器学习实战目录

第九章 python训练CNN模型实战

1. 下载数据集

2. 定义 CNN 模型

3. 训练模型

4. 测试模型

完整代码如下:

参考资料:


训练CNN模型的步骤如下:

1. 下载数据集

可以在各种网站上下载图像数据集,例如 CIFAR10 和 ImageNet。以使用的 CIFAR10 数据集为例,具体步骤如下:

- 安装 torchvision 库:使用以下命令安装 torchvision 库。

  1. ``` python
  2. !pip install torchvision
  3. ```

如果你使用的是 conda,可以使用以下命令来安装 torchvision 库。

  1. ``` python
  2. !conda install torchvision -c pytorch
  3. ```

- 加载数据集:使用以下代码来加载 CIFAR10 数据集。

  1. ``` python
  2. import torch
  3. import torchvision.datasets as datasets
  4. # 加载数据集
  5. train_data = datasets.CIFAR10(root='./data', train=True, download=True)
  6. test_data = datasets.CIFAR10(root='./data', train=False, download=True)
  7. # 将数据转换为 PyTorch 的张量格式
  8. train_data = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)
  9. test_data = torch.utils.data.DataLoader(test_data, batch_size=64, shuffle=True)
  10. ```

2. 定义 CNN 模型

在本例中,我们定义了一个包含三个卷积层和两个全连接层的 CNN 模型,以处理 3 通道的 32x32 图像。

  1. ``` python
  2. import torch.nn as nn
  3. class Net(nn.Module):
  4.     def __init__(self):
  5.         super(Net, self).__init__()
  6.         
  7.         # 定义卷积层
  8.         self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
  9.         self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1)
  10.         self.conv3 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
  11.         
  12.         # 定义全连接层
  13.         self.fc1 = nn.Linear(64 * 4 * 4, 500)
  14.         self.fc2 = nn.Linear(500, 10)
  15.         
  16.     def forward(self, x):
  17.         
  18.         # 卷积层
  19.         x = self.conv1(x)
  20.         x = nn.functional.relu(x)
  21.         x = nn.functional.max_pool2d(x, 2)
  22.         
  23.         x = self.conv2(x)
  24.         x = nn.functional.relu(x)
  25.         x = nn.functional.max_pool2d(x, 2)
  26.         
  27.         x = self.conv3(x)
  28.         x = nn.functional.relu(x)
  29.         x = nn.functional.max_pool2d(x, 2)
  30.         
  31.         # 全连接层
  32.         x = x.view(-1, 64 * 4 * 4)
  33.         x = self.fc1(x)
  34.         x = nn.functional.relu(x)
  35.         x = self.fc2(x)
  36.         
  37.         return x
  38. # 创建模型实例
  39. model = Net()
  40. ```

3. 训练模型

训练 CNN 模型的代码如下所示:

  1. ``` python
  2. import torch.optim as optim
  3. # 定义优化器和损失函数
  4. criterion = nn.CrossEntropyLoss()
  5. optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
  6. # 训练模型
  7. for epoch in range(10):  # 训练 10
  8.     running_loss = 0.0
  9.     for i, data in enumerate(train_data, 0):
  10.         # 获取输入
  11.         inputs, labels = data
  12.         
  13.         # 梯度清零
  14.         optimizer.zero_grad()
  15.         
  16.         # 前向传播,反向传播,优化器更新参数
  17.         outputs = model(inputs)
  18.         loss = criterion(outputs, labels)
  19.         loss.backward()
  20.         optimizer.step()
  21.         
  22.         # 输出统计信息
  23.         running_loss += loss.item()
  24.         if i % 100 == 99:
  25.             print('[%d, %5d] loss: %.3f' %
  26.                   (epoch + 1, i + 1, running_loss / 100))
  27.             running_loss = 0.0
  28. print('Finished Training')
  29. ```

4. 测试模型

对测试集进行推理并计算准确率。

  1. ``` python
  2. correct = 0
  3. total = 0
  4. with torch.no_grad():
  5.     for data in test_data:
  6.         images, labels = data
  7.         outputs = model(images)
  8.         _, predicted = torch.max(outputs.data, 1)
  9.         total += labels.size(0)
  10.         correct += (predicted == labels).sum().item()
  11. print('Accuracy of the network on the 10000 test images: %d %%' % (
  12.     100 * correct / total))
  13. ```

完整代码如下:

  1. ``` python
  2. import torch
  3. import torch.nn as nn
  4. import torch.optim as optim
  5. import torchvision.datasets as datasets
  6. # 加载数据集
  7. train_data = datasets.CIFAR10(root='./data', train=True, download=True)
  8. test_data = datasets.CIFAR10(root='./data', train=False, download=True)
  9. # 将数据转换为 PyTorch 的张量格式
  10. train_data = torch.utils.data.DataLoader(train_data, batch_size=64, shuffle=True)
  11. test_data = torch.utils.data.DataLoader(test_data, batch_size=64, shuffle=True)
  12. # 定义 CNN 模型
  13. class Net(nn.Module):
  14.     def __init__(self):
  15.         super(Net, self).__init__()
  16.         
  17.         # 定义卷积层
  18.         self.conv1 = nn.Conv2d(3, 16, kernel_size=3, stride=1, padding=1)
  19.         self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1)
  20.         self.conv3 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1)
  21.         
  22.         # 定义全连接层
  23.         self.fc1 = nn.Linear(64 * 4 * 4, 500)
  24.         self.fc2 = nn.Linear(500, 10)
  25.         
  26.     def forward(self, x):
  27.         
  28.         # 卷积层
  29.         x = self.conv1(x)
  30.         x = nn.functional.relu(x)
  31.         x = nn.functional.max_pool2d(x, 2)
  32.         
  33.         x = self.conv2(x)
  34.         x = nn.functional.relu(x)
  35.         x = nn.functional.max_pool2d(x, 2)
  36.         
  37.         x = self.conv3(x)
  38.         x = nn.functional.relu(x)
  39.         x = nn.functional.max_pool2d(x, 2)
  40.         
  41.         # 全连接层
  42.         x = x.view(-1, 64 * 4 * 4)
  43.         x = self.fc1(x)
  44.         x = nn.functional.relu(x)
  45.         x = self.fc2(x)
  46.         
  47.         return x
  48. # 创建模型实例
  49. model = Net()
  50. # 定义优化器和损失函数
  51. criterion = nn.CrossEntropyLoss()
  52. optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)
  53. # 训练模型
  54. for epoch in range(10):  # 训练 10
  55.     running_loss = 0.0
  56.     for i, data in enumerate(train_data, 0):
  57.         # 获取输入
  58.         inputs, labels = data
  59.         
  60.         # 梯度清零
  61.         optimizer.zero_grad()
  62.         
  63.         # 前向传播,反向传播,优化器更新参数
  64.         outputs = model(inputs)
  65.         loss = criterion(outputs, labels)
  66.         loss.backward()
  67.         optimizer.step()
  68.         
  69.         # 输出统计信息
  70.         running_loss += loss.item()
  71.         if i % 100 == 99:
  72.             print('[%d, %5d] loss: %.3f' %
  73.                   (epoch + 1, i + 1, running_loss / 100))
  74.             running_loss = 0.0
  75. print('Finished Training')
  76. # 测试模型
  77. correct = 0
  78. total = 0
  79. with torch.no_grad():
  80.     for data in test_data:
  81.         images, labels = data
  82.         outputs = model(images)
  83.         _, predicted = torch.max(outputs.data, 1)
  84.         total += labels.size(0)
  85.         correct += (predicted == labels).sum().item()
  86. print('Accuracy of the network on the 10000 test images: %d %%' % (
  87.     100 * correct / total))
  88. ```

参考资料:

[[1](https://www.python.org/)]

[[2](https://zhuanlan.zhihu.com/p/344562609)]

大家觉得有帮助的话还请大家给个收藏关注鼓励一下,有什么问题评论区留言,看到会恢复哒~

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

闽ICP备14008679号