作業記錄 WEEK5

2021-10-19 13:32:05 字數 2880 閱讀 7830

triplet計算細節

訓練過程中的呼叫

import torch

from torch.autograd import function

from torch.nn.modules.distance import pairwisedistance

class

tripletloss

(function)

:def

__init__

(self, margin)

:super

(tripletloss, self)

.__init__(

) self.margin = margin

self.pdist = pairwisedistance(2)

defforward

(self, anchor, positive, negative)

:# [在triplet_loss.py 的 13行位置處,填寫**,完成triplet loss的計算]

pos_dist=self.pdist.forward(anchor,positive)

neg_dist=self.pdist.forward(anchor,negative)

hinge_dist = torch.clamp(self.margin + pos_dist - neg_dist,

min=

0.0)

loss = torch.mean(hinge_dist)

return loss

tri

plet

loss

=max

(0,m

argi

n+ds

+dns

)tripletloss = max(0, margin + d_s +d_)

triple

tlos

s=ma

x(0,

marg

in+d

s​+d

ns​)

其中d

sd_s

ds​ 為anchor和正樣本的距離,dns

d_dn

s​為anchor和負樣本的距離,margin為自己設定的乙個控制loss嚴苛程度的值。將anchor、正樣本、負樣本分別通過網路得到feature,計算a與p、 a與n之間的差的l2norm,得到d

sd_s

ds​ 、dns

d_dn

s​,代入計算。

因為本次是小資料集訓練,所以沒有將原始資料集解壓,而是用的小樣本的資料集。所以要修改訓練資料的生成路徑:

# 訓練資料生成器

train_dataloader = torch.utils.data.dataloader(

dataset=traindataset(

face_dir=

"../../datasets/vggface2_train_face"

, csv_name=

'../../datasets/vggface2_train_face.csv'

, num_triplets=

1000

, training_triplets_path=

'../../datasets/training_triplets_1000_20201101.npy'

, transform=train_data_transforms,

predicter_path=

'shape_predictor_68_face_landmarks.dat'

, img_size=

256)

, batch_size=30,

num_workers=0,

shuffle=

false

)

順便還發現沒有上傳landmark模型,補上了。

再次訓練:

發現已經成功載入進1000個三元組了,然後報錯是在訓練完儲存模型的時候,沒有對應目錄。新建乙個對應的目錄。可以makedir也可以直接手動新建。

增加了epoch的顯示,讓訓練過程心裡有個數,原始資料是1900個epoch,等不了那麼久,先跑通更重要,於是改了50。

# 打卡時間、epoch

total_time_start = time.time(

)start_epoch = start_epoch

end_epoch = start_epoch +

50#原來是1900 太多了

# 匯入l2計算的

l2_distance = pairwisedistance(2)

# 為了打日誌先預製個最低auc和最佳acc在前頭

大概十幾個epoch就收斂到0了,感覺是過擬合了,估計是樣本太少了。相比這些小數量的樣本,訓練的epoch太多使其產生過擬合的情況。

week5 作業A 最大矩形

給乙個直方圖,求直方圖中的最大矩形的面積。例如,下面這個中直方圖的高度從左到右分別是2,1,4,5,1,3,3,他們的寬都是1,其中最大的矩形是陰影部分。input 輸入包含多組資料。每組資料用乙個整數n來表示直方圖中小矩形的個數,你可以假定1 n 100000.然後接下來n個整數h1,hn,滿足 ...

week5 作業D 滑動視窗

zjm 有乙個長度為 n 的數列和乙個大小為 k 的視窗,視窗可以在數列上來回移動.現在 zjm 想知道在視窗從左往右滑的時候,每次視窗內數的最大值和最小值分別是多少.例如 數列是 1 3 1 3 5 3 6 7 其中 k 等於 3.輸入有兩行。第一行兩個整數n和k分別表示數列的長度和滑動視窗的大小...

week5作業題 A 最大矩形

給乙個直方圖,求直方圖中的最大矩形的面積。例如,下面這個中直方圖的高度從左到右分別是2,1,4,5,1,3,3,他們的寬都是1,其中最大的矩形是陰影部分。input 輸入包含多組資料。每組資料用乙個整數n來表示直方圖中小矩形的個數,你可以假定1 n 100000.然後接下來n個整數h1,hn,滿足 ...