国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

《Pytorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷 2)》學(xué)習(xí)筆記——第一章

這篇具有很好參考價(jià)值的文章主要介紹了《Pytorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷 2)》學(xué)習(xí)筆記——第一章。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

學(xué)習(xí)基于如下書籍,僅供自己學(xué)習(xí),用來記錄回顧,非教程。

<PyTorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷2)——開發(fā)應(yīng)用>一書配套代碼:
https://github.com/aianaconda/pytorch-GNN-2nd-
百度網(wǎng)盤鏈接:https://pan.baidu.com/s/1dnq5IbFjjdekAR54HLb9Pg
提取碼:k7vi
壓縮包密碼:dszn

圖片分類模型

2012年起,在ILSVRC競(jìng)賽中獲得冠軍的模型如下
2012年:AlexNet
2013年:OverFeat
2014年:GoogLeNet、VGG(亞軍)
2015年:ResNet
2016年:Trimps-Soushen、ResNeXt(亞軍)
2017年:SENet
之后又有很多性能更加出色的如PNASNet、DenseNet、EfficientNet。

Inception系列模型

它主要是解決深層網(wǎng)絡(luò)中3個(gè)問題:
訓(xùn)練數(shù)據(jù)有限,參數(shù)太多,容易過擬合。
網(wǎng)絡(luò)越大,計(jì)算復(fù)雜度越大,難以應(yīng)用。
網(wǎng)絡(luò)越深,梯度越往后傳,越容易消失(梯度彌散),難以優(yōu)化模型。

多分支結(jié)構(gòu)

原始的Inception模型采用1X1、3X3、5X5卷積和3X3最大池化,增加了網(wǎng)絡(luò)的寬度,增強(qiáng)了網(wǎng)絡(luò)對(duì)不同尺寸的適應(yīng)性。

全局均值池化

代替最后的全連接輸出層,如1000個(gè)分類,最后一層的特征圖要1000個(gè),可以直接得出分類。

Inception V1模型

在大卷積核前和池化后加入1X1卷積,起到降低特征圖厚度的作用。

Inception V2模型

融入當(dāng)時(shí)的主流技術(shù),加入了BN層和梯度截?cái)嗉夹g(shù),借鑒了VGG模型,用兩個(gè)3X3代替一個(gè)5X5,降低了參數(shù)量,提高了運(yùn)算速度。

Inception V3模型

將3X3卷積分解成1XN和NX1,讓卷積核分解更小,基于線性代數(shù)的原理。
假設(shè)256個(gè)特征輸入,256個(gè)特征輸出,Inception層只能執(zhí)行3X3卷積,也就是要完成256X256X3X3(589824)次乘積累加運(yùn)算。假設(shè)現(xiàn)在要減少進(jìn)行卷積運(yùn)算的特征數(shù)量,將其變?yōu)?4個(gè)(256/4),先進(jìn)行256到64的1X1的卷積,然后在所有Inception層的分支上進(jìn)行64次卷積,最后使用一個(gè)64到256的特征的1X1卷積。現(xiàn)在有256X64X1X1+64X64X3X3+64X256X1X1=69632次計(jì)算量,提高了運(yùn)算速度。
實(shí)際測(cè)試中,在前幾層效果不好,但對(duì)特征圖大小為12到20的中間層效果明顯

Inception V4模型

結(jié)合ResNet模型,加入了殘差連接。

Inception-ResNet V2模型

在網(wǎng)絡(luò)復(fù)雜度相近的情況下,該模型略優(yōu)于V4,殘差提高網(wǎng)絡(luò)準(zhǔn)確率,而不會(huì)增加計(jì)算量的作用。
通過將3個(gè)帶有殘差連接的Inception模型和一個(gè)Inception V4模型組合,就可以在ImageNet上得到3.08%的錯(cuò)誤率。

ResNet模型

模型層數(shù)加深,梯度在多層傳播時(shí)會(huì)越來越小,直到消失,層數(shù)越多訓(xùn)練誤差會(huì)越來越大。ResNet解決深層無法訓(xùn)練的問題,借鑒了高速網(wǎng)絡(luò)模型的思想,在前饋上加一個(gè)直接連接,直連可以保留梯度。作用是將網(wǎng)絡(luò)串行改成了并行,V4結(jié)合殘差原理不用殘差連接就可以達(dá)到ResNet V2等同的效果。

