【PyTorch】2.2 使用Pytorch构建一个分类器(使用真实数据集CIFAR10)

【深度学习】pytorch——实现CIFAR-10数据集的分类 CIFAR-10是一个常用的图像分类数据集,每张图片都是 3×32×32,3通道彩色图片,分辨率为 32×32。 它包含了10个不同类别,每个类别有6000张图像,其中5000张用于训练,1000张用于测试。这10个类别分别为:飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、船和卡车。 阅读详情

2.2 使用Pytorch构建一个分类器

学习目标

  • 了解分类器的任务和数据样式
  • 掌握如何使用Pytorch实现一个分类器

分类器任务和数据介绍

  • 构建一个将不同图像进行分类的神经网络分类器,对输入的图片进行判断并完成分类
  • 本案例采用CIFAR0数据集作为原始图片数据
CIFAR10数据集介绍
  • 数据集中每张图片的尺寸是33232,代表彩色3通道
  • CIFAR10数据集共有10种不同的分类,分别是:airplane automobile bird cat deer dog frog horse ship truck
训练分类器步骤
  • 1:使用torchvision下载CIFAR10数据集
  • 2:定义卷积神经网络
  • 3:定义损失函数
  • 4:在训练集上训练模型
  • 5:在测试集上测试模型
1:使用torchvision下载CIFAR10数据集
  • 导入torchvision包来辅助下载数据集
import torch
import torchvision
import torchvision.transforms as transforms
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
#下载数据集并对图片进行调整,因为torchvision数据集的输出是PILImage格式,数据域在[0,1]
#我们将其转换成标准数据域[-1,1]的张量格式
#transform 数据转换器
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)
# 下载下来的数据放在trainset里面
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=2)
# DataLoader数据迭代器 将数据封装成DataLoader
# num_workers:两个线程读取数据
# batch_size=4 批处理

testset=torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform)
testloader=torch.utils.data.DataLoader(testset,batch_size=4,shuffle=False,num_workers=2)
classes=('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')
#输出
Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data\cifar-10-python.tar.gz
100.0%
Extracting ./data\cifar-10-python.tar.gz to ./data
Files already downloaded and verified

在这里插入图片描述注意:

可能存在的两个问题:

  • windows系统下运行上述代码,并且出现报错信息“BrokenPipeError”时,可以尝试将torch.utils.DataLoader()中的num_workers设置为0
  • 下载CIFAR10数据集报错:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certi
  • 尽量使用linux系统学习深度学习
展示若干训练集的图片

在此处遇到问题可以访问我之前写的一篇文章

import torch
import torchvision
import torchvision.transforms as transforms
import ssl
import torch.utils.data as Data
ssl._create_default_https_context = ssl._create_unverified_context
#下载数据集并对图片进行调整,因为torchvision数据集的输出是PILImage格式,数据域在[0,1]
#我们将其转换成标准数据域[-1,1]的张量格式
#transform 数据转换器
transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)
# 下载下来的数据放在trainset里面
trainloader=torch.utils.data.DataLoader(dataset=trainset,batch_size=4,shuffle=True,num_workers=2)
# DataLoader数据迭代器 将数据封装成DataLoader
# num_workers:两个线程读取数据
# batch_size=4 批处理

