def check_avg_divisor(self, place): with fluid.dygraph.guard(place): input_np = np.random.random([2, 3, 32, 32, 32]).astype("float32") input = fluid.dygraph.to_variable(input_np) padding = 0 result = avg_pool3d(input, kernel_size=2, stride=2, padding=padding, divisor_override=8) result_np = pool3D_forward_naive(input_np, ksize=[2, 2, 2], strides=[2, 2, 2], paddings=[0, 0, 0], pool_type='avg') self.assertTrue(np.allclose(result.numpy(), result_np)) avg_pool3d_dg = paddle.nn.layer.AvgPool3d(kernel_size=2, stride=2, padding=0) result = avg_pool3d_dg(input) self.assertTrue(np.allclose(result.numpy(), result_np)) padding = [0, 0, 0, 0, 0, 0] result = avg_pool3d(input, kernel_size=2, stride=2, padding=padding, divisor_override=8) self.assertTrue(np.allclose(result.numpy(), result_np))
def check_avg_dygraph_padding_results(self, place): with fluid.dygraph.guard(place): input_np = np.random.random([2, 3, 32, 32, 32]).astype("float32") input = fluid.dygraph.to_variable(input_np) result = avg_pool3d(input, kernel_size=2, stride=2, padding=1, ceil_mode=False, count_include_pad=True) result_np = avg_pool3D_forward_naive(input_np, ksize=[2, 2, 2], strides=[2, 2, 2], paddings=[1, 1, 1], ceil_mode=False, exclusive=False) self.assertTrue(np.allclose(result.numpy(), result_np)) avg_pool3d_dg = paddle.nn.layer.AvgPool3d(kernel_size=2, stride=None, padding=1, ceil_mode=False, count_include_pad=True) result = avg_pool3d_dg(input) self.assertTrue(np.allclose(result.numpy(), result_np))
def forward(self, inputs): assert (len(inputs) == self.num_pathways ), "Input tensor does not contain {} pathway".format( self.num_pathways) pool_out = [] for pathway in range(self.num_pathways): if self.pool_size[pathway] is None: tmp_out = F.adaptive_avg_pool3d(x=inputs[pathway], output_size=(1, 1, 1), data_format="NCDHW") else: tmp_out = F.avg_pool3d(x=inputs[pathway], kernel_size=self.pool_size[pathway], stride=1, data_format="NCDHW") pool_out.append(tmp_out) x = paddle.concat(x=pool_out, axis=1) x = paddle.transpose(x=x, perm=(0, 2, 3, 4, 1)) # Perform dropout. if self.dropout_rate > 0.0: x = self.dropout(x) x = self.projection(x) # Performs fully convlutional inference. if not self.training: # attr of base class x = F.softmax(x, axis=4) x = paddle.mean(x, axis=[1, 2, 3]) x = paddle.reshape(x, shape=(x.shape[0], -1)) return x
def run1(): with fluid.dygraph.guard(): input_np = np.random.uniform( -1, 1, [2, 3, 32, 32, 32]).astype(np.float32) input_pd = fluid.dygraph.to_variable(input_np) padding = [[0, 1], [0, 0], [0, 0], [0, 0], [0, 0]] res_pd = avg_pool3d( input_pd, kernel_size=2, stride=2, padding=padding)
def run6(): with fluid.dygraph.guard(): input_np = np.random.uniform(-1, 1, [2, 3, 32, 32, 32]).astype( np.float32) input_pd = fluid.dygraph.to_variable(input_np) res_pd = avg_pool3d(input_pd, kernel_size=2, stride=2, padding="padding", data_format='NNNN')
def run_size_out_of_range(): with fluid.dygraph.guard(): input_np = np.random.uniform( -1, 1, [2, 3, 32, 32, 32]).astype(np.float32) input_pd = fluid.dygraph.to_variable(input_np) res_pd = avg_pool3d( input_pd, kernel_size=2, stride=0, padding="VALID", ceil_mode=True)
def check_avg_static_results(self, place): with fluid.program_guard(fluid.Program(), fluid.Program()): input = fluid.data(name="input", shape=[2, 3, 32, 32, 32], dtype="float32") result = avg_pool3d(input, kernel_size=2, stride=2, padding=0) input_np = np.random.random([2, 3, 32, 32, 32]).astype("float32") result_np = pool3D_forward_naive(input_np, ksize=[2, 2, 2], strides=[2, 2, 2], paddings=[0, 0, 0], pool_type='avg') exe = fluid.Executor(place) fetches = exe.run(fluid.default_main_program(), feed={"input": input_np}, fetch_list=[result]) self.assertTrue(np.allclose(fetches[0], result_np))
def check_avg_dygraph_results(self, place): with fluid.dygraph.guard(place): input_np = np.random.random([2, 3, 32, 32, 32]).astype("float32") input = fluid.dygraph.to_variable(input_np) result = avg_pool3d(input, kernel_size=2, stride=2, padding="SAME") result_np = pool3D_forward_naive(input_np, ksize=[2, 2, 2], strides=[2, 2, 2], paddings=[0, 0, 0], pool_type='avg', padding_algorithm="SAME") self.assertTrue(np.allclose(result.numpy(), result_np)) avg_pool3d_dg = paddle.nn.layer.AvgPool3d(kernel_size=2, stride=None, padding="SAME") result = avg_pool3d_dg(input) self.assertTrue(np.allclose(result.numpy(), result_np))