DenseNet模型

2017年被提出,是密集連接的卷積神經(jīng)網(wǎng)絡(luò),每個(gè)層都會(huì)接受前面所有層的作為輸入。主要優(yōu)勢(shì)如下:
可以直達(dá)最后的誤差信號(hào),減輕梯度消失問題
拼接特征圖實(shí)現(xiàn)短路連接,實(shí)現(xiàn)特征重用,每個(gè)層獨(dú)有的特征圖比較小
前面的特征圖直接傳給后面,可以充分利用不同層級(jí)的特征
不如就是可能耗費(fèi)很多GPU顯存

稠密塊

其中只含有兩個(gè)卷積層,分別為1X1,3X3。每個(gè)稠密塊是L個(gè)全連接組成,不同稠密塊之間沒有。

PNASNet模型

使用了殘差結(jié)構(gòu)和多分支卷積技術(shù),同時(shí)還添加了深度可分離卷積和空洞卷積的處理。

組卷積

了解深度可分離卷積要了解組卷積。組卷積對(duì)輸入數(shù)據(jù)先分組,能增強(qiáng)卷積核之間對(duì)角相關(guān)性,減少訓(xùn)練參數(shù),不容易過擬合,類似于正則效果。

深度可分離卷積

Xception模型是Inception系列模型的統(tǒng)稱,主要目的是將通道相關(guān)性和平面空間維度相關(guān)性進(jìn)行解耦,使通道關(guān)系和平面空間關(guān)系上的卷積操作相互獨(dú)立,達(dá)到更好的效果。

空洞卷積

也稱為擴(kuò)張卷積,在不做池化操作而導(dǎo)致?lián)p失信息的情況下,加大了卷積的感受野,讓每個(gè)卷積輸出都包含更大的范圍。

EfficientNet模型

是谷歌公司通過機(jī)器搜索得到的模型,構(gòu)建步驟如下。
使用強(qiáng)化學(xué)習(xí)算法實(shí)現(xiàn)的MnasNet模型生成基準(zhǔn)模型EfficientNet-B0
采用復(fù)合縮放,在預(yù)先設(shè)定的內(nèi)存和計(jì)算量大小的限制條件下,對(duì)EfficientNet-B0模型的深度、寬度(特征圖通道數(shù))、圖片尺寸這3個(gè)維度同時(shí)進(jìn)行縮放,這3個(gè)維度的縮放比例由網(wǎng)絡(luò)搜索得到,最終輸出了EfficientNet模型。

MBConv

內(nèi)部由多個(gè)MBConv卷積塊實(shí)現(xiàn)的,也用了類似殘差連接的結(jié)構(gòu),在短連接部分使用了SE模塊,并且將常用的ReLU激活函數(shù)換成了Swish激活函數(shù),另外使用了Drop Connect層來代替?zhèn)鹘y(tǒng)的Dropout層(丟棄隱藏層輸入而不是輸出)。

實(shí)例:使用預(yù)訓(xùn)練模型識(shí)別圖片內(nèi)容

這里用models模塊創(chuàng)建模型,然后載入下載好的參數(shù)。

model = models.resnet18()
model.load_state_dict(torch.load(r"E:\desktop\Home_Code\pytorch\2-chapter1\some\resnet18-5c106cde.pth")) 	#true 代表下載
model = model.eval()

記得要進(jìn)行model.eval()

from PIL import Image  						#引入基礎(chǔ)庫
import matplotlib.pyplot as plt
import json
import numpy as np

import torch								#引入PyTorch庫
import torch.nn.functional as F
from torchvision import models, transforms #引入torchvision庫

model = models.resnet18()
model.load_state_dict(torch.load(r"E:\desktop\Home_Code\pytorch\2-chapter1\some\resnet18-5c106cde.pth")) 	#true 代表下載
model = model.eval()

labels_path = r'pytorch\2-chapter1\some\imagenet_class_index.json'  #處理英文標(biāo)簽
with open(labels_path) as json_data:
    idx_to_labels = json.load(json_data)

def getone(onestr):
    return onestr.replace(',',' ')
with open(r'pytorch\2-chapter1\some\中文標(biāo)簽.csv','r+') as f: 		#處理中文標(biāo)簽				
    zh_labels =list( map(getone,list(f))  )
    print(len(zh_labels),type(zh_labels),zh_labels[:5]) #顯示輸出中文標(biāo)簽