testset=torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform)
testloader=torch.utils.data.DataLoader(dataset=testset,batch_size=4,shuffle=False,num_workers=2)
classes=('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

#展示若干训练集的图片
#导入画图包和numpy
import matplotlib.pyplot as plt
import numpy as np

#构建展示图片的函数
def imShow(img):
    img=img/2+0.5
    #img是tensor类型的数据,tensor类型转换成numpy类型的数据
    npimg=img.numpy()
    plt.imshow(np.transpose(npimg,(1,2,0)))#维度转换成 1 2 0 这三个维度
    plt.show()

#从数据迭代器中读取一张图片
if __name__ == '__main__':
    try:
        dataiter = iter(trainloader)
        images, labels = dataiter.next()

        # 展示图片
        imShow(torchvision.utils.make_grid(images))
        # 使用网格的形式展示图片
        # 打印标签label
        print(' '.join('%5s' % classes[labels[j]] for j in range(4)))
    except Exception as e:
        print(e)
#输出
dog horse   cat   cat

在这里插入图片描述

定义卷积神经网络

仿照2.1节中的类来构造此处的类,唯一的区别在于次数采用的三通道 3-channel

import torch.nn as nn
import torch.nn.functional as F

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        #定义两个卷积层
        self.conv1=nn.Conv2d(3,6,5)
        self.conv2=nn.Conv2d(6,16,5)
        #定义池化层
        self.pool = nn.MaxPool2d(2, 2)
        #定义全连接层
        self.fc1=nn.Linear(16*5*5,120)
        self.fc2=nn.Linear(120,84)
        self.fc3=nn.Linear(84,10)

    def forward(self,x):
        x=self.pool(F.relu(self.conv1(x)))
        x=self.pool(F.relu(self.conv2(x)))
        #变换x的形状 以适配全连接层的输入
        x=x.view(-1,16*5*5)
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
        return x
net=Net()
print(net)
3: 定义损失函数

采用交叉熵损失函数和随机梯度下降优化器

#交叉熵损失函数和随机梯度下降优化器
import torch.optim as optim
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)
4: 在训练集上训练模型

采用基于梯度下降的优化算法,都需要很多个轮次的迭代训练

import torch.nn as nn
import torch.nn.functional as F
import torchvision
import torch
import torchvision.transforms as transforms

transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=0)
class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        #定义两个卷积层
        self.conv1=nn.Conv2d(3,6,5)
        self.conv2=nn.Conv2d(6,16,5)
        #定义池化层
        self.pool = nn.MaxPool2d(2, 2)
        #定义全连接层
        self.fc1=nn.Linear(16*5*5,120)
        self.fc2=nn.Linear(120,84)
        self.fc3=nn.Linear(84,10)

    def forward(self,x):
        x=self.pool(F.relu(self.conv1(x)))
        x=self.pool(F.relu(self.conv2(x)))
        #变换x的形状 以适配全连接层的输入
        x=x.view(-1,16*5*5)
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
        return x
net=Net()
print(net)

#交叉熵损失函数和随机梯度下降优化器
import torch.optim as optim
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)

for epoch in range(2):
    running_loss=0.0
    for i ,data in enumerate(trainloader,0):
        #data 中包含输入图像张量inputs,标签张量labels
        inputs,labels=data

        #首先将优化器梯度归零
        optimizer.zero_grad()

        #输入图像张量进网络,得到输出张量outputs
        outputs=net(inputs)

        #利用网络的输出outputs和标签labels计算损失值
        loss=criterion(outputs,labels)

        #反向传播+参数更新,是标准的代码流程
        loss.backward()
        optimizer.step()

        #打印轮次和损失值
        running_loss+=loss.item()
        if (i+1)%2000==0:
            print('[%d , %5d] loss: %.3f'%(epoch+1,i+1,running_loss/2000))
            running_loss=0.0
print("Finished Training")
  • 输出结果
[1 ,  2000] loss: 2.220
[1 ,  4000] loss: 1.859
[1 ,  6000] loss: 1.658
[1 ,  8000] loss: 1.570
[1 , 10000] loss: 1.512
[1 , 12000] loss: 1.436
[2 ,  2000] loss: 1.373
[2 ,  4000] loss: 1.367
[2 ,  6000] loss: 1.340
[2 ,  8000] loss: 1.303
[2 , 10000] loss: 1.312
[2 , 12000] loss: 1.277
Finished Training
  • 保存模型
#首先设定模型的保存路径
PATH='./cifar_net.pth'
torch.save(net.state_dict(),PATH)
5:在测试集上测试模型
  • 第一步,展示测试集中的若干图片
dataiter=iter(testloader)
images,labels=dataiter.next()

