-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinitializer.py
38 lines (37 loc) · 1.23 KB
/
initializer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import math
class initializer(object):
def __init__(self):
pass
def initialize(self,tensor):
pass
class xavier_initializer(initializer):
def __init__(self,type="uniform"):
super(xavier_initializer,self).__init__()
self.type=type
def initialize(self,tensor):
s=sum(list(tensor.size()))
if self.type=="gaussian":
x = math.sqrt(2. / s)
return tensor.normal_(std=x)
if self.type=="uniform":
x = math.sqrt(6. / s)
return tensor.uniform_(-x, x)
class gaussian_initializer(initializer):
def __init__(self,mean=0.0,std=1.0):
super(gaussian_initializer,self).__init__()
self.mean=mean
self.std=std
def initialize(self,tensor):
return tensor.normal_(mean=self.mean,std=self.std)
class zeros_initializer(initializer):
def __init__(self):
super(zeros_initializer,self).__init__()
def initialize(self,tensor):
return tensor.zero_()
class uniform_initializer(initializer):
def __init__(self,a=-1.0,b=1.0):
super(uniform_initializer,self).__init__()
self.a=a
self.b=b
def initialize(self,tensor):
return tensor.uniform_(self.a,self.b)