def test_bprop(self): r = [] for i in xrange(self.N): matrices = [] ncols = self.rng.random_integers(1, 3000) nrows = [0] row_slices = [] device_ids = [] for _ in xrange(self.rng.random_integers(1, 10)): _nrows = self.rng.random_integers(1, 2000) nrows.append(nrows[-1] + _nrows) if self.rng.choice([True, False]): device_ids.append(0) row_slices.append((nrows[-2], nrows[-1])) else: device_ids.append(None) matrices.append(self.rng.rand(_nrows, ncols).astype(np.float32)) true_labels = self.rng.randint(ncols, size=(nrows[-1], 1)).astype(np.int32) if not row_slices: r.append(True) continue output = {} for processor_type in ['gpu', 'cpu']: quagga.processor_type = processor_type qmatrices = [Connector(Matrix.from_npa(m), d_id) for m, d_id in izip(matrices, device_ids)] qtrue_labels = Connector(Matrix.from_npa(true_labels)) vstack_block = VerticalStackBlock(*qmatrices) sce_block = SoftmaxCeBlock(vstack_block.output, qtrue_labels) for m in qmatrices: m.fprop() qtrue_labels.fprop() vstack_block.fprop() sce_block.fprop() sce_block.bprop() vstack_block.bprop() output[processor_type] = [m.backward_matrix.to_host() for m in qmatrices if m.bpropagable] for dL_dm_gpu, dL_dm_cpu in izip(output['gpu'], output['cpu']): if not np.allclose(dL_dm_gpu, dL_dm_cpu): r.append(False) break else: r.append(True) self.assertEqual(sum(r), self.N)
def test_numpy_fprop(self): r = [] quagga.processor_type = 'gpu' for _ in xrange(self.N): matrices = [] ncols = self.rng.random_integers(1, 5000) for _ in xrange(self.rng.random_integers(1, 10)): nrows = self.rng.random_integers(1, 5000) matrices.append(self.rng.rand(nrows, ncols).astype(np.float32)) numpy_output = np.vstack([m for m in matrices]) matrices = [Connector(Matrix.from_npa(m)) for m in matrices] vstack_block = VerticalStackBlock(*matrices) for m in matrices: m.fprop() vstack_block.fprop() quagga_output = vstack_block.output.to_host() r.append(np.allclose(numpy_output, quagga_output)) self.assertEqual(sum(r), self.N)
def test_fprop(self): r = [] for i in xrange(self.N): matrices = [] ncols = self.rng.random_integers(1, 5000) for _ in xrange(self.rng.random_integers(1, 10)): nrows = self.rng.random_integers(1, 5000) matrices.append(self.rng.rand(nrows, ncols).astype(np.float32)) output = {} for processor_type in ['gpu', 'cpu']: quagga.processor_type = processor_type qmatrices = [Connector(Matrix.from_npa(m)) for m in matrices] for m in qmatrices: m.fprop() vstack_block = VerticalStackBlock(*qmatrices) vstack_block.fprop() output[processor_type] = vstack_block.output.to_host() r.append(np.allclose(output['gpu'], output['cpu'])) self.assertEqual(sum(r), self.N)
def test_bprop(self): r = [] for i in xrange(self.N): matrices = [] ncols = self.rng.random_integers(1, 3000) nrows = [0] row_slices = [] device_ids = [] for _ in xrange(self.rng.random_integers(1, 10)): _nrows = self.rng.random_integers(1, 2000) nrows.append(nrows[-1] + _nrows) if self.rng.choice([True, False]): device_ids.append(0) row_slices.append((nrows[-2], nrows[-1])) else: device_ids.append(None) matrices.append( self.rng.rand(_nrows, ncols).astype(np.float32)) true_labels = self.rng.randint(ncols, size=(nrows[-1], 1)).astype(np.int32) if not row_slices: r.append(True) continue output = {} for processor_type in ['gpu', 'cpu']: quagga.processor_type = processor_type qmatrices = [ Connector(Matrix.from_npa(m), d_id) for m, d_id in izip(matrices, device_ids) ] qtrue_labels = Connector(Matrix.from_npa(true_labels)) vstack_block = VerticalStackBlock(*qmatrices) sce_block = SoftmaxCeBlock(vstack_block.output, qtrue_labels) for m in qmatrices: m.fprop() qtrue_labels.fprop() vstack_block.fprop() sce_block.fprop() sce_block.bprop() vstack_block.bprop() output[processor_type] = [ m.backward_matrix.to_host() for m in qmatrices if m.bpropagable ] for dL_dm_gpu, dL_dm_cpu in izip(output['gpu'], output['cpu']): if not np.allclose(dL_dm_gpu, dL_dm_cpu): r.append(False) break else: r.append(True) self.assertEqual(sum(r), self.N)