c#怎么使用cifar 10

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#怎么使用cifar 10相关的知识,希望对你有一定的参考价值。

参考技术A  1 cifar10数据库  60000张32*32 彩色图片 共10类  50000张训练  10000张测试  下载cifar10数据库   这是binary格式的,所以我们要把它转换成leveldb格式。  2 在../caffe-windows/examples/cifar10文件夹中有一个 convert_cifar_data.cpp  将他include到MainCaller.cpp中。如下:    编译....我是一次就通过了 ,在bin文件夹里出现convert_cifar_data.exe。然后 就可以进行格式转换。binary→leveldb  可以在bin文件夹下新建一个input文件夹。将cifar10.binary文件放在input文件夹中,这样转换时就不用写路径了。  cmd进入bin文件夹  执行后,在output文件夹下有cifar_train_leveldb和cifar_test_leveldb两个文件夹。里面是转化好的leveldb格式数据。  当然,也可以写一个bat文件处理,方便以后再次使用。

使用 VGG16 对 CIFAR10 分类

1.定义 dataloader

import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim

# 使用GPU训练,可以在菜单 "代码执行工具" -> "更改运行时类型" 里进行设置
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

transform_train = transforms.Compose([
    transforms.RandomCrop(32, padding=4),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))])

transform_test = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010))])

trainset = torchvision.datasets.CIFAR10(root=‘./data‘, train=True,  download=True, transform=transform_train)
testset  = torchvision.datasets.CIFAR10(root=‘./data‘, train=False, download=True, transform=transform_test)

trainloader = torch.utils.data.DataLoader(trainset, batch_size=128, shuffle=True, num_workers=2)
testloader = torch.utils.data.DataLoader(testset, batch_size=128, shuffle=False, num_workers=2)

classes = (‘plane‘, ‘car‘, ‘bird‘, ‘cat‘,
           ‘deer‘, ‘dog‘, ‘frog‘, ‘horse‘, ‘ship‘, ‘truck‘)

2.VGG 网络定义并初始化

class VGG(nn.Module):
    def __init__(self):
        super(VGG, self).__init__()
        self.cfg = [64, ‘M‘, 128, ‘M‘, 256, 256, ‘M‘, 512, 512, ‘M‘, 512, 512, ‘M‘]
        self.features = self._make_layers(cfg)
        self.classifier = nn.Linear(2048, 10)

    def forward(self, x):
        out = self.features(x)
        out = out.view(out.size(0), -1)
        out = self.classifier(out)
        return out

    def _make_layers(self, cfg):
        layers = []
        in_channels = 3
        for x in cfg:
            if x == ‘M‘:
                layers += [nn.MaxPool2d(kernel_size=2, stride=2)]
            else:
                layers += [nn.Conv2d(in_channels, x, kernel_size=3, padding=1),
                           nn.BatchNorm2d(x),
                           nn.ReLU(inplace=True)]
                in_channels = x
        layers += [nn.AvgPool2d(kernel_size=1, stride=1)]
        return nn.Sequential(*layers)
# 网络放到GPU上
net = VGG().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(net.parameters(), lr=0.001)

3.网络训练

for epoch in range(10):  # 重复多轮训练
    for i, (inputs, labels) in enumerate(trainloader):
        inputs = inputs.to(device)
        labels = labels.to(device)
        # 优化器梯度归零
        optimizer.zero_grad()
        # 正向传播 + 反向传播 + 优化 
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        # 输出统计信息
        if i % 100 == 0:   
            print(‘Epoch: %d Minibatch: %5d loss: %.3f‘ %(epoch + 1, i + 1, loss.item()))

print(‘Finished Training‘)

4.测试验证准确率

correct = 0
total = 0

for data in testloader:
    images, labels = data
    images, labels = images.to(device), labels.to(device)
    outputs = net(images)
    _, predicted = torch.max(outputs.data, 1)
    total += labels.size(0)
    correct += (predicted == labels).sum().item()

print(‘Accuracy of the network on the 10000 test images: %.2f %%‘ % (
    100 * correct / total))

以上是关于c#怎么使用cifar 10的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用 matplotlib 无法正确显示 CIFAR-10 图像?

我使用 CNN 模型创建了 CIFAR10 数据集学习模型。为啥会出现错误?

深度学习基础:5.CIFAR10数据集分类及GPU使用实例

使用 VGG16 对 CIFAR10 分类

CIFAR-10 dataset 的下载与使用

从 cifar-10 数据集加载图像