def _run_testing(x_0, s_0, b_0, rm_0, rv_0, m_0=0.1): # np api y_1 = _np_bn_testing(x_0, s_0, b_0, rm_0, rv_0, momentum=m_0) # singa api hndl = singa_api.BatchNormHandle( m_0, tensor.Tensor(device=dev, data=x_0).data) y_2_c = singa_api.CpuBatchNormForwardInference( hndl, tensor.Tensor(device=dev, data=x_0).data, tensor.Tensor(device=dev, data=s_0).data, tensor.Tensor(device=dev, data=b_0).data, tensor.Tensor(device=dev, data=rm_0).data, tensor.Tensor(device=dev, data=rv_0).data) #print(y_1) #print(tensor.to_numpy(_cTensor_to_pyTensor(y_2_c))) np.testing.assert_array_almost_equal( y_1, tensor.to_numpy(_cTensor_to_pyTensor(y_2_c)), decimal=5) return
def test_batch_norm(self): x_shape = [2, 2] x = singa_wrap.Tensor(x_shape) x.CopyFloatDataFromHostPtr([1, 2, 3, 4]) dy_shape = [2, 2] dy = singa_wrap.Tensor(dy_shape) dy.CopyFloatDataFromHostPtr([4, 3, 2, 1]) scale_shape = [2] scale = singa_wrap.Tensor(scale_shape) scale.CopyFloatDataFromHostPtr([1, 1]) bias_shape = [2] bias = singa_wrap.Tensor(bias_shape) bias.CopyFloatDataFromHostPtr([0, 0]) mean_shape = [2] mean = singa_wrap.Tensor(mean_shape) mean.CopyFloatDataFromHostPtr([1, 2]) var = singa_wrap.Tensor(mean_shape) var.CopyFloatDataFromHostPtr([1, 2]) handle = singa_wrap.BatchNormHandle(0.9, x) # 2D Forward Inference y = singa_wrap.CpuBatchNormForwardInference(handle, x, scale, bias, mean, var) self.assertListEqual([2, 2], list(y.shape())) # 2D Forward Training (y, mean_updated, var_updated) = singa_wrap.CpuBatchNormForwardTraining( handle, x, scale, bias, mean, var) self.assertListEqual([2, 2], list(y.shape())) self.assertListEqual([2], list(mean_updated.shape())) self.assertListEqual([2], list(var_updated.shape())) # 2D Backward dx (dx, dscale, dbias) = singa_wrap.CpuBatchNormBackwardx(handle, y, dy, x, scale, bias, mean_updated, var_updated) self.assertListEqual([2, 2], list(dx.shape())) self.assertListEqual([2], list(dscale.shape())) self.assertListEqual([2], list(dbias.shape())) # 4D Forward Inference x2_shape = [1, 2, 4, 4] x2 = singa_wrap.Tensor(x2_shape) x2.CopyFloatDataFromHostPtr( [0.0736655, 0.0459045, 0.0779517, 0.0771059, 0.0586862, 0.0561263, 0.0708457, 0.0977273, 0.0405025, -0.170897, 0.0208982, 0.136865, -0.0367905, -0.0618205, -0.0103908, -0.0522777, -0.122161, -0.025427, -0.0718576, -0.185941, 0.0166533, 0.178679, -0.0576606, -0.137817, 0.150676, 0.153442, -0.0929899, -0.148675, -0.112459, -0.106284, -0.103074, -0.0668811]) handle = singa_wrap.BatchNormHandle(0.9, x) y2 = singa_wrap.CpuBatchNormForwardInference(handle, x2, scale, bias, mean, var) self.assertListEqual([1, 2, 4, 4], list(y2.shape()))