#打印原始图片
imShow(torchvision.utils.make_grid(images))
#打印真实的标签
print('GroundTruth:',' '.join('%5s' %classes[labels[j]] for j in range(4)))

【完整版本代码】

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

transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=0)

testset=torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform)
testloader=torch.utils.data.DataLoader(testset,batch_size=4,shuffle=True,num_workers=0)

classes=('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

def imShow(img):
    img=img/2+0.5
    #img是tensor类型的数据,tensor类型转换成numpy类型的数据
    npimg=img.numpy()
    plt.imshow(np.transpose(npimg,(1,2,0)))#维度转换成 1 2 0 这三个维度
    plt.show()

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        #定义两个卷积层
        self.conv1=nn.Conv2d(3,6,5)
        self.conv2=nn.Conv2d(6,16,5)
        #定义池化层
        self.pool = nn.MaxPool2d(2, 2)
        #定义全连接层
        self.fc1=nn.Linear(16*5*5,120)
        self.fc2=nn.Linear(120,84)
        self.fc3=nn.Linear(84,10)

    def forward(self,x):
        x=self.pool(F.relu(self.conv1(x)))
        x=self.pool(F.relu(self.conv2(x)))
        #变换x的形状 以适配全连接层的输入
        x=x.view(-1,16*5*5)
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
        return x
net=Net()
print(net)

#交叉熵损失函数和随机梯度下降优化器
import torch.optim as optim
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)

# for epoch in range(2):
#     running_loss=0.0
#     for i ,data in enumerate(trainloader,0):
#         #data 中包含输入图像张量inputs,标签张量labels
#         inputs,labels=data
#
#         #首先将优化器梯度归零
#         optimizer.zero_grad()
#
#         #输入图像张量进网络,得到输出张量outputs
#         outputs=net(inputs)
#
#         #利用网络的输出outputs和标签labels计算损失值
#         loss=criterion(outputs,labels)
#
#         #反向传播+参数更新,是标准的代码流程
#         loss.backward()
#         optimizer.step()
#
#         #打印轮次和损失值
#         running_loss+=loss.item()
#         if (i+1)%2000==0:
#             print('[%d , %5d] loss: %.3f'%(epoch+1,i+1,running_loss/2000))
#             running_loss=0.0
# print("Finished Training")
#
# #保存模型
# #首先设定模型的保存路径
# PATH='./cifar_net.pth'
# torch.save(net.state_dict(),PATH)

dataiter=iter(testloader)
images,labels=dataiter.next()

#打印原始图片
imShow(torchvision.utils.make_grid(images))
#打印真实的标签
print('GroundTruth:',' '.join('%5s' %classes[labels[j]] for j in range(4)))
  • 第二步,加载模型并对测试图片进行预测
import torch.nn as nn
import torch.nn.functional as F
import torchvision
import torch
import numpy as np
import matplotlib.pyplot as plt
import torchvision.transforms as transforms

