資料預處理階段,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,但是要往正解的方向去想是有點點難度的 明顯我們確定乙個集合,另乙個集合也就可以確定了。思考暴力一點的做法 如果我們可以列舉乙個集合的所有可能性,是不是就...