→ followwar: pytorch是 b,c,h,w04/18 00:02
→ followwar: 1. 你可以考慮用crop04/18 00:02
→ followwar: 2.你沒計算loss沒有backward 不會有gradient04/18 00:03
我的架構大概是
for each圖片:
y=model(x)
append(y_,y)
loss=triplet_loss(y_,labels)
opt.zero_grad()
loss.backward()
opt.step()
原本將圖片這批丟到model(就是append先,迴圈外才做model)是可行的
但只有一張圖片的y也沒有辦法算loss跟gradient;
append在一起為何會算不出來(loss降不了)
→ yoyololicon: 做gradient accumulation ㄅ04/18 14:03
推 sxy67230: 1.resize可調整插值方法,試試看是否還有嚴重失真,或是04/18 14:49
→ sxy67230: crop,或是直接在Convolution layer跟Fully connected l04/18 14:49
→ sxy67230: ayer之間塞入一些特殊池化層,因為尺度固定是來自於FCL04/18 14:49
→ sxy67230: 層便於計算而採用的。04/18 14:49
我沒有fully connected layer喔 但是一個batch丟入model算必須要[n,c,l,w] l*w的圖片
大小要一致 不然只能一張一張丟 可是如上 會發生找不出梯度的問題?
推 sxy67230: 2. 你直接印出損失值看看是否是損失函數出來的值是否有04/18 14:51
→ sxy67230: 問題,或是你沒有更新參數自然沒有梯度。04/18 14:51
推 world4jason: gradient accumulation遇到BN會GG 我最近也在思考這04/18 19:57
→ world4jason: 個問題04/18 19:57
推 illegalplan: Padding, crop一起做 就當作data augmentation04/19 14:54
padding似乎不失為一個好方法 謝謝提議
※ 編輯: wang19980531 (117.19.228.161 臺灣), 04/20/2020 07:30:48
感謝大家的意見,抱歉這麼晚才做回應!
※ 編輯: wang19980531 (117.19.228.161 臺灣), 04/20/2020 07:34:46
→ followwar: 你的triplet loss的用法對嗎? 應該是04/20 11:53
→ followwar: (anchor, positive, negative)04/20 11:54
我用的是別人寫好的hard都triplet loss
應該是online的就是只要給一串label和向量他會自己去算loss
※ 編輯: wang19980531 (61.221.242.34 臺灣), 04/20/2020 12:10:01
推 sxy67230: 如果你是用online triplet記得要去檢查一下target是要 04/20 14:32
→ sxy67230: 有重複類別,不然輸出矩陣計算後會變成nan。另外還有tri 04/20 14:32
→ sxy67230: plets loss計算是採用歐式距離,可能要注意壓縮出來的 04/20 14:32
→ sxy67230: 結果 04/20 14:32
推 janus7799: 長邊resize到固定長度,短邊padding 04/21 21:01
→ diabolica: padding試試看 04/22 21:46