transform=transforms.Compose([transforms.ToTensor(),transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
trainset=torchvision.datasets.CIFAR10(root='./data',train=True,download=True,transform=transform)
trainloader=torch.utils.data.DataLoader(trainset,batch_size=4,shuffle=True,num_workers=0)

testset=torchvision.datasets.CIFAR10(root='./data',train=False,download=True,transform=transform)
testloader=torch.utils.data.DataLoader(testset,batch_size=4,shuffle=True,num_workers=0)

classes=('airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

def imShow(img):
    img=img/2+0.5
    #img是tensor类型的数据,tensor类型转换成numpy类型的数据
    npimg=img.numpy()
    plt.imshow(np.transpose(npimg,(1,2,0)))#维度转换成 1 2 0 这三个维度
    plt.show()

class Net(nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        #定义两个卷积层
        self.conv1=nn.Conv2d(3,6,5)
        self.conv2=nn.Conv2d(6,16,5)
        #定义池化层
        self.pool = nn.MaxPool2d(2, 2)
        #定义全连接层
        self.fc1=nn.Linear(16*5*5,120)
        self.fc2=nn.Linear(120,84)
        self.fc3=nn.Linear(84,10)

    def forward(self,x):
        x=self.pool(F.relu(self.conv1(x)))
        x=self.pool(F.relu(self.conv2(x)))
        #变换x的形状 以适配全连接层的输入
        x=x.view(-1,16*5*5)
        x=F.relu(self.fc1(x))
        x=F.relu(self.fc2(x))
        x=self.fc3(x)
        return x
# net=Net()
# print(net)

#交叉熵损失函数和随机梯度下降优化器
import torch.optim as optim
criterion=nn.CrossEntropyLoss()
# optimizer=optim.SGD(net.parameters(),lr=0.001,momentum=0.9)

# for epoch in range(2):
#     running_loss=0.0
#     for i ,data in enumerate(trainloader,0):
#         #data 中包含输入图像张量inputs,标签张量labels
#         inputs,labels=data
#
#         #首先将优化器梯度归零
#         optimizer.zero_grad()
#
#         #输入图像张量进网络,得到输出张量outputs
#         outputs=net(inputs)
#
#         #利用网络的输出outputs和标签labels计算损失值
#         loss=criterion(outputs,labels)
#
#         #反向传播+参数更新,是标准的代码流程
#         loss.backward()
#         optimizer.step()
#
#         #打印轮次和损失值
#         running_loss+=loss.item()
#         if (i+1)%2000==0:
#             print('[%d , %5d] loss: %.3f'%(epoch+1,i+1,running_loss/2000))
#             running_loss=0.0
# print("Finished Training")
#
# #保存模型
# #首先设定模型的保存路径
PATH='./cifar_net.pth'
# torch.save(net.state_dict(),PATH)

dataiter=iter(testloader)
images,labels=dataiter.next()

#打印原始图片
imShow(torchvision.utils.make_grid(images))
#打印真实的标签
print('GroundTruth:',' '.join('%5s' %classes[labels[j]] for j in range(4)))

#第二步,加载模型并对测试图片进行预测
#首先实例化模型的类对象
net=Net()
#加载训练阶段保存好的模型的状态字典
net.load_state_dict(torch.load(PATH))

#利用模型对图片进行预测
outputs=net(images)

#共有10个类别,采用模型计算出的概率最大的作为预测的类别
_,predicted=torch.max(outputs,1)
print("predicted:",predicted)

#打印预测标签的结果
print("Predicted:",' '.join('%5s' % classes[predicted[j]] for j in range(4)))
  • 输出
GroundTruth:  ship  frog  bird automobile
predicted: tensor([0, 2, 8, 1])
Predicted: airplane  bird  ship automobile
  • 训练好的模型在全部测试集上的表现
#在全部测试集上的表现
correct=0
total=0
with torch.no_grad():
    for data in testloader:
        images,labels=data
        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:%d %%"%(100*correct/total))
#输出
 Accuracy of the network on the 10000 test images:56 %
  • 分析:对于拥有10个类被的数据集,随机猜测的准确率是10%,模型达到了53%,说明模型学到了真实的东西。
    上面计算的是模型在总体测试集上的准确率,为了更加细致多看一些模型在哪些类别上表现更好,在哪些类别上表现更差,可以对每个类别的准确率进行计算。
#在全部测试集上的表现
correct=0
total=0
class_correct=[0. for i in range(10)]
class_total=[0 for i in range(10)]
max_index=-1
min_index=1000
with torch.no_grad():
    for data in testloader:
        images,labels=data
        outputs=net(images)
        _,predicted=torch.max(outputs.data,1)
        total+=labels.size(0)
        correct+=(predicted==labels).sum().item()
        for i in range(labels.size(0)):
            class_correct[labels[i]]+=(predicted[i]==labels[i])
            class_total[labels[i]]+=1
print("Accuracy of the network on the 10000 test images:%d %%"%(100*correct/total))
# print(class_total)
# print(class_correct)
#打印不同类别的准确度
for i in range(10):
    print("Accuracy of ",classes[i], ":",100*class_correct[i].item()/class_total[i],"%")
#输出
Accuracy of the network on the 10000 test images:56 %
Accuracy of  airplane : 59.4 %
Accuracy of  automobile : 70.2 %
Accuracy of  bird : 30.1 %
Accuracy of  cat : 38.6 %
Accuracy of  deer : 59.1 %
Accuracy of  dog : 35.4 %
Accuracy of  frog : 70.7 %
Accuracy of  horse : 68.3 %
Accuracy of  ship : 69.2 %
Accuracy of  truck : 67.6 %

在GPU上训练模型

为了真正利用Pytorch中Tensor的优秀属性,加速模型的训练,可以将训练过程转移到GPU上进行。
首先,定义设备,如果CUDA是可用的则被定义成GPU,否则被定义成CPU
将模型放在GPU上训练分两步走:
1:将模型转移到GPU上
2:将数据转移到GPU上

device=torch.device('cuda:0' if torch.cuda.is_available() else "cpu")
print(device)

#当训练模型的时候,只需要将模型转移到GPU上满天星将输入的图片和标签页转移到GPU上即可
net.to(device)

#将输入的图片张量和标签张量转移到GPU上
inputs,labels=data[0].to(device),data[1].to(device)

【小节总结】

学习了分类器的任务和数据样式
  • 将不同图像进行分类的神经网络分类器,对输入的图片进行判断并完成分类
  • 采用CIFAR10数据集作为原始图片数据,CIFAR10数据集拥有10个类别的33232彩色图片
学习了训练分类器的步骤
  • 使用torchvision下载CIFAR10数据集
  • 定义卷积神经网络
  • 定义损失函数
  • 在训练集上训练模型
  • 在测试集上测试模型
学习了在GPU上训练模型
  • 首先需要定义设备,CPU和GPU二选一
    device=torch.device('cuda:0' if torch.cuda.is_available() else "cpu")
  • 然后将模型转移到GPU上去
    net.to(device)
  • 最后在迭代训练的过程中,每一步都将图片和标签张量转移到GPU上去
    inputs,labels=data[0].to(device),data[1].to(device)
PyTorch项目笔记(二)CIFAR-10图像分类 本文将在CIFAR10的基础上介绍如何处理数据、图像分类以及使用GPU加速模型训练。 阅读详情

相关推荐

pytorch学习(一)利用pytorch训练一个最简单的分类器-------(基于CIFAR10数据集)的句句讲解

刚学pytorch两周,利用这个分类器学习pytorch的如何运用 训练一个分类网络分为以下几个步骤: 1数据的加载及预处理 2网络模型的设置 3.定义损失函数及优化器 4.用训练集训练网络 5.用测试集测试网络 1.数据的加载及预处理 1.加载数据集(训练集和测试集) 2.扩充数据集防止过拟合 2.网络模型的设置 网络模型的设置主要是网络结构的设置: 本次我们使用的是简单的一个类网络的简单设置 ...

sinat_42239797的博客 1万+

CIFAR-10 分类 pytorch

前言 上一篇博客挖了个坑,准备使用cifar-10来进行演示。 再加上加载预训练模型ResNet, 其实Pytorch的torchvision.models没有参数可以设置不要模型最后的分类头,个人感觉有点不方便, 之前用keras写是有的。 代码 import torch import torchvision from torch.utils.data import DataLoader import torch.nn.functional as F import torch.nn as nn impo

andy dennis的博客 4819

pytorch搭建分类器分类CIFAR10

pytorch对CIFAR10进行分类 最近实验室的项目需要用到pytorch,pytorch也是目前最流行的深度学习框架之一,非常简单好用,这次就使用pytorch搭建一个简单的卷积神经网络用于CIFAR10的分类任务。 对于一个有监督的分类任务,大概的训练过程是: 加载数据,包括测试数据和训练数据,数据包括数据本身和标签 定义一个网络,其中包括卷积层,池化层,全连接层,激活层等等 将输入数...

江湖大梦的Blog 775

使用Pytorch构建一个分类器(CIFAR10模型)

分类器任务和数据介绍 ·构建一个将不同图像进行分类的神经网络分类器,对输入的的图片进行判别并完成分类。 ·本案例采用CIFAR10数据集作为原始图片数据 ·CIFAR10数据集介绍:数据集中每张图片的尺寸是3*32*32,代表彩色3通道 ·CIFAR10数据集共有10种不同的分类,分别是"airplane","automobile","bird","cat","deer","dog","frog","horse","ship","truck". ·CIFAR10数据集的样例如下图所示 .

weixin_57231611的博客 2570

使用 PyTorch 进行深度学习-训练分类器

之前的内容已经学习了如何定义神经网络、计算损失和更新网络的权重。 现在我们可以完整的训练一个分类器。 我们将按顺序执行以下步骤: 使用加载和规范化 CIFAR10 训练和测试数据集 torchvision 定义卷积神经网络 定义损失函数 在训练数据上训练网络 在测试数据上测试网络 1、获取数据 通常,当我们必须处理图像、文本、音频或视频数据时, 可以使用将数据加载到 numpy 数组中的标准 python 包。 然后将此数组转换为 torch.*Tensor类型。 对于图像,Pillow、O

2471

Pytorch应用:构建分类器

Pytorch应用:构建分类器学习目标1. 分类器任务和数据介绍2. 训练分类器的步骤2.1 使用torchvision下载CIFAR10数据集2.2 定义卷积神经网络2.3 定义损失函数2.4 在训练集上训练模型2.5 保存模型3. 在测试集上测试模型3.1 展示测试集中的若干图片3.2 加载模型并对测试图片进行预测3.3 全部测试集预测表现3.4 分类别模型准确率计算3.5 在GPU上训练模型4. 总结 学习目标 了解分类器的任务和数据样式 掌握如何用Pytorch实现一个分类器 1. 分类器任务

全网粉丝30W+,优快云、稀土掘金人工智能领域签约作者,人工智能、大模型、Python 爬虫,商务合作,请私信沟通。 1301

CIFAR10数据集完整使用教程

CIFAR10数据集完整教程

m0_67821723的博客 5635

【AI知识点】启发式算法(Heuristic Algorithms)

启发式算法(Heuristic Algorithms) 是一种基于经验、直觉和局部优化的求解问题的算法,尤其适用于解决计算复杂度高、规模庞大的问题。它们通过简化问题、局部搜索和快速近似,提供了一种在短时间内获得“足够好”解的途径。虽然启发式算法无法保证全局最优解,但它们在实际应用中广泛使用,特别是在优化问题、任务调度和机器学习等领域。

AI完全体 3034

用Pytorch搭建LeNet-5模型且基于CIFAR-10数据集训练

博客中的实例是Pytorch官方的一个demo,这里我结合最近正在看的书《Python深度学习 基于Pytorch》P125 Pytorch实现CIFAR-10多分类这节,进行了梳理与个人的总结,以加深自己的理解。 目的: ①了解LeNet-5模型 ②加深Pytorch的学习 ③从头至尾介绍搭建网络并进行训练预测的全过程 LeNet-5模型 1.模型架构 LeNet-5模型结构为输入层–卷积层–池化层–卷积层–池化层–全连接层–全连接层–输出,为串联模式,如上图所示 2.模型特点 a.每个卷积层包含3个部

boss-dog 6278

基于stm32f407VGT6控制WS2812的TIM1+PWM+DMA实现方式

项目中使用到了ws2812灯带,作为产品的外观显示灯,经过开发之后,整理一下,仅供大家参考。 WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。 其外型与一个5050 LED灯珠相同, 每个元件即为一个像素点。 像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路, 还包含有高精度的内部振荡器和可编程定电流控制部分, 有效保证了像素点光的颜色高度一致。数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素

weixin_43608153的博客 9214

深度学习|卷积神经网络

介绍卷积神经网络基本理论,包括卷积层、池化层和全连接层,并阐述LeNet卷积神经网络的构建过程。

weixin_58243219的博客 5728

Pytorch | 从零构建ResNet对CIFAR10进行分类

用Pytorch从零构建ResNet对CIFAR10进行分类

四口鲸鱼爱吃盐的博客 3301

c++实现异步线程池并详细分析线程池析构流程

多线程编程是提高程序性能和响应能力的关键技术之一,异步线程池作为多线程编程的一种有效实现方式,能够管理和复用线程资源,避免频繁创建和销毁线程带来的开销。在本文中,我们将深入探讨如何实现一个异步线程池。

2301_76564925的博客 1599

Pytorch | 从零构建GoogleNet对CIFAR10进行分类

使用Pytorch从零构建GoogleNet(或称GoogleNet-BN, Inception v2)对CIFAR10进行分类

四口鲸鱼爱吃盐的博客 3122

海康视觉平台VisionMaster实战入门:从通讯配置到工具应用

本文为海康VisionMaster视觉平台实战入门指南,详细介绍了从软件安装准备、与PLC等外部设备的通讯配置,到匹配定位、测量、畸变矫正等核心工具的应用方法。通过实战案例拆解,帮助工程师快速掌握如何搭建完整的机器视觉检测与引导定位系统,实现工业自动化项目落地。

weixin_29224309的博客 1021

部署与可视化系统:移动端跟踪系统:YOLOv8 + ByteTrack 结合 Android CameraX 实现实时行人计数 App

本文详细介绍了在Android移动端实现实时行人检测、跟踪与计数系统的完整方案。系统采用YOLOv8+ByteTrack技术栈,基于NCNN推理引擎,无需云端算力即可在手机端侧完成全流程处理。文章从技术选型、系统架构、CameraX集成等多个维度进行深入解析,重点阐述了移动端部署面临的工程挑战和优化策略。通过四层管道模型设计,实现了从图像采集到目标跟踪的高效处理流程,并采用C++ NDK开发确保性能。该系统在中端手机上可达到10FPS,旗舰机型可达30FPS,为移动端实时目标跟踪提供了可落地的解决方案。

ZXSXJ的博客 94

【Pytorch教程】08-如何使用PyTorch训练简单CIFAR10图片分类器(保姆级)

想快速学会如何使用 PyTorch 训练一个卷积神经网络的主要步骤吗?本篇博文以 CIFAR10 数据集为例,手把手教你如何使用 PyTorch 框架训练,并测试。

Sihang_Xie的博客 2849

​网格划分理论:CFD理论67 网格划分-三大理论问题_哔哩哔哩_bilibili传统解释非结构化网格是不对的——计算传热学大叔专题讨论2--CFD网格类型_哔哩哔哩_bilibili

传统解释非结构化网格是不对的——计算传热学大叔。fluent计算理论和离散方法原理视频推荐。

qq_15963745的博客 183

【深度学习与NLP】——Pytorch初步应用:基于CIFAR 10构建神经网络和分类器

这段代码使用 PyTorch 框架构建了一个名为Net的卷积神经网络。在网络的初始化部分,定义了两层卷积层和三层全连接层,其中卷积层用于提取输入数据的特征,全连接层用于对提取的特征进行分类或回归等任务。在前向传播过程中,数据依次经过卷积、ReLU 激活函数、最大池化操作,然后将特征展平并通过全连接层处理,最终输出结果。此外,还定义了一个用于计算除批大小外特征数量的辅助方法。最后,创建了该网络的实例并打印其结构。这种网络结构在图像分类等相关任务中应用广泛,通过不断训练和优化,可以提高对数据的处理和预测能力。

lingxw的博客 5431

《FreeRTOS 入门与实战》第20章:移植到 RISC-V 平台

处理器上下文保存/恢复机制中断处理与任务切换的协同时钟源配置(通常使用 Machine Timer)平台特定的汇编代码实现// 典型RISC-V移植文件结构FreeRTOS/├── Source/portable/[编译器]/RISC-V/│ ├── port.c // 关键移植接口│ ├── portASM.s // 汇编级处理│ └── portmacro.h // 架构宏定义。

2301_79143213的博客 450

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Pytorch | 对比Pytorch中的十种优化器:基于CIFAR10上的ResNet分类器

这篇文章我们用Pytorch上不同的优化器在CIFAR10数据集上训练ResNet模型,比较不同优化器的效果,10种优化器:"Adadelta", "Adagrad", "Adam", "Adamax", "AdamW", "NAdam", "RMSProp", "RProp", "SGD", "SparseAdam".

四口鲸鱼爱吃盐的博客 3618

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

pytorch 实现cifar10分类器(作业存档)

使用Pytorch通过卷积神经网络实现CIFAR10数据集的分类器 引言 在本次实验中,会使用Pytorch来实现一个卷积神经网络,之后对CIFAR-10数据集进行训练,保存训练模型参数,绘制loss图并保存,使用训练得到的模型对训练集与测试集的数据进行准确率测试,并将多次训练后得到的测试结果记录到对应的csv文件中。 CIFAR-10数据集 CIFAR10数据集一共有60000张32*32的彩色...

qq_31034951的博客 2347

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Pytorch 训练CIFAR10数据集分类器-example

Pytorch 训练CIFAR10数据集分类器-example 项目来源于 pytorch官网项目 主要分为下面5个步骤: Load and normalizing the CIFAR10 training and test datasets using torchvision 加载数据 Define a Convolutional Neural Network 定义卷积神经网络类 Define a loss function 定义损失函数 Train the network on the trainin

有人找你的博客 731

【图像处理】PyTorch实战之CIFAR10数据集分类(LeNet分类器)

首先这是一个官方demo,PyTorch官网入门实现一个图像分类器 下图是卷积,池化,全连接层在神经网络中的作用(分工)下图是卷积,池化,全连接层在神经网络中的作用(分工) 本文是学习B站深度学习与图像处理的up做的笔记 本文参考主要如下: 1.B站宝藏up讲解视频 2.PyTorch官方文档 3.某博主的课程笔记 官方demo的流程 model.py:定义LeNet网络模型 train.py:加载数据集并训练,训练集计算loss,测试集计算accuracy,保存训练好的网络参数 predict.py:

少年白马 3786

PyTorch深度学习实践:从分类到生成-PyTorch构建CIFAR10分类器

本文介绍了使用PyTorch框架在CIFAR-10数据集上训练图像分类器的完整流程。主要内容包括:1)数据准备阶段,通过torchvision加载CIFAR-10数据集并进行预处理;2)定义卷积神经网络模型结构;3)使用交叉熵损失和SGD优化器进行模型训练;4)在测试集上评估模型性能。实验结果显示,经过2轮训练后模型能够初步识别测试样本中的类别,但仍有改进空间。该教程提供了从数据加载到模型训练、测试的完整代码实现,适合初学者学习深度学习图像分类任务的基本流程。

WSSWWWSSW的博客 1031

PyTorch_CIFAR10进阶:如何用预训练模型构建自定义分类器

PyTorch_CIFAR10是一个基于PyTorch实现的CIFAR-10数据集预训练模型项目,它提供了多种主流CNN模型的预训练权重,让开发者能够快速构建高效的图像分类器。本文将详细介绍如何利用这些预训练模型轻松创建自定义图像分类解决方案,无需从零开始训练复杂模型。 ## 认识PyTorch_CIFAR10的预训练模型库 📚 PyTorch_CIFAR10项目对TorchVision官方

gitblog_00832的博客 740
上一篇: 【Pytorch】An attempt has been made to start a new process before the current process has finished its
下一篇: 【数据库】windows下neo4j安装笔记
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值