transform = transforms.Compose([			#對(duì)圖片尺寸預(yù)處理
 transforms.Resize(256),
 transforms.CenterCrop(224),
 transforms.ToTensor(),
 transforms.Normalize(						#對(duì)圖片歸一化預(yù)處理
     mean=[0.485, 0.456, 0.406],
     std=[0.229, 0.224, 0.225]
         )
])

def preimg(img):                              		#定義圖片預(yù)處理函數(shù)
    if img.mode=='RGBA':                    		#兼容RGBA圖片
        ch = 4 
        print('ch',ch)
        a = np.asarray(img)[:,:,:3] 
        img = Image.fromarray(a)
    return img

im =preimg( Image.open(r'pytorch\2-chapter1\some\book.png') )				#打開圖片
transformed_img = transform(im)					#調(diào)整圖片尺寸

inputimg = transformed_img.unsqueeze(0)			#增加批次維度

output = model(inputimg)						#輸入模型
output = F.softmax(output, dim=1)				#獲取結(jié)果

# 從預(yù)測(cè)結(jié)果中取出前3名
prediction_score, pred_label_idx = torch.topk(output, 3)
prediction_score = prediction_score.detach().numpy()[0] #獲取結(jié)果概率
pred_label_idx = pred_label_idx.detach().numpy()[0]		 #獲取結(jié)果的標(biāo)簽id

predicted_label = idx_to_labels[str(pred_label_idx[0])][1]#取出標(biāo)簽名稱
predicted_label_zh = zh_labels[pred_label_idx[0] + 1 ] #取出中文標(biāo)簽名稱
print(' 預(yù)測(cè)結(jié)果:', predicted_label,predicted_label_zh, 
        '預(yù)測(cè)分?jǐn)?shù):', prediction_score[0])

#可視化處理,創(chuàng)建一個(gè)1行2列的子圖
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 8))
fig.sca(ax1)  				#設(shè)置第一個(gè)軸是ax1
ax1.imshow(im)  				#第一個(gè)子圖顯示原始要預(yù)測(cè)的圖片

#設(shè)置第二個(gè)子圖為預(yù)測(cè)的結(jié)果,按概率取前3名
barlist = ax2.bar(range(3), [i for i in prediction_score])
barlist[0].set_color('g')  		#顏色設(shè)置為綠色

#預(yù)測(cè)結(jié)果前3名的柱狀圖
plt.sca(ax2)
plt.ylim([0, 1.1])

#豎直顯示Top3的標(biāo)簽
plt.xticks(range(3), [idx_to_labels[str(i)][1][:15] for i in pred_label_idx ], rotation='vertical')
fig.subplots_adjust(bottom=0.2)  	#調(diào)整第二個(gè)子圖的位置
plt.show()  							#顯示圖像 

預(yù)測(cè)結(jié)果: book_jacket 防塵罩 書皮
預(yù)測(cè)分?jǐn)?shù): 0.27850005
成功識(shí)別出書皮,不過可信度不是很高
《Pytorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷 2)》學(xué)習(xí)筆記——第一章,PyTorch—學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,神經(jīng)網(wǎng)絡(luò)
試試別的
《Pytorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷 2)》學(xué)習(xí)筆記——第一章,PyTorch—學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,神經(jīng)網(wǎng)絡(luò)
《Pytorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷 2)》學(xué)習(xí)筆記——第一章,PyTorch—學(xué)習(xí)筆記,深度學(xué)習(xí),pytorch,神經(jīng)網(wǎng)絡(luò)

遷移學(xué)習(xí)

