日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度

發(fā)布時(shí)間:2024/10/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

@Author:Runsen

上次基于CIFAR-10 數(shù)據(jù)集,使用PyTorch ??構(gòu)建圖像分類(lèi)模型的精確度是60%,對(duì)于如何提升精確度,方法就是常見(jiàn)的transforms圖像數(shù)據(jù)增強(qiáng)手段。

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoaderimport torchvision import torchvision.datasets as datasets import torchvision.transforms as transforms import torchvision.utils as vutilsimport numpy as np import os import warnings from matplotlib import pyplot as plt warnings.filterwarnings('ignore')` device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

加載數(shù)據(jù)集

# number of images in one forward and backward pass batch_size = 128# number of subprocesses used for data loading # Normally do not use it if your os is windows num_workers = 2train_dataset = datasets.CIFAR10('./data/CIFAR10/', train = True, download = True, transform = transform_train)train_loader = DataLoader(train_dataset, batch_size = batch_size, shuffle = True, num_workers = num_workers)val_dataset = datasets.CIFAR10('./data/CIFAR10', train = True, transform = transform_test)val_loader = DataLoader(val_dataset, batch_size = batch_size, shuffle = False, num_workers = num_workers)test_dataset = datasets.CIFAR10('./data/CIFAR10', train = False, transform = transform_test)test_loader = DataLoader(test_dataset, batch_size = batch_size, shuffle = False, num_workers = num_workers)# declare classes in CIFAR10 classes = ('plane', 'car', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck')

之前的transform ’只是進(jìn)行了縮放和歸一,在這里添加RandomCrop和RandomHorizontalFlip

# define a transform to normalize the datatransform_train = transforms.Compose([transforms.RandomCrop(32, padding=4),transforms.RandomHorizontalFlip(),transforms.ToTensor(), # converting images to tensortransforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5)) # if the image dataset is black and white image, there can be just one number. ])transform_test = transforms.Compose([transforms.ToTensor(),transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5)) ])

可視化具體的圖像

# function that will be used for visualizing the datadef imshow(img):img = img / 2 + 0.5 # unnormalizeplt.imshow(np.transpose(img, (1, 2, 0))) # convert from Tensor image# obtain one batch of imges from train dataset dataiter = iter(train_loader) images, labels = dataiter.next() images = images.numpy() # convert images to numpy for display# plot the images in one batch with the corresponding labels fig = plt.figure(figsize = (25, 4))# display images for idx in np.arange(10):ax = fig.add_subplot(1, 10, idx+1, xticks=[], yticks=[])imshow(images[idx])ax.set_title(classes[labels[idx]])

建立常見(jiàn)的CNN模型

# define the CNN architectureclass CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.main = nn.Sequential(# 3x32x32nn.Conv2d(in_channels = 3, out_channels = 32, kernel_size = 3, padding = 1), # 3x32x32 (O = (N+2P-F/S)+1)nn.ReLU(inplace=True),nn.MaxPool2d(kernel_size = 2, stride = 2), # 32x16x16nn.BatchNorm2d(32),nn.Conv2d(32, 64, kernel_size = 3, padding = 1), # 32x16x16nn.ReLU(inplace=True),nn.MaxPool2d(2, 2), # 64x8x8nn.BatchNorm2d(64),nn.Conv2d(64, 128, 3, padding = 1), # 64x8x8nn.ReLU(inplace=True),nn.MaxPool2d(2, 2), # 128x4x4nn.BatchNorm2d(128),)self.fc = nn.Sequential(nn.Linear(128*4*4, 1024),nn.ReLU(inplace=True),nn.Dropout(0.5),nn.Linear(1024, 256),nn.ReLU(inplace=True),nn.Dropout(0.5),nn.Linear(256, 10))def forward(self, x):# Conv and Poolilng layersx = self.main(x)# Flatten before Fully Connected layersx = x.view(-1, 128*4*4) # Fully Connected Layerx = self.fc(x)return xcnn = CNN().to(device) cnn


torch.nn.CrossEntropyLoss對(duì)輸出概率介于0和1之間的分類(lèi)模型進(jìn)行分類(lèi)。

訓(xùn)練模型

# 超參數(shù):Hyper Parameters learning_rate = 0.001 train_losses = [] val_losses = []# Loss function and Optimizer criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(cnn.parameters(), lr = learning_rate)# define train function that trains the model using a CIFAR10 datasetdef train(model, epoch, num_epochs):model.train()total_batch = len(train_dataset) // batch_sizefor i, (images, labels) in enumerate(train_loader):X = images.to(device)Y = labels.to(device)### forward pass and loss calculation# forward passpred = model(X)#c alculation of loss valuecost = criterion(pred, Y)### backward pass and optimization# gradient initializationoptimizer.zero_grad()# backward passcost.backward()# parameter updateoptimizer.step()# training statsif (i+1) % 100 == 0:print('Train, Epoch [%d/%d], lter [%d/%d], Loss: %.4f' % (epoch+1, num_epochs, i+1, total_batch, np.average(train_losses)))train_losses.append(cost.item())# def the validation function that validates the model using CIFAR10 datasetdef validation(model, epoch, num_epochs):model.eval()total_batch = len(val_dataset) // batch_sizefor i, (images, labels) in enumerate(val_loader):X = images.to(device)Y = labels.to(device)with torch.no_grad():pred = model(X)cost = criterion(pred, Y)if (i+1) % 100 == 0:print("Validation, Epoch [%d/%d], lter [%d/%d], Loss: %.4f"% (epoch+1, num_epochs, i+1, total_batch, np.average(val_losses)))val_losses.append(cost.item())def plot_losses(train_losses, val_losses):plt.figure(figsize=(5, 5))plt.plot(train_losses, label='Train', alpha=0.5)plt.plot(val_losses, label='Validation', alpha=0.5)plt.xlabel('Epochs')plt.ylabel('Losses')plt.legend()plt.grid(b=True)plt.title('CIFAR 10 Train/Val Losses Over Epoch')plt.show()num_epochs = 20 for epoch in range(num_epochs):train(cnn, epoch, num_epochs)validation(cnn, epoch, num_epochs)torch.save(cnn.state_dict(), './data/Tutorial_3_CNN_Epoch_{}.pkl'.format(epoch+1))plot_losses(train_losses, val_losses)


測(cè)試模型

def test(model):# declare that the model is about to evaluatemodel.eval()correct = 0total = 0with torch.no_grad():for images, labels in test_dataset:images = images.unsqueeze(0).to(device)# forward passoutputs = model(images)_, predicted = torch.max(outputs.data, 1)total += 1correct += (predicted == labels).sum().item()print("Accuracy of Test Images: %f %%" % (100 * float(correct) / total))


經(jīng)過(guò)圖像數(shù)據(jù)增強(qiáng)。模型從60提升到了84。

測(cè)試模型在哪些類(lèi)上表現(xiàn)良好,

class_correct = list(0. for i in range(10)) class_total = list(0. for i in range(10))with torch.no_grad():for data in test_loader:images, labels = dataimages = images.to(device)labels = labels.to(device)outputs = cnn(images)_, predicted = torch.max(outputs, 1)c = (predicted == labels).squeeze()for i in range(4):label = labels[i]class_correct[label] += c[i].item()class_total[label] += 1for i in range(10):print('Accuracy of %5s : %2d %%' % (classes[i], 100 * class_correct[i] / class_total[i]))

總結(jié)

以上是生活随笔為你收集整理的【小白学习PyTorch教程】八、使用图像数据增强手段,提升CIFAR-10 数据集精确度的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美 日韩 国产一区 | 亚洲精品成人区在线观看 | 白浆网站| 在线亚洲综合 | 午夜黄色影院 | 国产精品国产三级国产aⅴ下载 | 免费一级做a爰片久久毛片潮 | www.五月天com | 午夜成人亚洲理伦片在线观看 | 日韩在线视频网址 | 一区二区三区欧美精品 | 亚洲www啪成人一区二区麻豆 | 99这里只有精品视频 | 亚洲欧美系列 | 国产精品久久久久久亚洲影视 | 男人天堂久久 | 3344成人| 国产高中女学生第一次 | 一区二区导航 | 亚洲av综合色区无码另类小说 | 久久黄色视屏 | 久久久精品日本 | 碰超在线 | 碧蓝之海动漫在线观看免费高清 | 国色天香一区二区 | 少妇厨房愉情理伦bd在线观看 | 国产精品成人免费看片 | 中文字幕一区二区三区乱码不卡 | 国产美女免费视频 | 欧美另类z0z变态 | 999精品| 亚洲国产精品自拍 | 午夜伦视频| 国产极品网站 | 日本熟妇色xxxxx日本免费看 | 老妇女性较大毛片 | 一区二区三区四区亚洲 | 色偷偷888欧美精品久久久 | 日本在线观看一区二区三区 | av综合在线观看 | 久久人妻无码aⅴ毛片a片app | 天堂av免费 | 自拍偷拍视频网站 | 欧美日韩视频免费 | 国产三级日本三级在线播放 | 成长快手短视频在线观看 | 欧美图片自拍偷拍 | 国产精品久久久久久久免费观看 | 日韩天堂网 | 精品免费国产一区二区三区四区 | 影视先锋av资源 | 手机看片日韩国产 | 日本成人综合 | 又大又长粗又爽又黄少妇视频 | ass极品水嫩小美女ass | 北条麻妃一区二区三区免费 | 黄色一级片免费 | 特级淫片aaaaaaa级附近的 | 日韩高清在线播放 | 国产手机看片 | 一级爱爱片 | 6080久久| 国产av 一区二区三区 | 欧美人与禽zozzo性之恋的特点 | 人人草超碰 | 久久久国产高清 | 免费在线一区二区三区 | 日日夜夜操操 | 操干网 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 中文字幕日韩亚洲 | 午夜性 | 女女互慰吃奶互揉调教捆绑 | 狠狠爱免费视频 | 日本东京热一区二区三区 | 麻豆av一区二区三区 | 国产成人精品视频ⅴa片软件竹菊 | 无码人妻精品一区二区三区不卡 | 久久久久久九九 | 国产成人精品无码免费看夜聊软件 | 男女网站在线观看 | 美女黄色大片 | 欧美日韩国产一级片 | jlzzjlzz亚洲日本少妇 | 激情免费视频 | 91理论片午午伦夜理片久久 | 国产精品欧美一区二区 | 欧美性色a| gogo人体做爰大胆视频 | 日韩第一页在线观看 | 精品在线一区二区三区 | 亚洲天堂五码 | 欧美一区二区激情 | 波多野结衣小视频 | 97在线免费视频 | 免费观看污网站 | 西西人体大胆4444ww张筱雨 | 国产亚洲福利 | 国产一级内谢 |