13
13
# limitations under the License.
14
14
import unittest
15
15
import numpy as np
16
+ import paddle .fluid .core as core
16
17
from op_test import OpTest
17
18
18
19
19
- class TestElementwiseOp (OpTest ):
20
+ class TestElementwiseAddOp (OpTest ):
20
21
def setUp (self ):
21
22
self .op_type = "elementwise_add"
23
+ self .dtype = np .float32
24
+ init_dtype ()
25
+
26
+ x = np .random .uniform (0.1 , 1 , [13 , 17 ]).astype (self .dtype )
27
+ y = np .random .uniform (0.1 , 1 , [13 , 17 ]).astype (self .dtype )
22
28
self .inputs = {
23
- 'X' : np . random . uniform ( 0.1 , 1 , [ 13 , 17 ]). astype ( "float32" ),
24
- 'Y' : np . random . uniform ( 0.1 , 1 , [ 13 , 17 ]). astype ( "float32" )
29
+ 'X' : OpTest . np_dtype_to_fluid_dtype ( x ),
30
+ 'Y' : OpTest . np_dtype_to_fluid_dtype ( y )
25
31
}
26
- self .outputs = {'Out' : np .add (self . inputs [ 'X' ], self . inputs [ 'Y' ] )}
32
+ self .outputs = {'Out' : np .add (x , y )}
27
33
28
34
def test_check_output (self ):
29
35
self .check_output ()
30
36
31
37
def test_check_grad_normal (self ):
38
+ if self .dtype == np .float16 :
39
+ return
32
40
self .check_grad (['X' , 'Y' ], 'Out' , max_relative_error = 0.005 )
33
41
34
42
def test_check_grad_ingore_x (self ):
43
+ if self .dtype == np .float16 :
44
+ return
35
45
self .check_grad (
36
46
['Y' ], 'Out' , max_relative_error = 0.005 , no_grad_set = set ("X" ))
37
47
38
48
def test_check_grad_ingore_y (self ):
49
+ if self .dtype == np .float16 :
50
+ return
39
51
self .check_grad (
40
52
['X' ], 'Out' , max_relative_error = 0.005 , no_grad_set = set ('Y' ))
41
53
54
+ def init_dtype ():
55
+ pass
56
+
57
+
58
+ class TestFP16ElementwiseAddOp (TestElementwiseAddOp ):
59
+ def init_dtype ():
60
+ self .dtype = np .float16
61
+
62
+ def test_check_output (self ):
63
+ if core .is_compiled_with_cuda ():
64
+ place = core .CUDAPlace (0 )
65
+ if core .is_float16_supported (place ):
66
+ self .check_output_with_place (place , atol = 1e-3 )
67
+
42
68
43
- class TestElementwiseAddOp_scalar (TestElementwiseOp ):
69
+ class TestElementwiseAddOp_scalar (TestElementwiseAddOp ):
44
70
def setUp (self ):
45
71
self .op_type = "elementwise_add"
46
72
self .inputs = {
@@ -50,7 +76,7 @@ def setUp(self):
50
76
self .outputs = {'Out' : self .inputs ['X' ] + self .inputs ['Y' ]}
51
77
52
78
53
- class TestElementwiseAddOp_scalar2 (TestElementwiseOp ):
79
+ class TestElementwiseAddOp_scalar2 (TestElementwiseAddOp ):
54
80
def setUp (self ):
55
81
self .op_type = "elementwise_add"
56
82
self .inputs = {
@@ -60,7 +86,7 @@ def setUp(self):
60
86
self .outputs = {'Out' : self .inputs ['X' ] + self .inputs ['Y' ]}
61
87
62
88
63
- class TestElementwiseAddOp_Vector (TestElementwiseOp ):
89
+ class TestElementwiseAddOp_Vector (TestElementwiseAddOp ):
64
90
def setUp (self ):
65
91
self .op_type = "elementwise_add"
66
92
self .inputs = {
@@ -70,7 +96,7 @@ def setUp(self):
70
96
self .outputs = {'Out' : np .add (self .inputs ['X' ], self .inputs ['Y' ])}
71
97
72
98
73
- class TestElementwiseAddOp_broadcast_0 (TestElementwiseOp ):
99
+ class TestElementwiseAddOp_broadcast_0 (TestElementwiseAddOp ):
74
100
def setUp (self ):
75
101
self .op_type = "elementwise_add"
76
102
self .inputs = {
@@ -84,7 +110,7 @@ def setUp(self):
84
110
}
85
111
86
112
87
- class TestElementwiseAddOp_broadcast_1 (TestElementwiseOp ):
113
+ class TestElementwiseAddOp_broadcast_1 (TestElementwiseAddOp ):
88
114
def setUp (self ):
89
115
self .op_type = "elementwise_add"
90
116
self .inputs = {
@@ -98,7 +124,7 @@ def setUp(self):
98
124
}
99
125
100
126
101
- class TestElementwiseAddOp_broadcast_2 (TestElementwiseOp ):
127
+ class TestElementwiseAddOp_broadcast_2 (TestElementwiseAddOp ):
102
128
def setUp (self ):
103
129
self .op_type = "elementwise_add"
104
130
self .inputs = {
@@ -111,7 +137,7 @@ def setUp(self):
111
137
}
112
138
113
139
114
- class TestElementwiseAddOp_broadcast_3 (TestElementwiseOp ):
140
+ class TestElementwiseAddOp_broadcast_3 (TestElementwiseAddOp ):
115
141
def setUp (self ):
116
142
self .op_type = "elementwise_add"
117
143
self .inputs = {
@@ -125,7 +151,7 @@ def setUp(self):
125
151
}
126
152
127
153
128
- class TestElementwiseAddOp_broadcast_4 (TestElementwiseOp ):
154
+ class TestElementwiseAddOp_broadcast_4 (TestElementwiseAddOp ):
129
155
def setUp (self ):
130
156
self .op_type = "elementwise_add"
131
157
self .inputs = {
@@ -139,7 +165,7 @@ def setUp(self):
139
165
}
140
166
141
167
142
- class TestElementwiseAddOp_rowwise_add_0 (TestElementwiseOp ):
168
+ class TestElementwiseAddOp_rowwise_add_0 (TestElementwiseAddOp ):
143
169
def setUp (self ):
144
170
self .op_type = "elementwise_add"
145
171
self .inputs = {
@@ -153,7 +179,7 @@ def setUp(self):
153
179
}
154
180
155
181
156
- class TestElementwiseAddOp_rowwise_add_1 (TestElementwiseOp ):
182
+ class TestElementwiseAddOp_rowwise_add_1 (TestElementwiseAddOp ):
157
183
def setUp (self ):
158
184
self .op_type = "elementwise_add"
159
185
self .inputs = {
0 commit comments