把在一個(gè)任務(wù)上訓(xùn)練完成的模型進(jìn)行簡(jiǎn)單的修改,再用另一個(gè)任務(wù)的數(shù)據(jù)繼續(xù)訓(xùn)練,使之能夠完成新的任務(wù)。
如在ImageNet數(shù)據(jù)集上訓(xùn)練過的ResNet模型,原任務(wù)是用來圖片分類的,可以對(duì)它進(jìn)行修改,使之用在目標(biāo)定位任務(wù)上。
遷移學(xué)習(xí)是機(jī)器學(xué)習(xí)的分支,按照學(xué)習(xí)方式可以分為基于樣本的遷移、基于特征的遷移、基于模型的遷移、基于關(guān)系的遷移。
初衷是節(jié)省人工標(biāo)注樣本的時(shí)間,讓模型通過一個(gè)已有的標(biāo)記數(shù)據(jù)領(lǐng)域向未標(biāo)記數(shù)據(jù)領(lǐng)域進(jìn)行遷移,從而訓(xùn)練出適用于該領(lǐng)域的模型。好處如下:
對(duì)于本身數(shù)據(jù)集很?。◣浊垐D片)的情況,從頭開始訓(xùn)練幾千萬個(gè)參數(shù)的大型神經(jīng)網(wǎng)絡(luò)模型不現(xiàn)實(shí),越大的模型數(shù)據(jù)量需求越大,過擬合無法避免。如果還想用大型模型的超強(qiáng)特征提取能力,只能靠微調(diào)已經(jīng)訓(xùn)練好的模型。
可以降低訓(xùn)練成本,用導(dǎo)出特征向量的方法,后期訓(xùn)練成本非常低。
前人訓(xùn)練的模型大概率比你自己從零訓(xùn)練要強(qiáng)大,沒必要重復(fù)造輪子。

與微調(diào)的關(guān)系沒有嚴(yán)格的區(qū)分,作者的理解,微調(diào)是遷移學(xué)習(xí)的后期,是它的一部分,一個(gè)技巧。

實(shí)例:使用遷移學(xué)習(xí)識(shí)別多種鳥類

import glob
import os
import numpy as np#引入基礎(chǔ)庫
from PIL import Image
import matplotlib.pyplot as plt       		#plt 用于顯示圖片

import torch
import torch.nn as nn
import torch.optim as optim
from torch.optim import lr_scheduler
from torch.utils.data import Dataset,DataLoader

import torchvision
import torchvision.models as models
from torchvision.transforms import ToPILImage
import torchvision.transforms as transforms


def load_dir(directory,labstart=0):#獲取所有directory中的所有圖片和標(biāo)簽
    #返回path指定的文件夾所包含的文件或文件夾的名字列表
    strlabels = os.listdir(directory)
    #對(duì)標(biāo)簽進(jìn)行排序,以便訓(xùn)練和驗(yàn)證按照相同的順序進(jìn)行
    strlabels.sort()
    #創(chuàng)建文件標(biāo)簽列表
    file_labels = []
    for i,label in enumerate(strlabels):
#        print(label)
        jpg_names = glob.glob(os.path.join(directory, label, "*.jpg"))
#        print(jpg_names)
        #加入列表
        file_labels.extend(zip( jpg_names,[i+labstart]*len(jpg_names))  )

    return file_labels,strlabels


def load_data(dataset_path):      #定義函數(shù)加載文件名稱和標(biāo)簽
    sub_dir= sorted(os.listdir(dataset_path) )#跳過子文件夾
    start =1 #none:0
    tfile_labels,tstrlabels=[],['none']
    for i in sub_dir:
        directory = os.path.join(dataset_path, i)
        if os.path.isdir(directory )==False: #只處理目錄中的數(shù)據(jù)
            print(directory)
            continue
        file_labels,strlabels = load_dir(directory ,labstart = start )
        tfile_labels.extend(file_labels)
        tstrlabels.extend(strlabels)
        start  = len(strlabels)
    #理解為解壓縮,把數(shù)據(jù)路徑和標(biāo)簽解壓縮出來
    filenames, labels=zip(*tfile_labels)
    return filenames, labels,tstrlabels



def default_loader(path):
    return Image.open(path).convert('RGB')

class OwnDataset(Dataset):
    def __init__(self,img_dir, labels, indexlist= None, transform=transforms.ToTensor(),
                 loader=default_loader,cache=True):
        self.labels = labels
        self.img_dir = img_dir
        self.transform = transform
        self.loader=loader
        self.cache = cache 								#緩存標(biāo)志
        if indexlist is None:
            self.indexlist = list(range(len(self.img_dir)))
        else:
            self.indexlist = indexlist
        self.data = [None] * len(self.indexlist) 		#存放樣本圖片
    
    def __getitem__(self, idx):
        if self.data[idx] is None:						#第一次加載
            data = self.loader(self.img_dir[self.indexlist[idx]])
            if self.transform:
                data = self.transform(data)
        else:
            data = self.data[idx]
        if self.cache: 									#保存到緩存里
            self.data[idx] = data
        return data,  self.labels[self.indexlist[idx]]

    def __len__(self):
        return len(self.indexlist)


