基于pytorch的CNN猫狗识别+oneAPI优化

本文详细介绍了如何使用PyTorch构建CNN模型进行猫狗图像识别,包括数据集准备、环境配置、模型训练、InteloneAPI的优化与量化过程,以及模型性能评估。通过实践展示了模型优化对推理速度和精度的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择案例

在给出的课程实践选题中选择猫狗识别项目:

选题描述

下载相应数据集

数据集下载

项目实施

1.环境搭建

A.选择项目工具

将jupyter作为本项目的实施工具。

jupyterlab界面

B.安装pytorch框架和所需的第三方库

项目所用库

import os
import sys
import time
import argparse
import itertools
import torch
import torch.nn.functional as F
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import intel_extension_for_pytorch as ipex
import pandas as pd 

from torch import nn
from torch import optim
from torch.autograd import Variable
from torchvision import models
from matplotlib.patches import Rectangle
from sklearn.metrics import confusion_matrix, accuracy_score, balanced_accuracy_score
from torchvision import transforms
from PIL import Image
from torch.utils.data import Dataset, DataLoader, SubsetRandomSampler
from torchvision import transforms
from sklearn.model_selection import train_test_split, StratifiedKFold
from torch.utils.data import DataLoader
from sklearn.metrics import f1_score

C.配置cuda环境

由于模型在GPU上训练更快,所以需要nvidia的GPU和cuda环境。
打开cmd,输入nvidia-smi查看显卡支持的最大cuda版本
在这里插入图片描述
然后去网络上选择合适版本的cuda已经配套的cudnn进行安装
本项目选择cuda11.8

在这里插入图片描述
安装完cuda后对cudnn文件进行配置并设置好对应的4个环境变量

打开jupyterlab,运行以下代码

import torch

print(torch.__version__)
print("是否可用:", torch.cuda.is_available())        # 查看GPU是否可用
print("GPU数量:", torch.cuda.device_count())        # 查看GPU数量
print("torch方法查看CUDA版本:", torch.version.cuda)  # torch方法查看CUDA版本
print("GPU索引号:", torch.cuda.current_device())    # 查看GPU索引号

结果:
在这里插入图片描述

2.数据集划分

#数据分类,选择猫和狗各13000张作训练集,各100张作测试集

import os
import shutil

root_path = ''
animal = ['cat','dog']
style = ['train','test']
train_data_path = os.path.join(root_path,'train_data')
if not os.path.exists(train_data_path):
    os.makedirs(train_data_path)
for f in style:
        folder_path = os.path.join(train_data_path,f)
        if not os.path.exists(folder_path):
            os.makedirs(folder_path)
        for name in animal:
            under_path = os.path.join(folder_path,name)
            if not os.path.exists(under_path):
                os.makedirs(under_path)
            for filename in os.listdir('train'):
                file_path = os.path.join('train',filename)
                if os.path.isfile(file_path):
                    if filename.startswith(name):
                        contents = filename.split('.')
                        num = int(contents[1])
                        if f == 'test' and num >12399:
                            shutil.copy(file_path,under_path)
                        elif f == 'train' and num < 13000:#数据集是按顺序排列的所以可以使用这种方法
                            shutil.copy(file_path,under_path)

3.数据处理

#数据处理

transform = transforms.Compose([
    transforms.RandomResizedCrop((224,224)),
    transforms.RandomRotation(20),
    transforms.RandomHorizontalFlip(p=0.5),
    transforms.ToTensor()
])#对图片进行变换和数据增强

root = 'train_data'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值