def test_bprop(self): r = [] for i in xrange(self.N): matrices = [] nrows = self.rng.random_integers(1, 3000) ncols = [0] col_slices = [] device_ids = [] for _ in xrange(self.rng.random_integers(1, 10)): _ncols = self.rng.random_integers(1, 2000) ncols.append(ncols[-1] + _ncols) if self.rng.choice([True, False]): device_ids.append(0) col_slices.append((ncols[-2], ncols[-1])) else: device_ids.append(None) matrices.append( self.rng.rand(nrows, _ncols).astype(np.float32)) true_labels = self.rng.randint(ncols[-1], size=(nrows, 1)).astype(np.int32) if not col_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)) hstack_block = HorizontalStackBlock(*qmatrices) sce_block = SoftmaxCeBlock(hstack_block.output, qtrue_labels) for m in qmatrices: m.fprop() qtrue_labels.fprop() hstack_block.fprop() sce_block.fprop() sce_block.bprop() hstack_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_bprop(self): r = [] for i in xrange(self.N): matrices = [] nrows = self.rng.random_integers(1, 3000) ncols = [0] col_slices = [] device_ids = [] for _ in xrange(self.rng.random_integers(1, 10)): _ncols = self.rng.random_integers(1, 2000) ncols.append(ncols[-1] + _ncols) if self.rng.choice([True, False]): device_ids.append(0) col_slices.append((ncols[-2], ncols[-1])) else: device_ids.append(None) matrices.append(self.rng.rand(nrows, _ncols).astype(np.float32)) true_labels = self.rng.randint(ncols[-1], size=(nrows, 1)).astype(np.int32) if not col_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)) hstack_block = HorizontalStackBlock(*qmatrices) sce_block = SoftmaxCeBlock(hstack_block.output, qtrue_labels) for m in qmatrices: m.fprop() qtrue_labels.fprop() hstack_block.fprop() sce_block.fprop() sce_block.bprop() hstack_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)