data_transform = {                      #定義數(shù)據(jù)的預(yù)處理方法
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}
def Reduction_img(tensor,mean,std):#還原圖片
    dtype = tensor.dtype
    mean = torch.as_tensor(mean, dtype=dtype, device=tensor.device)
    std = torch.as_tensor(std, dtype=dtype, device=tensor.device)
    tensor.mul_(std[:, None, None]).add_(mean[:, None, None])#擴(kuò)展維度后計(jì)算

    
dataset_path = r'pytorch/2-chapter1/some2/'
filenames, labels,classes = load_data(dataset_path)   

#打亂數(shù)組順序
np.random.seed(0)
label_shuffle_index = np.random.permutation( len(labels)  ) 
label_train_num = (len(labels)//10) *8 
train_list =  label_shuffle_index[0:label_train_num]  
test_list =   label_shuffle_index[label_train_num: ] 


train_dataset=OwnDataset(filenames, labels,train_list,data_transform['train'])
val_dataset=OwnDataset(filenames, labels,test_list,data_transform['val'])


train_loader =DataLoader(dataset=train_dataset, batch_size=32, shuffle=True)
val_loader=DataLoader(dataset=val_dataset, batch_size=32, shuffle=False)


#
sample = iter(train_loader)
images, labels = sample.__next__()
print('樣本形狀:',np.shape(images))
print('標(biāo)簽個(gè)數(shù):',len(classes))

mulimgs = torchvision.utils.make_grid(images[:10],nrow=10)
Reduction_img(mulimgs,[0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
_img= ToPILImage()( mulimgs )
plt.axis('off')
plt.imshow(_img)
plt.show()
print(','.join('%5s' % classes[labels[j]] for j in range(len(images[:10]))))


############################################

#指定設(shè)備
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(device)


def get_ResNet(classes,pretrained=True,loadfile = None):
    ResNet=models.resnet101(pretrained)# 這里自動(dòng)下載官方的預(yù)訓(xùn)練模型
    if loadfile!= None:
        ResNet.load_state_dict(torch.load( loadfile))	#加載本地模型 
        
    # 將所有的參數(shù)層進(jìn)行凍結(jié)
    for param in ResNet.parameters():
        param.requires_grad = False
    # 這里打印下全連接層的信息
    print(ResNet.fc)
    x = ResNet.fc.in_features #獲取到fc層的輸入
    ResNet.fc = nn.Linear(x, len(classes)) # 定義一個(gè)新的FC層
    print(ResNet.fc) # 最后再打印一下新的模型
    return ResNet

ResNet=get_ResNet(classes)
ResNet.to(device)

criterion = nn.CrossEntropyLoss()
#指定新加的fc層的學(xué)習(xí)率
optimizer = torch.optim.Adam([ {'params':ResNet.fc.parameters()}], lr=0.001)


def train(model,device, train_loader, epoch,optimizer):
    model.train()
    allloss = []
    for batch_idx, data in enumerate(train_loader):
        x,y= data
        x=x.to(device)
        y=y.to(device)
        optimizer.zero_grad()
        y_hat= model(x)
        loss = criterion(y_hat, y)
        loss.backward()
        allloss.append(loss.item())
        optimizer.step()
    print ('Train Epoch: {}\t Loss: {:.6f}'.format(epoch,np.mean(allloss)  ))

def test(model, device, val_loader):
    model.eval()
    test_loss = []
    correct = []
    with torch.no_grad():
        for i,data in enumerate(val_loader):          
            x,y= data
            x=x.to(device)
            y=y.to(device)
            y_hat = model(x)
            test_loss.append( criterion(y_hat, y).item()) # sum up batch loss
            pred = y_hat.max(1, keepdim=True)[1] # get the index of the max log-probability
            correct.append( pred.eq(y.view_as(pred)).sum().item()/pred.shape[0] )
    print('\nTest set——{}: Average loss: {:.4f}, Accuracy: ({:.0f}%)\n'.format(
         len(correct),np.mean(test_loss), np.mean(correct)*100 ))
if __name__ == '__main__':

    firstmodepth = './finetuneRes101_1.pth'

    
    if os.path.exists(firstmodepth) ==False:
        print("_____訓(xùn)練最后一層________")  
        for epoch in range(1, 2):
            train(ResNet,device, train_loader,epoch,optimizer )
            test(ResNet, device, val_loader )
        # 保存模型
        torch.save(ResNet.state_dict(), firstmodepth)       
    
    
    
    secondmodepth = './finetuneRes101_2.pth'
    optimizer2=optim.SGD(ResNet.parameters(),lr=0.001,momentum=0.9)
    exp_lr_scheduler = lr_scheduler.StepLR(optimizer2, step_size=2, gamma=0.9)
    
    for param in ResNet.parameters():
        param.requires_grad = True
    
    if os.path.exists(secondmodepth) :
        ResNet.load_state_dict(torch.load( secondmodepth))	#加載本地模型
    else:
        ResNet.load_state_dict(torch.load(firstmodepth))	#加載本地模型    
    print("_____全部訓(xùn)練________")    
    for epoch in range(1, 100):
        train(ResNet,device, train_loader,epoch,optimizer2 )
        if optimizer2.state_dict()['param_groups'][0]['lr']>0.00001:
            exp_lr_scheduler.step()
            print("___lr:" ,optimizer2.state_dict()['param_groups'][0]['lr'] )
        
        test(ResNet, device, val_loader )    
    # 保存模型
    torch.save(ResNet.state_dict(), secondmodepth)  

訓(xùn)練太慢了,而且輸出結(jié)果與書籍不符合,標(biāo)簽個(gè)數(shù)就不一樣,應(yīng)該為201個(gè),我是6個(gè)。應(yīng)該用CUB-200訓(xùn)練,而不是壓縮包里的6類數(shù)據(jù)。這個(gè)銳龍顯卡不知道怎么加速,就不訓(xùn)練了。

隨機(jī)數(shù)據(jù)增強(qiáng)

目前效果最好的Efficient系列模型中,B7版本中就是使用了隨機(jī)數(shù)據(jù)增強(qiáng),RandAugment比自動(dòng)數(shù)據(jù)增強(qiáng)(AutoAugment)更簡(jiǎn)單好用,后者有30多個(gè)參數(shù),前者將其簡(jiǎn)化為2個(gè),圖片的N次變換,和每次變換的強(qiáng)度M,取值為0到10。

分類模型中常用的三種損失函數(shù)

BCELoss,用于單標(biāo)簽二分類,或者多標(biāo)簽二分類,一個(gè)樣本可以有多個(gè)分類不互斥,輸出為(Batch,C),Batch樣本數(shù)量,C是類別數(shù)量。每個(gè)C值代表屬于一類標(biāo)簽的概率。
BCEWithLogitsLoss,同上,但對(duì)網(wǎng)絡(luò)輸出結(jié)果進(jìn)行了一次Sigmoid。
CrossEntropyLoss,用于多類別分類,每個(gè)C是互斥的,相互關(guān)聯(lián)的,求每個(gè)C的Softmax。

樣本均衡

訓(xùn)練樣本不均衡時(shí),可以用過采樣,欠采樣,數(shù)據(jù)增強(qiáng)等手段來避免過擬合。
采樣器類Sample中有一類派生的權(quán)重采樣類WeightedRandomSampler,能夠在加載數(shù)據(jù)時(shí)進(jìn)行隨機(jī)順序采樣。
DataLoader類中使用了采樣器Sampler類就不能使用shuffle參數(shù)

從深度卷積模型中提取視覺特征

前面的實(shí)例通過替換預(yù)訓(xùn)練模型輸出層的方式,實(shí)現(xiàn)對(duì)其他圖片的分類任務(wù),這種遷移學(xué)習(xí)本質(zhì)上是借助了預(yù)訓(xùn)練模型對(duì)圖片處理后的視覺特征,這在深度學(xué)習(xí)任務(wù)中起到了很大的作用。如目標(biāo)檢測(cè)、語義分割,甚至是圖像與文本的混合處理模型等,遷移學(xué)習(xí)只是其中一種。
有兩種方式可以實(shí)現(xiàn)視覺特征的提?。恒^子函數(shù)、重組結(jié)構(gòu)

鉤子函數(shù)

重組結(jié)構(gòu)

ResNet2=nn.Sequential(*list(ResNet.children( ))[:-1])文章來源地址http://www.zghlxwxcb.cn/news/detail-589663.html

到了這里,關(guān)于《Pytorch深度學(xué)習(xí)和圖神經(jīng)網(wǎng)絡(luò)(卷 2)》學(xué)習(xí)筆記——第一章的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【AI】《動(dòng)手學(xué)-深度學(xué)習(xí)-PyTorch版》筆記(十八):卷積神經(jīng)網(wǎng)絡(luò)模型(LeNet、AlexNet、VGG、NiN)

    【AI】《動(dòng)手學(xué)-深度學(xué)習(xí)-PyTorch版》筆記(十八):卷積神經(jīng)網(wǎng)絡(luò)模型(LeNet、AlexNet、VGG、NiN)

    發(fā)布時(shí)間:1989年 模型目的:識(shí)別手寫數(shù)字 1.3.1 相關(guān)函數(shù)原型 1)nn.Conv2d:卷積層

    2024年02月12日
    瀏覽(27)
  • 卷積神經(jīng)網(wǎng)絡(luò)——上篇【深度學(xué)習(xí)】【PyTorch】

    卷積神經(jīng)網(wǎng)絡(luò)——上篇【深度學(xué)習(xí)】【PyTorch】

    5.1.1、理論部分 全連接層后,卷積層出現(xiàn)的意義? 一個(gè)足夠充分的照片數(shù)據(jù)集,輸入,全連接層參數(shù),GPU成本,訓(xùn)練時(shí)間是巨大的。 (convolutional neural networks,CNN)是機(jī)器學(xué)習(xí)利用自然圖像中一些已知結(jié)構(gòu)的創(chuàng)造性方法,需要更少的參數(shù),在處理圖像和其他類型的結(jié)構(gòu)化數(shù)據(jù)

    2024年02月12日
    瀏覽(25)
  • PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(3)——使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)

    PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(3)——使用PyTorch構(gòu)建神經(jīng)網(wǎng)絡(luò)

    我們已經(jīng)學(xué)習(xí)了如何從零開始構(gòu)建神經(jīng)網(wǎng)絡(luò),神經(jīng)網(wǎng)絡(luò)通常包括輸入層、隱藏層、輸出層、激活函數(shù)、損失函數(shù)和學(xué)習(xí)率等基本組件。在本節(jié)中,我們將學(xué)習(xí)如何在簡(jiǎn)單數(shù)據(jù)集上使用 PyTorch 構(gòu)建神經(jīng)網(wǎng)絡(luò),利用張量對(duì)象操作和梯度值計(jì)算更新網(wǎng)絡(luò)權(quán)重。 1.1 使用 PyTorch 構(gòu)建神

    2024年02月08日
    瀏覽(25)
  • Pytorch深度學(xué)習(xí)-----神經(jīng)網(wǎng)絡(luò)之線性層用法

    PyTorch深度學(xué)習(xí)——Anaconda和PyTorch安裝 Pytorch深度學(xué)習(xí)-----數(shù)據(jù)模塊Dataset類 Pytorch深度學(xué)習(xí)------TensorBoard的使用 Pytorch深度學(xué)習(xí)------Torchvision中Transforms的使用(ToTensor,Normalize,Resize ,Compose,RandomCrop) Pytorch深度學(xué)習(xí)------torchvision中dataset數(shù)據(jù)集的使用(CIFAR10) Pytorch深度學(xué)習(xí)--

    2024年02月14日
    瀏覽(24)
  • 動(dòng)手學(xué)深度學(xué)習(xí)-pytorch版本(二):線性神經(jīng)網(wǎng)絡(luò)

    動(dòng)手學(xué)深度學(xué)習(xí)-pytorch版本(二):線性神經(jīng)網(wǎng)絡(luò)

    參考引用 動(dòng)手學(xué)深度學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)的整個(gè)訓(xùn)練過程,包括: 定義簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)架構(gòu)、數(shù)據(jù)處理、指定損失函數(shù)和如何訓(xùn)練模型 。經(jīng)典統(tǒng)計(jì)學(xué)習(xí)技術(shù)中的 線性回歸 和 softmax 回歸 可以視為線性神經(jīng)網(wǎng)絡(luò) 1.1 線性回歸 回歸 (regression) 是能為一個(gè)或多個(gè)自變量與因變量之間關(guān)系建

    2024年02月12日
    瀏覽(50)
  • 卷積神經(jīng)網(wǎng)絡(luò)——上篇【深度學(xué)習(xí)】【PyTorch】【d2l】

    卷積神經(jīng)網(wǎng)絡(luò)——上篇【深度學(xué)習(xí)】【PyTorch】【d2l】

    5.1.1、理論部分 全連接層后,卷積層出現(xiàn)的意義? 一個(gè)足夠充分的照片數(shù)據(jù)集,輸入,全連接層參數(shù),GPU成本,訓(xùn)練時(shí)間是巨大的。 (convolutional neural networks,CNN)是機(jī)器學(xué)習(xí)利用自然圖像中一些已知結(jié)構(gòu)的創(chuàng)造性方法,需要更少的參數(shù),在處理圖像和其他類型的結(jié)構(gòu)化數(shù)據(jù)

    2024年02月12日
    瀏覽(23)
  • 卷積神經(jīng)網(wǎng)絡(luò)——中篇【深度學(xué)習(xí)】【PyTorch】【d2l】

    卷積神經(jīng)網(wǎng)絡(luò)——中篇【深度學(xué)習(xí)】【PyTorch】【d2l】

    5.5.1、理論部分 兩個(gè)? 卷積塊 ? 每個(gè)卷積塊中的基本單元是一個(gè)? 卷積層 ?、一個(gè) ? sigmoid激活函數(shù) ?和 ? 平均匯聚層 ? 三個(gè)? 全連接層密集塊 ? 早期神經(jīng)網(wǎng)絡(luò),先使用卷積層學(xué)習(xí)圖片空間信息,然后全連接層轉(zhuǎn)換到類別空間。 5.5.2、代碼實(shí)現(xiàn) 定義一個(gè) Sequential塊

    2024年02月11日
    瀏覽(31)
  • 卷積神經(jīng)網(wǎng)絡(luò)——下篇【深度學(xué)習(xí)】【PyTorch】【d2l】

    卷積神經(jīng)網(wǎng)絡(luò)——下篇【深度學(xué)習(xí)】【PyTorch】【d2l】

    5.10.1、理論部分 批量歸一化可以解決深層網(wǎng)絡(luò)中梯度消失和收斂慢的問題,通過固定每個(gè)批次的均值和方差來加速收斂,一般不改變模型精度。批量規(guī)范化已經(jīng)被證明是一種不可或缺的方法,它適用于幾乎所有圖像分類器。 批量規(guī)劃是一個(gè)線性變換 ,把參數(shù)的均值方差給拉

    2024年02月12日
    瀏覽(25)
  • PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(1)——神經(jīng)網(wǎng)絡(luò)與模型訓(xùn)練過程詳解

    PyTorch深度學(xué)習(xí)實(shí)戰(zhàn)(1)——神經(jīng)網(wǎng)絡(luò)與模型訓(xùn)練過程詳解

    人工神經(jīng)網(wǎng)絡(luò) ( Artificial Neural Network , ANN ) 是一種監(jiān)督學(xué)習(xí)算法,其靈感來自人類大腦的運(yùn)作方式。類似于人腦中神經(jīng)元連接和激活的方式,神經(jīng)網(wǎng)絡(luò)接受輸入,通過某些函數(shù)在網(wǎng)絡(luò)中進(jìn)行傳遞,導(dǎo)致某些后續(xù)神經(jīng)元被激活,從而產(chǎn)生輸出。函數(shù)越復(fù)雜,網(wǎng)絡(luò)對(duì)于輸入的數(shù)據(jù)擬

    2024年02月06日
    瀏覽(27)
  • 《動(dòng)手學(xué)深度學(xué)習(xí) Pytorch版》 9.4 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

    《動(dòng)手學(xué)深度學(xué)習(xí) Pytorch版》 9.4 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

    之前的序列學(xué)習(xí)中假設(shè)的目標(biāo)是在給定觀測(cè)的情況下對(duì)下一個(gè)輸出進(jìn)行建模,然而也存在需要后文預(yù)測(cè)前文的情況。 數(shù)學(xué)推導(dǎo)太復(fù)雜了,略。 雙向循環(huán)神經(jīng)網(wǎng)絡(luò)(bidirectional RNNs)添加了反向傳遞信息的隱藏層,以便更靈活地處理此類信息。 前向和反向隱狀態(tài)的更新如下:

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包