mirror of https://github.com/Jittor/Jittor
add elu
This commit is contained in:
parent
75e60d74b4
commit
1f8ea20f01
|
@ -154,6 +154,7 @@ def get_init_var_rand(shape, dtype):
|
||||||
def relu(x): return jt.ternary((x>0.0), x, jt.broadcast_var(0.0, x))
|
def relu(x): return jt.ternary((x>0.0), x, jt.broadcast_var(0.0, x))
|
||||||
def leaky_relu(x, scale=0.01): return jt.ternary(x>0, x, x*scale)
|
def leaky_relu(x, scale=0.01): return jt.ternary(x>0, x, x*scale)
|
||||||
def relu6(x): return jt.minimum(jt.maximum(x, 0.0), 6.0)
|
def relu6(x): return jt.minimum(jt.maximum(x, 0.0), 6.0)
|
||||||
|
def elu(x,alpha=1.0):return jt.ternary(x>0,x,alpha*(x.exp()-1))
|
||||||
def sign(x):
|
def sign(x):
|
||||||
one = jt.ones(x.shape)
|
one = jt.ones(x.shape)
|
||||||
x = jt.ternary(x>0, one, x)
|
x = jt.ternary(x>0, one, x)
|
||||||
|
@ -165,6 +166,13 @@ def gelu(x):
|
||||||
r = erf*x*.5
|
r = erf*x*.5
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
class ELU(Module):
|
||||||
|
def __init__(self,alpha=1.0):
|
||||||
|
self.alpha=alpha
|
||||||
|
|
||||||
|
def execute(self,x):
|
||||||
|
return elu(x,self.alpha)
|
||||||
|
|
||||||
class PReLU(Module):
|
class PReLU(Module):
|
||||||
def __init__(self, num_parameters=1, init_=0.25):
|
def __init__(self, num_parameters=1, init_=0.25):
|
||||||
self.num_parameters = num_parameters
|
self.num_parameters = num_parameters
|
||||||
|
@ -238,6 +246,30 @@ def smooth_l1_loss(y_true, y_pred,reduction="mean"):
|
||||||
else:
|
else:
|
||||||
raise ValueError(f'not support {reduction}')
|
raise ValueError(f'not support {reduction}')
|
||||||
|
|
||||||
|
def nll_loss(output,target,weight=None,ignore_index=-100,reduction='mean'):
|
||||||
|
assert output.ndim<=2 and output.ndim>0 and target.ndim==1
|
||||||
|
n_classes = output.shape[-1]
|
||||||
|
assert weight is None or weight.numel()==n_classes
|
||||||
|
assert ignore_index<0 or ignore_index<n_classes
|
||||||
|
if weight is None:
|
||||||
|
weight = jt.ones((n_classes,))
|
||||||
|
if ignore_index>0:
|
||||||
|
weight[ignore_index]=0
|
||||||
|
if output.ndim==2:
|
||||||
|
index = jt.index((output.shape[0],),dim=0)
|
||||||
|
loss = -output[index,target]*weight[target]
|
||||||
|
else:
|
||||||
|
loss = -output[target[0]]*weight[target[0]]
|
||||||
|
if reduction=="mean":
|
||||||
|
total_weight = weight[target].sum() if output.ndim==2 else weight[target[0]].sum()
|
||||||
|
return loss.sum()/total_weight
|
||||||
|
elif reduction=="sum":
|
||||||
|
return loss.sum()
|
||||||
|
elif reduction=="none":
|
||||||
|
return loss
|
||||||
|
else:
|
||||||
|
raise ValueError(f'not support {reduction}')
|
||||||
|
|
||||||
class CrossEntropyLoss(Module):
|
class CrossEntropyLoss(Module):
|
||||||
def __init__(self,ignore_index=None):
|
def __init__(self,ignore_index=None):
|
||||||
self.ignore_index = ignore_index
|
self.ignore_index = ignore_index
|
||||||
|
@ -330,6 +362,9 @@ class Dropout(Module):
|
||||||
output = output * noise / (1.0 - self.p) # div keep prob
|
output = output * noise / (1.0 - self.p) # div keep prob
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
def dropout(x,p=0.5,is_train=False):
|
||||||
|
return Dropout(p=p,is_train=is_train)(x)
|
||||||
|
|
||||||
class Linear(Module):
|
class Linear(Module):
|
||||||
def __init__(self, in_features, out_features, bias=True):
|
def __init__(self, in_features, out_features, bias=True):
|
||||||
self.in_features = in_features
|
self.in_features = in_features
|
||||||
|
|
Loading…
Reference in New Issue