pytorch学习之我的第一个卷积神经网络训练

前言

最近自学pytorch,训练了卷积神经网络,写个博客记录一下,希望能够给初学者带来一点帮助,不对之处也希望大佬能够指正,共同学习进步。

卷积神经网络介绍

相信大噶对于卷积神经网络都有一定的了解,不熟悉的可以查看博客卷积神经网络进行学习。
一般来说卷积神经神经网络包含:输入层、卷积层、激活函数、池化层、全连接层。其作用简而言之就是:不断进行特征的提取和压缩,最终能得到比较高层次特征。然后,利用最后一层特征可以做各种任务:比如分类、回归等。
一般步骤就是:

  1. 定义一个模型;
  2. 预处理输入数据;
  3. 训练模型;
  4. 参数优化;
  5. 模型测试

1、CIFAR10分类

CNN模型

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        # 输入图片为3通道,6个filter,卷积核为5*5,pad默认0,stride默认1
        self.conv1 = nn.Conv2d(3, 6, 5)
        self.pool = nn.MaxPool2d(2, 2)
        self.conv2 = nn.Conv2d(6, 16, 5)
        self.fc1 = nn.Linear(16 * 5 * 5, 120)
        self.fc2 = nn.Linear(120, 84)
        self.fc3 = nn.Linear(84, 10)

    # input->卷积->激活->池化->卷积->激活->池化->特征展平->全连接->激活->全连接->激活->全连接->输出
    def forward(self, x):
        x = self.pool(F.relu(self.conv1(x)))
        x = self.pool(F.relu(self.conv2(x)))
        x = x.v
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您介绍如何使用PyTorch构建一个卷积神经网络进行手写数字图像分类。 和之前一样,您需要一个数据集来训练您的模型,可以使用MNIST数据集。首先,需要导入相关的库: ``` import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim from torchvision import datasets, transforms ``` 接下来,定义一个卷积神经网络模型: ``` class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(1, 32, kernel_size=3) self.conv2 = nn.Conv2d(32, 64, kernel_size=3) self.dropout1 = nn.Dropout2d(0.25) self.dropout2 = nn.Dropout2d(0.5) self.fc1 = nn.Linear(1600, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = F.relu(self.conv1(x)) x = F.relu(self.conv2(x)) x = F.max_pool2d(x, 2) x = self.dropout1(x) x = torch.flatten(x, 1) x = F.relu(self.fc1(x)) x = self.dropout2(x) x = self.fc2(x) return F.log_softmax(x, dim=1) ``` 该模型包括两个卷积层和一个池化层,以及两个Dropout层和两个全连接层。其中,第一个全连接层的输入维度为1600,是因为前面的池化层和卷积层的输出维度为64x5x5=1600。 然后,您可以使用以下代码来定义优化器和损失函数: ``` model = Net() optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) criterion = nn.CrossEntropyLoss() ``` 接下来,使用以下代码来加载数据集、训练和测试模型: ``` transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]) train_dataset = datasets.MNIST('../data', train=True, download=True, transform=transform) test_dataset = datasets.MNIST('../data', train=False, transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=True) epochs = 10 for epoch in range(1, epochs + 1): model.train() for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() if batch_idx % 100 == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item())) model.eval() test_loss = 0 correct = 0 with torch.no_grad(): for data, target in test_loader: output = model(data) test_loss += criterion(output, target).item() pred = output.argmax(dim=1, keepdim=True) correct += pred.eq(target.view_as(pred)).sum().item() test_loss /= len(test_loader.dataset) print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format( test_loss, correct, len(test_loader.dataset), 100. * correct / len(test_loader.dataset))) ``` 在训练过程中,使用测试集来验证模型的性能。 希望这个简单的卷积神经网络模型能够帮助您进行手写数字图像分类任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值