You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

PadLink.py 1.6 kB

5 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from __future__ import absolute_import
  2. import ctypes
  3. from .._base import _LIB
  4. from .. import ndarray as _nd
  5. def pad(in_arr, out_arr, paddings, mode='CONSTANT', constant_values=0, stream=None):
  6. assert isinstance(in_arr, _nd.NDArray)
  7. assert isinstance(out_arr, _nd.NDArray)
  8. padding_arr = []
  9. for i in range(len(paddings)):
  10. for j in range(len(paddings[0])):
  11. padding_arr.append(paddings[i][j])
  12. pad_len = len(padding_arr)
  13. padding_c_arr = (ctypes.c_int * pad_len)(*padding_arr)
  14. f_type = 3
  15. if mode == 'CONSTANT':
  16. f_type = 0
  17. elif mode == 'REFLECT':
  18. f_type = 1
  19. elif mode == 'SYMMETRIC':
  20. f_type = 2
  21. assert(f_type <= 2)
  22. _LIB.DLGpuPad(in_arr.handle, out_arr.handle, padding_c_arr,
  23. pad_len, f_type, constant_values, stream.handle if stream else None)
  24. def pad_gradient(out_grad_arr, in_grad_arr, paddings, mode="CONSTANT", stream=None):
  25. assert isinstance(out_grad_arr, _nd.NDArray)
  26. assert isinstance(in_grad_arr, _nd.NDArray)
  27. padding_arr = []
  28. for i in range(len(paddings)):
  29. for j in range(len(paddings[0])):
  30. padding_arr.append(paddings[i][j])
  31. pad_len = len(padding_arr)
  32. padding_c_arr = (ctypes.c_int * pad_len)(*padding_arr)
  33. f_type = 3
  34. if mode == 'CONSTANT':
  35. f_type = 0
  36. elif mode == 'REFLECT':
  37. f_type = 1
  38. elif mode == 'SYMMETRIC':
  39. f_type = 2
  40. assert(f_type <= 2)
  41. _LIB.DLGpuPad_gradient(out_grad_arr.handle,
  42. in_grad_arr.handle, padding_c_arr, pad_len, f_type, stream.handle if stream else None)