|
- from __future__ import absolute_import
-
- import ctypes
- from .._base import _LIB
- from .. import ndarray as _nd
-
-
- def pad(in_arr, out_arr, paddings, mode='CONSTANT', constant_values=0, stream=None):
- assert isinstance(in_arr, _nd.NDArray)
- assert isinstance(out_arr, _nd.NDArray)
- padding_arr = []
- for i in range(len(paddings)):
- for j in range(len(paddings[0])):
- padding_arr.append(paddings[i][j])
- pad_len = len(padding_arr)
- padding_c_arr = (ctypes.c_int * pad_len)(*padding_arr)
- f_type = 3
- if mode == 'CONSTANT':
- f_type = 0
- elif mode == 'REFLECT':
- f_type = 1
- elif mode == 'SYMMETRIC':
- f_type = 2
- assert(f_type <= 2)
- _LIB.DLGpuPad(in_arr.handle, out_arr.handle, padding_c_arr,
- pad_len, f_type, constant_values, stream.handle if stream else None)
-
-
- def pad_gradient(out_grad_arr, in_grad_arr, paddings, mode="CONSTANT", stream=None):
- assert isinstance(out_grad_arr, _nd.NDArray)
- assert isinstance(in_grad_arr, _nd.NDArray)
- padding_arr = []
- for i in range(len(paddings)):
- for j in range(len(paddings[0])):
- padding_arr.append(paddings[i][j])
- pad_len = len(padding_arr)
- padding_c_arr = (ctypes.c_int * pad_len)(*padding_arr)
- f_type = 3
- if mode == 'CONSTANT':
- f_type = 0
- elif mode == 'REFLECT':
- f_type = 1
- elif mode == 'SYMMETRIC':
- f_type = 2
- assert(f_type <= 2)
- _LIB.DLGpuPad_gradient(out_grad_arr.handle,
- in_grad_arr.handle, padding_c_arr, pad_len, f_type, stream.handle if stream else None)
|