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.

test_tensor.py 13 kB

5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474
  1. # Copyright 2020 Huawei Technologies Co., Ltd
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. # ============================================================================
  15. """
  16. @File : test_tensor.py
  17. @Author:
  18. @Date : 2019-03-14
  19. @Desc : test mindspore tensor's operation
  20. """
  21. import numpy as np
  22. import pytest
  23. import mindspore as ms
  24. import mindspore.common.api as me
  25. import mindspore.nn as nn
  26. from mindspore import Tensor, context
  27. from mindspore.common.initializer import initializer
  28. from mindspore.common.parameter import Parameter
  29. from ..ut_filter import non_graph_engine
  30. ndarr = np.ones((2, 3))
  31. context.set_context(mode=context.GRAPH_MODE)
  32. def test_tensor_flatten():
  33. with pytest.raises(AttributeError):
  34. lst = [1, 2, 3, 4,]
  35. tensor_list = ms.Tensor(lst, ms.float32)
  36. tensor_list = tensor_list.Flatten()
  37. print(tensor_list)
  38. def test_tensor_list():
  39. lst = [[1.0, 2.0, 1.0], [1.0, 10.0, 9.0]]
  40. tensor_list = ms.Tensor(lst, ms.float32)
  41. print(tensor_list)
  42. def test_tensor():
  43. """test_tensor"""
  44. t1 = ms.Tensor(ndarr)
  45. assert isinstance(t1, ms.Tensor)
  46. assert t1.dtype == ms.float64
  47. t2 = ms.Tensor(np.zeros([1, 2, 3]), ms.float32)
  48. assert isinstance(t2, ms.Tensor)
  49. assert t2.shape == (1, 2, 3)
  50. assert t2.dtype == ms.float32
  51. t3 = ms.Tensor(0.1)
  52. assert isinstance(t3, ms.Tensor)
  53. assert t3.dtype == ms.float64
  54. t4 = ms.Tensor(1)
  55. assert isinstance(t4, ms.Tensor)
  56. assert t4.dtype == ms.int64
  57. def test_tensor_type_float16():
  58. t_float16 = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float16))
  59. assert isinstance(t_float16, ms.Tensor)
  60. assert t_float16.shape == (2, 3)
  61. assert t_float16.dtype == ms.float16
  62. def test_tensor_type_float32():
  63. t_float32 = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float32))
  64. assert isinstance(t_float32, ms.Tensor)
  65. assert t_float32.shape == (2, 3)
  66. assert t_float32.dtype == ms.float32
  67. def test_tensor_type_float32_user_define():
  68. t = ms.Tensor(np.zeros([1, 2, 3]), ms.float32)
  69. assert isinstance(t, ms.Tensor)
  70. assert t.shape == (1, 2, 3)
  71. assert t.dtype == ms.float32
  72. def test_tensor_type_float64():
  73. t = ms.Tensor([[1.0, 2, 3], [4, 5, 6]])
  74. assert isinstance(t, ms.Tensor)
  75. assert t.shape == (2, 3)
  76. assert t.dtype == ms.float64
  77. t_zero = ms.Tensor(np.zeros([1, 2, 3]))
  78. assert isinstance(t_zero, ms.Tensor)
  79. assert t_zero.shape == (1, 2, 3)
  80. assert t_zero.dtype == ms.float64
  81. def test_tensor_type_float64_user_define():
  82. t = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=float))
  83. assert isinstance(t, ms.Tensor)
  84. assert t.shape == (2, 3)
  85. assert t.dtype == ms.float64
  86. t_float64 = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]]), ms.float64)
  87. assert isinstance(t_float64, ms.Tensor)
  88. assert t_float64.shape == (2, 3)
  89. assert t_float64.dtype == ms.float64
  90. def test_tensor_type_bool():
  91. # init a tensor with bool type
  92. ts_bool_array = ms.Tensor(np.zeros([2, 3], np.bool), ms.bool_)
  93. assert isinstance(ts_bool_array, ms.Tensor)
  94. assert ts_bool_array.dtype == ms.bool_
  95. t_bool = ms.Tensor(True)
  96. assert isinstance(t_bool, ms.Tensor)
  97. assert t_bool.dtype == ms.bool_
  98. t_bool_array = ms.Tensor(np.array([[True, False, True], [False, False, False]]))
  99. assert isinstance(t_bool_array, ms.Tensor)
  100. assert t_bool_array.shape == (2, 3)
  101. assert t_bool_array.dtype == ms.bool_
  102. def test_tensor_type_int8():
  103. t_int8_array = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int8))
  104. assert isinstance(t_int8_array, ms.Tensor)
  105. assert t_int8_array.shape == (2, 3)
  106. assert t_int8_array.dtype == ms.int8
  107. def test_tensor_type_int16():
  108. t_int16_array = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int16))
  109. assert isinstance(t_int16_array, ms.Tensor)
  110. assert t_int16_array.shape == (2, 3)
  111. assert t_int16_array.dtype == ms.int16
  112. def test_tensor_type_int32():
  113. t_int = ms.Tensor([[1, 2, 3], [4, 5, 6]])
  114. assert isinstance(t_int, ms.Tensor)
  115. assert t_int.shape == (2, 3)
  116. assert t_int.dtype == ms.int64
  117. t_int_array = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32))
  118. assert isinstance(t_int_array, ms.Tensor)
  119. assert t_int_array.shape == (2, 3)
  120. assert t_int_array.dtype == ms.int32
  121. def test_tensor_type_int64():
  122. t_int64 = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int64))
  123. assert isinstance(t_int64, ms.Tensor)
  124. assert t_int64.shape == (2, 3)
  125. assert t_int64.dtype == ms.int64
  126. def test_tensor_type_uint8():
  127. t_uint8_array = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint8))
  128. assert isinstance(t_uint8_array, ms.Tensor)
  129. assert t_uint8_array.shape == (2, 3)
  130. assert t_uint8_array.dtype == ms.uint8
  131. def test_tensor_type_uint16():
  132. t_uint16_array = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint16))
  133. assert isinstance(t_uint16_array, ms.Tensor)
  134. assert t_uint16_array.shape == (2, 3)
  135. assert t_uint16_array.dtype == ms.uint16
  136. def test_tensor_type_uint32():
  137. t_uint32_array = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint32))
  138. assert isinstance(t_uint32_array, ms.Tensor)
  139. assert t_uint32_array.shape == (2, 3)
  140. assert t_uint32_array.dtype == ms.uint32
  141. def test_tensor_type_uint64():
  142. t_uint64 = ms.Tensor(np.array([[1, 2, 3], [4, 5, 6]], dtype=np.uint64))
  143. assert isinstance(t_uint64, ms.Tensor)
  144. assert t_uint64.shape == (2, 3)
  145. assert t_uint64.dtype == ms.uint64
  146. def test_set_type():
  147. t = ms.Tensor(ndarr)
  148. t.set_dtype(ms.float32)
  149. assert t.dtype == ms.float32
  150. @non_graph_engine
  151. def test_add():
  152. x = ms.Tensor(ndarr)
  153. y = ms.Tensor(ndarr)
  154. z = x + y
  155. assert isinstance(z, ms.Tensor)
  156. @non_graph_engine
  157. def test_sub():
  158. x = ms.Tensor(ndarr)
  159. y = ms.Tensor(ndarr)
  160. z = x - y
  161. assert isinstance(z, ms.Tensor)
  162. @non_graph_engine
  163. def test_div():
  164. x = ms.Tensor(np.array([[2, 6, 10], [12, 4, 8]]).astype(np.float32))
  165. y = ms.Tensor(np.array([[2, 2, 5], [6, 1, 2]]).astype(np.float32))
  166. z = x / y
  167. z2 = x / 2
  168. assert isinstance(z, ms.Tensor)
  169. assert isinstance(z2, ms.Tensor)
  170. @non_graph_engine
  171. def test_parameter():
  172. x = Parameter(initializer(1, [1], ms.float32), name="beta1_power")
  173. x.init_data()
  174. z = x / 2
  175. print(z)
  176. class Net(nn.Cell):
  177. """Net definition"""
  178. def __init__(self, dim):
  179. super(Net, self).__init__()
  180. self.dim = dim
  181. def construct(self, input_x):
  182. return input_x
  183. @non_graph_engine
  184. def test_return_tensor():
  185. """test_return_tensor"""
  186. net = Net(0)
  187. input_data = ms.Tensor(np.array([[1.2, 2.1], [2.2, 3.2]]).astype('float32'))
  188. input_data.set_dtype(ms.float32)
  189. exe = me._executor
  190. exe.compile(net, input_data)
  191. tensor_ = exe(net, input_data)
  192. # get shape
  193. shape_ = tensor_.shape
  194. print("shape = ", shape_)
  195. # get type
  196. type_ = tensor_.dtype
  197. print("type = ", type_)
  198. # get value
  199. value_ = tensor_.asnumpy()
  200. print("numpy value = ", value_)
  201. def test_tensor_contiguous():
  202. """test_tensor_contiguous"""
  203. input_c = np.arange(6).reshape(2, 3)
  204. input_f = input_c.T
  205. np.ascontiguousarray(input_c, dtype=np.float32)
  206. assert True, input_c.flags['C_CONTIGUOUS']
  207. print("input_f flags = ", input_f.flags)
  208. assert True, input_f.flags['F_CONTIGUOUS']
  209. tensor_f_float32 = ms.Tensor(input_f)
  210. rt_f = tensor_f_float32.asnumpy()
  211. assert True, rt_f.flags['C_CONTIGUOUS']
  212. print("rt_f flags = ", rt_f.flags)
  213. def test_tensor_contiguous2():
  214. input_data = np.random.randn(32, 112, 112, 3).astype(np.float32)
  215. input_me = input_data.transpose(0, 3, 1, 2)
  216. print("input_me flags = ", input_me.flags)
  217. tensor_f_float32 = ms.Tensor(input_me)
  218. out_f = tensor_f_float32.asnumpy()
  219. print("out_f flags = ", out_f.flags)
  220. def test_tensor_input_string():
  221. with pytest.raises(TypeError):
  222. input_data = 'ccc'
  223. ms.Tensor(input_data)
  224. def test_tensor_input_tuple_string():
  225. with pytest.raises(TypeError):
  226. input_data = (2, 3, '4', 5)
  227. ms.Tensor(input_data)
  228. def test_tensor_input_list_string():
  229. with pytest.raises(TypeError):
  230. input_data = [[2, 3, '4', 5], [1, 2, 3, 4]]
  231. ms.Tensor(input_data)
  232. def test_tensor_input_none():
  233. with pytest.raises(TypeError):
  234. input_data = None
  235. ms.Tensor(input_data, np.int64)
  236. # pylint: disable=no-value-for-parameter
  237. def test_tensor_input_empty():
  238. with pytest.raises(TypeError):
  239. ms.Tensor()
  240. def test_tensor_input_ndarray_str():
  241. with pytest.raises(TypeError):
  242. inp = np.array(["88", 2, 4])
  243. ms.Tensor(inp)
  244. def test_tensor_input_ndarray_bool():
  245. inp = np.array([True, 2, 4])
  246. ms.Tensor(inp)
  247. inp = np.array([False, 2, 4])
  248. ms.Tensor(inp)
  249. def test_tensor_input_ndarray_complex():
  250. with pytest.raises(TypeError):
  251. inp = np.array([20j, 2, 4])
  252. ms.Tensor(inp)
  253. def test_tensor_input_ndarray_none():
  254. with pytest.raises(TypeError):
  255. inp = np.array([None, 2, 4])
  256. ms.Tensor(inp)
  257. def test_tensor_input_ndarray_dict():
  258. with pytest.raises(TypeError):
  259. inp = {'a': 6, 'b': 7}
  260. ms.Tensor(inp)
  261. def test_tensor_input_np_nan():
  262. with pytest.raises(TypeError):
  263. input_data = (1, 2, 3, np.nan)
  264. ms.Tensor(input_data, np.int64)
  265. def test_tensor_input_tuple_inf():
  266. with pytest.raises(TypeError):
  267. input_data = (1, 2, 3, float("inf"))
  268. ms.Tensor(input_data, np.int64)
  269. def test_tensor_input_dict():
  270. with pytest.raises(TypeError):
  271. input_data = {'a': 6, 'b': 7}
  272. ms.Tensor(input_data, np.int64)
  273. def test_tensor_input_complex():
  274. with pytest.raises(TypeError):
  275. input_data = (1, 2j, 3)
  276. ms.Tensor(input_data, np.int64)
  277. def test_tensor_dtype_np_float():
  278. with pytest.raises(TypeError):
  279. input_data = np.random.randn(32, 112, 112, 3).astype(np.float)
  280. ms.Tensor(input_data, np.float)
  281. def test_tensor_dtype_np_float16():
  282. with pytest.raises(TypeError):
  283. input_data = np.random.randn(32, 112, 112, 3).astype(np.float16)
  284. ms.Tensor(input_data, np.float16)
  285. def test_tensor_dtype_np_float32():
  286. with pytest.raises(TypeError):
  287. input_data = np.random.randn(32, 112, 112, 3).astype(np.float32)
  288. ms.Tensor(input_data, np.float32)
  289. def test_tensor_dtype_np_float64():
  290. with pytest.raises(TypeError):
  291. input_data = np.random.randn(32, 112, 112, 3).astype(np.float64)
  292. ms.Tensor(input_data, np.float64)
  293. def test_tensor_dtype_np_int():
  294. with pytest.raises(TypeError):
  295. input_data = np.random.randn(32, 112, 112, 3).astype(np.int)
  296. ms.Tensor(input_data, np.int)
  297. def test_tensor_dtype_np_int8():
  298. with pytest.raises(TypeError):
  299. input_data = np.random.randn(32, 112, 112, 3).astype(np.int8)
  300. ms.Tensor(input_data, np.int8)
  301. def test_tensor_dtype_np_int16():
  302. with pytest.raises(TypeError):
  303. input_data = np.random.randn(32, 112, 112, 3).astype(np.int16)
  304. ms.Tensor(input_data, np.int16)
  305. def test_tensor_dtype_np_int32():
  306. with pytest.raises(TypeError):
  307. input_data = np.random.randn(32, 112, 112, 3).astype(np.int32)
  308. ms.Tensor(input_data, np.int32)
  309. def test_tensor_dtype_np_int64():
  310. with pytest.raises(TypeError):
  311. input_data = np.random.randn(32, 112, 112, 3).astype(np.int64)
  312. ms.Tensor(input_data, np.int64)
  313. def test_tensor_dtype_fp32_to_bool():
  314. input_ = np.random.randn(2, 3, 4, 5).astype(np.float32)
  315. input_ = ms.Tensor(input_)
  316. t = ms.Tensor(input_, dtype=ms.bool_)
  317. assert isinstance(t, ms.Tensor)
  318. assert t.shape == (2, 3, 4, 5)
  319. assert t.dtype == ms.bool_
  320. def test_tensor_dtype_fp64_to_uint8():
  321. array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.float64)
  322. t = ms.Tensor(array, ms.uint8)
  323. assert isinstance(t, ms.Tensor)
  324. assert t.shape == (2, 3)
  325. assert t.dtype == ms.uint8
  326. def test_tensor_operation():
  327. x = Tensor(np.ones((3, 3)) * 4)
  328. res = x + 1
  329. assert np.all(res.asnumpy() == np.ones((3, 3)) * 5)
  330. res = 1 + x
  331. assert np.all(res.asnumpy() == np.ones((3, 3)) * 5)
  332. res = x - 2
  333. assert np.all(res.asnumpy() == np.ones((3, 3)) * 2)
  334. res = 6 - x
  335. assert np.all(res.asnumpy() == np.ones((3, 3)) * 2)
  336. res = x * 3
  337. assert np.all(res.asnumpy() == np.ones((3, 3)) * 12)
  338. res = 3 * x
  339. assert np.all(res.asnumpy() == np.ones((3, 3)) * 12)
  340. res = x / 2
  341. assert np.all(res.asnumpy() == np.ones((3, 3)) * 2)
  342. res = 8 / x
  343. assert np.all(res.asnumpy() == np.ones((3, 3)) * 2)
  344. res = x % 3
  345. assert np.all(res.asnumpy() == np.ones((3, 3)))
  346. res = x // 3
  347. assert np.all(res.asnumpy() == np.ones((3, 3)))
  348. x %= 3
  349. assert np.all(x.asnumpy() == np.ones((3, 3)))
  350. with pytest.raises(ValueError):
  351. res = x * (2, 3)