20
20
import paddle
21
21
import paddle .fluid as fluid
22
22
from paddle .io import Dataset , IterableDataset , TensorDataset , \
23
- ComposeDataset , ChainDataset , DataLoader
24
- from paddle .fluid .dygraph .base import to_variable
23
+ ComposeDataset , ChainDataset , DataLoader , random_split , Subset
25
24
26
25
IMAGE_SIZE = 32
27
26
@@ -54,14 +53,14 @@ def __iter__(self):
54
53
55
54
class TestTensorDataset (unittest .TestCase ):
56
55
def run_main (self , num_workers , places ):
57
- fluid .default_startup_program ().random_seed = 1
58
- fluid .default_main_program ().random_seed = 1
59
- place = fluid .CPUPlace ()
56
+ paddle . static .default_startup_program ().random_seed = 1
57
+ paddle . static .default_main_program ().random_seed = 1
58
+ place = paddle .CPUPlace ()
60
59
with fluid .dygraph .guard (place ):
61
60
input_np = np .random .random ([16 , 3 , 4 ]).astype ('float32' )
62
- input = to_variable (input_np )
61
+ input = paddle . to_tensor (input_np )
63
62
label_np = np .random .random ([16 , 1 ]).astype ('int32' )
64
- label = to_variable (label_np )
63
+ label = paddle . to_tensor (label_np )
65
64
66
65
dataset = TensorDataset ([input , label ])
67
66
assert len (dataset ) == 16
@@ -83,17 +82,17 @@ def run_main(self, num_workers, places):
83
82
assert np .allclose (label .numpy (), label_np [i ])
84
83
85
84
def test_main (self ):
86
- places = [fluid .CPUPlace ()]
87
- if fluid . core .is_compiled_with_cuda ():
88
- places .append (fluid .CUDAPlace (0 ))
85
+ places = [paddle .CPUPlace ()]
86
+ if paddle .is_compiled_with_cuda ():
87
+ places .append (paddle .CUDAPlace (0 ))
89
88
for p in places :
90
89
self .run_main (num_workers = 0 , places = p )
91
90
92
91
93
92
class TestComposeDataset (unittest .TestCase ):
94
93
def test_main (self ):
95
- fluid .default_startup_program ().random_seed = 1
96
- fluid .default_main_program ().random_seed = 1
94
+ paddle . static .default_startup_program ().random_seed = 1
95
+ paddle . static .default_main_program ().random_seed = 1
97
96
98
97
dataset1 = RandomDataset (10 )
99
98
dataset2 = RandomDataset (10 )
@@ -110,10 +109,104 @@ def test_main(self):
110
109
assert np .allclose (label2 , label2_t )
111
110
112
111
112
+ class TestRandomSplitApi (unittest .TestCase ):
113
+ def test_main (self ):
114
+ paddle .static .default_startup_program ().random_seed = 1
115
+ paddle .static .default_main_program ().random_seed = 1
116
+
117
+ dataset1 , dataset2 = paddle .io .random_split (range (5 ), [1 , 4 ])
118
+
119
+ self .assertTrue (len (dataset1 ) == 1 )
120
+ self .assertTrue (len (dataset2 ) == 4 )
121
+
122
+ elements_list = list (range (5 ))
123
+
124
+ for _ , val in enumerate (dataset1 ):
125
+ elements_list .remove (val )
126
+
127
+ for _ , val in enumerate (dataset2 ):
128
+ elements_list .remove (val )
129
+
130
+ self .assertTrue (len (elements_list ) == 0 )
131
+
132
+
133
+ class TestRandomSplitError (unittest .TestCase ):
134
+ def test_errors (self ):
135
+ paddle .static .default_startup_program ().random_seed = 1
136
+ paddle .static .default_main_program ().random_seed = 1
137
+
138
+ self .assertRaises (ValueError , paddle .io .random_split , range (5 ), [3 , 8 ])
139
+ self .assertRaises (ValueError , paddle .io .random_split , range (5 ), [8 ])
140
+ self .assertRaises (ValueError , paddle .io .random_split , range (5 ), [])
141
+
142
+
143
+ class TestSubsetDataset (unittest .TestCase ):
144
+ def run_main (self , num_workers , places ):
145
+ paddle .static .default_startup_program ().random_seed = 1
146
+ paddle .static .default_main_program ().random_seed = 1
147
+
148
+ input_np = np .random .random ([5 , 3 , 4 ]).astype ('float32' )
149
+ input = paddle .to_tensor (input_np )
150
+ label_np = np .random .random ([5 , 1 ]).astype ('int32' )
151
+ label = paddle .to_tensor (label_np )
152
+
153
+ dataset = TensorDataset ([input , label ])
154
+ even_subset = paddle .io .Subset (dataset , [0 , 2 , 4 ])
155
+ odd_subset = paddle .io .Subset (dataset , [1 , 3 ])
156
+
157
+ assert len (dataset ) == 5
158
+
159
+ def prepare_dataloader (dataset ):
160
+ return DataLoader (
161
+ dataset ,
162
+ places = places ,
163
+ num_workers = num_workers ,
164
+ batch_size = 1 ,
165
+ drop_last = True )
166
+
167
+ dataloader = prepare_dataloader (dataset )
168
+ dataloader_even = prepare_dataloader (even_subset )
169
+ dataloader_odd = prepare_dataloader (odd_subset )
170
+
171
+ def assert_basic (input , label ):
172
+ assert len (input ) == 1
173
+ assert len (label ) == 1
174
+ assert input .shape == [1 , 3 , 4 ]
175
+ assert label .shape == [1 , 1 ]
176
+ assert isinstance (input , paddle .Tensor )
177
+ assert isinstance (label , paddle .Tensor )
178
+
179
+ elements_list = list ()
180
+ for _ , (input , label ) in enumerate (dataloader ()):
181
+ assert_basic (input , label )
182
+ elements_list .append (label )
183
+
184
+ for _ , (input , label ) in enumerate (dataloader_even ()):
185
+ assert_basic (input , label )
186
+ elements_list .remove (label )
187
+
188
+ odd_list = list ()
189
+ for _ , (input , label ) in enumerate (dataloader_odd ()):
190
+ assert_basic (input , label )
191
+ odd_list .append (label )
192
+
193
+ self .assertEqual (odd_list , elements_list )
194
+
195
+ def test_main (self ):
196
+ paddle .static .default_startup_program ().random_seed = 1
197
+ paddle .static .default_main_program ().random_seed = 1
198
+
199
+ places = [paddle .CPUPlace ()]
200
+ if paddle .is_compiled_with_cuda ():
201
+ places .append (paddle .CUDAPlace (0 ))
202
+ for p in places :
203
+ self .run_main (num_workers = 0 , places = p )
204
+
205
+
113
206
class TestChainDataset (unittest .TestCase ):
114
207
def run_main (self , num_workers , places ):
115
- fluid .default_startup_program ().random_seed = 1
116
- fluid .default_main_program ().random_seed = 1
208
+ paddle . static .default_startup_program ().random_seed = 1
209
+ paddle . static .default_main_program ().random_seed = 1
117
210
118
211
dataset1 = RandomIterableDataset (10 )
119
212
dataset2 = RandomIterableDataset (10 )
@@ -135,9 +228,9 @@ def run_main(self, num_workers, places):
135
228
idx += 1
136
229
137
230
def test_main (self ):
138
- places = [fluid .CPUPlace ()]
139
- if fluid . core .is_compiled_with_cuda ():
140
- places .append (fluid .CUDAPlace (0 ))
231
+ places = [paddle .CPUPlace ()]
232
+ if paddle .is_compiled_with_cuda ():
233
+ places .append (paddle .CUDAPlace (0 ))
141
234
for p in places :
142
235
self .run_main (num_workers = 0 , places = p )
143
236
0 commit comments