pytorch实现猫狗分类+数据集 |
您所在的位置:网站首页 › 猫狗dog › pytorch实现猫狗分类+数据集 |
PyTorch实现猫狗分类代码
实现环境:python3.7,pytorch,jupyter notebook 数据集: Kaggle网站猫狗分类数据集,训练集包括12500张猫和12500张狗,测试集为12500张猫狗无标签图片,我们需要把训练集的猫狗照片各取出2500张作为验证集。 开始部分代码:导入一些必要的包,os包集成了一些对文件路径及目录进行操作的类,time包是一些和时间相关的方法 import torch import torchvision from torch.autograd import Variable from torchvision import datasets, transforms import os import matplotlib.pyplot as plt %matplotlib inline import time数据的载入:读取数据并载入 data_dir = 'DogsVSCats' data_transform = {x:transforms.Compose([transforms.Scale([64, 64]), transforms.ToTensor()]) for x in ['train', 'valid']} image_datasets = {x:datasets.ImageFolder(root = os.path.join(data_dir,x), transform = data_transform[x]) for x in ['train', 'valid']} dataloader = {x:torch.utils.data.DataLoader(dataset = image_datasets[x], batch_size = 16, shuffle = True) for x in ['train', 'valid']}数据预览: # 数据预览 X_example, Y_example = next(iter(dataloader['train'])) print(u'X_example个数{}'.format(len(X_example))) print(u'Y_example个数{}'.format(len(Y_example))) index_classes = image_datasets['train'].class_to_idx print(index_classes) example_classes = image_datasets['train'].classes print(example_classes) img = torchvision.utils.make_grid(X_example) img = img.numpy().transpose([1,2,0]) print([example_classes[i] for i in Y_example]) plt.imshow(img) plt.show()结果: X_example个数16 Y_example个数16 {‘Cat’: 0, ‘Dog’: 1} [‘Cat’, ‘Dog’] [‘Cat’, ‘Cat’, ‘Dog’, ‘Dog’, ‘Dog’, ‘Cat’, ‘Cat’, ‘Dog’, ‘Dog’, ‘Dog’, ‘Cat’, ‘Cat’, ‘Dog’, ‘Cat’, ‘Dog’, ‘Cat’] 模型训练 loss_f = torch.nn.CrossEntropyLoss() optimizer = torch.optim.Adam(model.parameters(),lr = 0.00001) Use_gpu = torch.cuda.is_available() if Use_gpu: model = model.cuda() epoch_n = 10 time_open = time.time() for epoch in range(epoch_n): print('epoch{}/{}'.format(epoch,epoch_n-1)) print('-'*10) for phase in ['train','valid']: if phase == 'train': print('training...') model.train(True) else: print('validing...') model.train(False) running_loss = 0.0 running_corrects = 0.0 for batch,data in enumerate(dataloader[phase],1): X,Y = data X,Y = Variable(X).cuda(),Variable(Y).cuda() y_pred = model(X) _,pred = torch.max(y_pred.data,1) optimizer.zero_grad() loss = loss_f(y_pred,Y) if phase == 'train': loss.backward() optimizer.step() running_loss += loss.data.item() running_corrects += torch.sum(pred == y.data) if batch%500 == 0 and phase =='train': print('batch{},trainLoss;{:.4f},trainAcc:{:.4f}'.format(batch,running_loss/bath,100*running_corrects/(16*batch))) epoch_loss = running_loss *16/len(image_datasets[phase]) epoch_acc = 100*running_corrects/len(image_datasets[phase]) print('{} Loss:{:.4f} Acc:{:.4f}%'.format(phase,epoch_loss,epoch_acc)) time_end = time.time()-time_open print(time_end)补充:验证集划分程序,并将划分后的猫狗类别区分(略辣鸡) import os import random import shutil from tqdm import tqdm def move(src_path,cat_path,dog_path): All_files = os.listdir(src_path) #读取原路径下的所有文件,即图片 length = len(All_files) cat,dog,i = 0,0,0 while i |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |