Pytorch框架貓狗大戰之資料預處理

2021-09-29 01:47:36 字數 2506 閱讀 3435

資料預處理階段,dataset.py中主要定義了dogcat類,並定義了__init__、__getitem__、__len__三個類方法,話不多說直接上**,具體解讀都在每一行後面的注釋中。

# coding:utf8

import os

from pil import image

from torch.utils import data

import numpy as np

from torchvision import transforms as t

class dogcat(data.dataset):

def __init__(self, root, transforms=none, train=true, test=false):

""""""

#os.listdir() 方法 : 返回指定資料夾包含的檔案或資料夾名字的列表。該列表順序以字母排序。

#os.path.join() : 將多個路徑組合後返回

# 即imgs中儲存的是路徑+檔名的列表,如下

#劃分訓練、驗證集,驗證:訓練 = 3:7

if self.test:

self.imgs = imgs

elif train:

self.imgs = imgs[:int(0.7 * imgs_num)]

else:

self.imgs = imgs[int(0.7 * imgs_num):]

if transforms is none:

#對資料進行轉換操作,測試、驗證和訓練的資料轉換有所區別

#標準化,即減均值,除以標準差,1*3對應rgb三通道,這組資料是imagenet訓練集中抽樣算出來的

normalize = t.normalize(mean=[0.485, 0.456, 0.406],

std=[0.229, 0.224, 0.225])

#測試集和驗證集

if self.test or not train:

self.transforms = t.compose([

t.resize(224), #縮放image,長寬比不變,最短邊為224畫素

t.centercrop(224), #從中間切出224*224的

t.totensor(), #將轉成tensor並歸一化至[0,1]

normalize #標準化

])#訓練集

else:

self.transforms = t.compose([

t.resize(256),

t.randomresizedcrop(224), #先隨機採集,然後對裁剪得到的影象縮放為同一大小

t.randomhorizontalflip(), #以給定的概率p隨機水平旋轉pil的影象,p預設值為0.5

t.totensor(),

normalize

])def __getitem__(self, index):

"""一次返回一張的資料

如果是測試集,沒有id,如1000.jpg返回1000

"""img_path = self.imgs[index] #第index張的路徑+檔名

if self.test:

label = int(self.imgs[index].split('.')[-2].split('\\')[-1])

else:

label = 1 if 'dog' in img_path.split('\\')[-1] else 0

data = image.open(img_path)

data = self.transforms(data) #呼叫init中的transform處理

return data, label

def __len__(self):

'''返回資料集中所有的個數

'''return len(self.imgs)

pytorch torchvision.transforms.normalize()中的mean和std引數---解惑

transforms的二十二個方法

pytorch中t.randomresizedcrop()等影象操作轉換的效果

kaggle貓狗大戰

kaggle貓狗大戰 kaggle上的貓狗大戰,即對貓狗的分類 沒有特徵資料,只有,所以只能運用神經網路對其訓練 看了大量的kaggle上的公開例子,大多運用tensorflow或者keras建立神經網路,因為最近在學習torch,因此,想用torch建立卷積神經網路進行建模 但整個過程遇到了很多坑...

Pytorch框架下的Kaggle貓狗識別

kaggle貓狗識別,訓練集為25000張打好標籤的貓狗,測試集為劃分出來的5000張貓和狗的 使用的網路為le net,其結構圖如下 如下 import torch import numpy import matplotlib.pylab as plt from torch.autograd im...

洛谷 貓狗大戰

初見安 這裡是傳送門 洛谷p1489 貓狗大戰 乙個挺冷門的題啊 也蠻有意思的。把n個數劃分成兩部分,讓兩部分的數的總和的差值盡量小。其實一眼dp,但是要往正解的方向去想是有點點難度的 明顯我們確定乙個集合,另乙個集合也就可以確定了。思考暴力一點的做法 如果我們可以列舉乙個集合的所有可能性,是不是就...