這種方式是為了防止label裡面有nan值,但沒考慮是否為零值。這裡以pytorch進行舉例。
def
masked_mape
(preds, labels, null_val=np.nan)
:if np.isnan(null_val)
: mask =
~torch.isnan(labels)
else
: mask =
(labels!=null_val)
mask = mask.
float()
mask /= torch.mean(
(mask)
) mask = torch.where(torch.isnan(mask)
, torch.zeros_like(mask)
, mask)
loss = torch.
abs(
(preds-labels)
/labels)
loss = loss * mask
loss = torch.where(torch.isnan(loss)
, torch.zeros_like(loss)
, loss)
return torch.mean(loss)
這種方式考慮了分母是否為零值,預設label不為nan(提前保證,或者使用sklearn.utils.validation裡面的cheak_array()函式來檢查)。
def
mape_loss_func
(preds,labels)
: mask=labels!=
0return np.fabs(
(labels[mask]
-preds[mask]
)/labels[mask]
).mean(
)
這種方式是推薦的,因為分母太小,會導致mape太大,所以,把它限定住,非常合適。如果需要,也可以對**值進行一定的限制。
(下面的方法以label和**值都在0-1之間進行舉例)
def
mape_loss_func2
(preds,labels)
:return np.fabs(
(label-pred)
/np.clip(label,
0.1,1)
).mean(
)
居中的幾種實現方式
如果需要居中的是內聯元素的話,給父級元素加上text align center即可。如果是塊級元素,那就給自身加上margin 0 auto,上下的margin為0,左右auto就會自動居中。如果多個塊級元素放到一行並居中,你可以使用display inling block把他們變成內聯元素,然後再...
spring aop 的幾種實現方式
博主只用過或者了解過三種用法 1.其於 實現 2.原生的切面 3.aspectj註解驅動的切面 個人感覺第一種用起來比較簡單。也比較好理解,主要有以下的配置檔案 這樣就可以簡單的完成乙個aop 的實現 了 第二種 是基於在原始的標籤在配置的aop 就是注入到spring容器中了 網上的另一中寫法 a...
實現繼承的幾種方式
要搞懂js繼承,我們首先要理解原型鏈 每乙個例項物件都有乙個 proto 屬性 隱式原型 在js內部用來查詢原型鏈 每乙個建構函式都有prototype屬性 顯式原型 用來顯示修改物件的原型,例項.proto 建構函式.prototype 原型。原型鏈的特點就是 通過例項.proto 查詢原型上的屬...