当前位置:   article > 正文

paddle-基本数据结构_paddle代码结构

paddle代码结构
  1. import paddle
  2. import numpy as np
  3. from PIL import Image
  4. import paddle.vision.transforms as T
  5. import paddle.vision.transforms.functional as F
  6. from paddle.vision.transforms import Compose, Normalize
  7. ## Tensor 的创建
  8. # 指定值创建1维张量
  9. ndim_1_Tensor = paddle.to_tensor([2.0, 3.0, 4.0])
  10. print(ndim_1_Tensor)
  11. # 单标量 0 维张量
  12. ndim_2_Tensor = paddle.to_tensor(2)
  13. ndim_3_Tensor = paddle.to_tensor([2])
  14. print(ndim_2_Tensor)
  15. print(ndim_3_Tensor)
  16. # 指定值创建 2 维张量
  17. ndim_4_Tensor = paddle.to_tensor(
  18. [[1.0, 2.0, 3.0],
  19. [4.0, 5.0, 6.0]
  20. ])
  21. print(ndim_4_Tensor)
  22. # 指定值创建 3 维张量
  23. ndim_5_Tensor = paddle.to_tensor([[[1, 2, 3, 4, 5],
  24. [6, 7, 8, 9, 10]],
  25. [[11, 12, 13, 14, 15],
  26. [16, 17, 18, 19, 20]]])
  27. print(ndim_5_Tensor)
  28. # 指定形状创建
  29. m = n = 4
  30. ndim_6_Tensor = paddle.zeros([m, n]) # 创建数据全为 0,形状为 [m, n] 的 Tensor
  31. ndim_7_Tensor = paddle.ones([m, n]) # 创建数据全为 1,形状为 [m, n] 的 Tensor
  32. ndim_8_Tensor = paddle.full([m, n], 10) # 创建数据全为 10,形状为 [m, n] 的 Tensor
  33. print(ndim_6_Tensor)
  34. print(ndim_7_Tensor)
  35. print(ndim_8_Tensor)
  36. # 指定区间创建
  37. # start:起始数 end:截止数(不含) step:步距
  38. ndim_9_Tensor = paddle.arange(start = 1, end = 100, step = 3)
  39. # start:起始数 stop:截止数 num:需要的元素数
  40. ndim_10_Tensor = paddle.linspace(start = 1, stop = 100, num = 10)
  41. print(ndim_9_Tensor)
  42. print(ndim_10_Tensor)
  43. # 创建空张量
  44. ndim_11_Tensor = paddle.empty(shape=[3, 3], dtype='float32')
  45. # 创建一个与其他 Tensor 具有相同 shape 与 dtype 的 Tensor
  46. ndim_12_Tensor = paddle.ones_like(ndim_11_Tensor) # 1
  47. ndim_13_Tensor = paddle.ones_like(ndim_11_Tensor, dtype='int32') # 1
  48. ndim_14_Tensor = paddle.zeros_like(ndim_11_Tensor) # 0
  49. ndim_15_Tensor = paddle.full_like(ndim_11_Tensor, 99) # 99
  50. ndim_16_Tensor = paddle.empty_like(ndim_11_Tensor) # 0
  51. print(ndim_11_Tensor)
  52. print(ndim_12_Tensor)
  53. print(ndim_13_Tensor)
  54. print(ndim_14_Tensor)
  55. print(ndim_15_Tensor)
  56. print(ndim_16_Tensor)
  57. # 克隆
  58. ndim_17_Tensor = paddle.clone(ndim_15_Tensor)
  59. print(ndim_17_Tensor)
  60. # 符合均匀分布的范围为[0, 1)的随机 Tensor
  61. ndim_18_Tensor = paddle.rand(shape=[2, 3])
  62. # 符合标准正态分布的随机 Tensor
  63. ndim_19_Tensor = paddle.randn(shape=[2, 3])
  64. # 服从均匀分布的、范围在[low, high)的随机 Tensor
  65. ndim_20_Tensor = paddle.randint(low=-5, high=5, shape=[4, 4], dtype='int32')
  66. # 1 维随机
  67. ndim_21_Tensor = paddle.randperm(50, dtype="float", name=None)
  68. # 设置全局随机种子(TODO:没搞明白)
  69. gen = paddle.seed(10000)
  70. ndim_22_Tensor = paddle.rand(shape=[2, 3])
  71. print(ndim_18_Tensor)
  72. print(ndim_19_Tensor)
  73. print(ndim_20_Tensor)
  74. print(ndim_21_Tensor)
  75. print(ndim_22_Tensor)
  76. # 指定图像数据创建
  77. fake_img = Image.fromarray((np.random.rand(224, 224, 3) * 255.).astype(np.uint8)) # 创建随机图片
  78. transform = T.ToTensor()
  79. ndim_23_Tensor = transform(fake_img) # 使用 ToTensor()将图片转换为 Tensor
  80. print(ndim_23_Tensor)
  81. # 指定文本数据创建(TODO:没搞明白)
  82. # paddle.io.DataLoader 能够基于原始 Dataset,返回读取 Dataset 数据的迭代器,迭代器返回的数据中的每个元素都是一个 Tensor
  83. transform = Compose([Normalize(mean=[127.5],
  84. std=[127.5],
  85. data_format='CHW')])
  86. test_dataset = paddle.vision.datasets.MNIST(mode='test', transform=transform)
  87. print(test_dataset[0][1]) # 打印原始数据集的第一个数据的 label
  88. loader = paddle.io.DataLoader(test_dataset)
  89. for data in enumerate(loader):
  90. x, label = data[1]
  91. print(label) # 打印由 DataLoader 返回的迭代器中的第一个数据的 label
  92. break
  93. ## Tensor 的属性
  94. # 形状(shape):Tensor 的形状是一个元组,表示每个维度的长度。例如,一个形状为 (3, 4, 5) 的 Tensor 有三个维度,分别是长度为 3、4 和 5。
  95. # 数据类型(dtype):Tensor 的数据类型指定了存储在 Tensor 中的元素的类型。常见的数据类型包括 float32、float64、int32、int64 等。
  96. # 设备(place):Tensor 可以存储在不同的设备上,例如 CPU、GPU 或者是 Ascend。Place 指定了 Tensor 所在的设备。
  97. # 梯度(gradient):在深度学习中,Tensor 的梯度指的是它对某个变量的导数。在反向传播算法中,梯度被用于计算模型参数的更新。
  98. # 名称(name):Tensor 可以有一个可选的名称,用于在代码中引用 Tensor。
  99. # 数据(data):Tensor 中存储的实际数值,可以通过 Tensor.numpy() 方法将 Tensor 转换成 numpy 数组进行查看。
  100. # 广播(broadcasting):Tensor 支持广播操作,即自动扩展维度,使得两个形状不同的 Tensor 可以进行计算。
  101. # 切片(slicing):Tensor 支持切片操作,可以通过切片方式访问 Tensor 中的元素。
  102. # reshape:Tensor 支持 reshape 操作,可以改变 Tensor 的形状。
  103. # transpose:Tensor 支持 transpose 操作,可以交换 Tensor 的维度。
  104. # 数学运算:Tensor 支持基本的数学运算,例如加减乘除、矩阵乘法等。
  105. # 归一化(normalize):Tensor 中的元素可以进行归一化操作,即将元素的值缩放到指定的范围内。
  106. # 随机初始化(random initialization):Tensor 可以通过指定的随机初始化方式初始化为随机值。
  107. ndim_24_Tensor = paddle.ones(shape=[4, 6, 8])
  108. print("每个元素的数据类型:", ndim_24_Tensor.dtype)
  109. print("维度数量:", ndim_24_Tensor.ndim)
  110. print("元素总数:", ndim_24_Tensor.size)
  111. print("每个维度上元素的数量:", ndim_24_Tensor.shape)
  112. print("0轴上的元素数:", ndim_24_Tensor.shape[0])
  113. print("最后一个轴上的元素数:", ndim_24_Tensor.shape[-1])
  114. # 重置维度
  115. # paddle.reshape 可重置 Tensor 的形状
  116. # paddle.squeeze,可实现 Tensor 的降维操作,即把 Tensor 中尺寸为 1 的维度删除。
  117. # paddle.unsqueeze,可实现 Tensor 的升维操作,即向 Tensor 中某个位置插入尺寸为 1 的维度。
  118. # paddle.flatten,将 Tensor 的数据在指定的连续维度上展平。
  119. # paddle.transpose,对 Tensor 的数据进行重排。
  120. # 转成1维
  121. ndim_25_Tensor = paddle.reshape(ndim_24_Tensor, [-1])
  122. print(ndim_25_Tensor)
  123. # ensor 的数据类型(dtype)
  124. # bool、float16、float32、float64、uint8、int8、int16、int32、int64、complex64、complex128
  125. ndim_2_Tensor = paddle.to_tensor([[(1+1j), (2+2j)],
  126. [(3+3j), (4+4j)]])
  127. print(ndim_2_Tensor)
  128. # 修改数据类型的方法
  129. float64_Tensor = paddle.cast(ndim_2_Tensor, dtype='float64')
  130. print(float64_Tensor)
  131. # 设备位置
  132. cpu_Tensor = paddle.to_tensor(1, place=paddle.CPUPlace())
  133. print(cpu_Tensor.place)
  134. # gpu_Tensor = paddle.to_tensor(1, place=paddle.CUDAPlace(0))
  135. # print(gpu_Tensor.place)
  136. # pin_memory_Tensor = paddle.to_tensor(1, place=paddle.CUDAPinnedPlace())
  137. # print(pin_memory_Tensor.place)
  138. # 名称
  139. cpu_Tensor.name = "jerry"
  140. print("Tensor name:", cpu_Tensor.name)
  141. # stop_gradient 表示是否停止计算梯度,默认值为 True,表示停止计算梯度,梯度不再回传
  142. eg = paddle.to_tensor(1)
  143. print("Tensor stop_gradient:", eg.stop_gradient)
  144. eg.stop_gradient = False
  145. print("Tensor stop_gradient:", eg.stop_gradient)
  146. ## Tensor 的操作
  147. # 访问 Tensor
  148. ndim_1_Tensor = paddle.to_tensor([0, 1, 2, 3, 4, 5, 6, 7, 8])
  149. print("原始张量:", ndim_1_Tensor.numpy()) # 原始 1 维 Tensor
  150. print("第1个元素:", ndim_1_Tensor[0].numpy()) # 取 Tensor 第一个元素的值?
  151. print("最后1个元素:", ndim_1_Tensor[-1].numpy())
  152. print("所有元素:", ndim_1_Tensor[:].numpy())
  153. print("前3个元素:", ndim_1_Tensor[:3].numpy())
  154. print("第7个到最后一个元素:", ndim_1_Tensor[6:].numpy())
  155. print("第4个到第7个元素:", ndim_1_Tensor[3:6].numpy())
  156. print("间隔3个元素:", ndim_1_Tensor[::3].numpy())
  157. print("颠倒:", ndim_1_Tensor[::-1].numpy())
  158. ndim_2_Tensor = paddle.to_tensor([[0, 1, 2, 3],
  159. [4, 5, 6, 7],
  160. [8, 9, 10, 11]])
  161. print("原始张量:", ndim_2_Tensor.numpy())
  162. print("第1行:", ndim_2_Tensor[0].numpy())
  163. print("第1行:", ndim_2_Tensor[0, :].numpy())
  164. print("第1列:", ndim_2_Tensor[:, 0].numpy())
  165. print("最后1列:", ndim_2_Tensor[:, -1].numpy())
  166. print("所有元素:", ndim_2_Tensor[:].numpy())
  167. print("第1行第2列:", ndim_2_Tensor[0, 1].numpy())
  168. # 修改 Tensor
  169. x = paddle.to_tensor(np.ones((2, 3)).astype(np.float32))
  170. x[0] = 0 # x : [[0., 0., 0.], [1., 1., 1.]]
  171. x[0:1] = 2.1 # x : [[2.09999990, 2.09999990, 2.09999990], [1., 1., 1.]]
  172. x[...] = 3 # x : [[3., 3., 3.], [3., 3., 3.]]
  173. x[0:1] = np.array([1,2,3]) # x : [[1., 2., 3.], [3., 3., 3.]]
  174. x[1] = paddle.ones([3]) # x : [[1., 2., 3.], [1., 1., 1.]]
  175. # 数学运算
  176. x = paddle.to_tensor([[1.1, 2.2], [3.3, 4.4]], dtype="float64")
  177. y = paddle.to_tensor([[5.5, 6.6], [7.7, 8.8]], dtype="float64")
  178. print(paddle.add(x, y), "\n") # 方法一
  179. print(x.add(y), "\n") # 方法二
  180. print(x.abs()) #逐元素取绝对值
  181. print(x.ceil()) #逐元素向上取整
  182. print(x.floor()) #逐元素向下取整
  183. print(x.round()) #逐元素四舍五入
  184. print(x.exp()) #逐元素计算自然常数为底的指数
  185. print(x.log()) #逐元素计算 x 的自然对数
  186. print(x.reciprocal()) #逐元素求倒数
  187. print(x.square()) #逐元素计算平方
  188. print(x.sqrt()) #逐元素计算平方根
  189. print(x.sin()) #逐元素计算正弦
  190. print(x.cos()) #逐元素计算余弦
  191. print(x.add(y)) #逐元素相加
  192. print(x.subtract(y)) #逐元素相减
  193. print(x.multiply(y)) #逐元素相乘
  194. print(x.divide(y)) #逐元素相除
  195. print(x.mod(y)) #逐元素相除并取余
  196. print(x.pow(y)) #逐元素幂运算
  197. print(x.max()) #指定维度上元素最大值,默认为全部维度
  198. print(x.min()) #指定维度上元素最小值,默认为全部维度
  199. print(x.prod()) #指定维度上元素累乘,默认为全部维度
  200. print(x.sum()) #指定维度上元素的和,默认为全部维度
  201. # 逻辑运算
  202. x.isfinite() #判断 Tensor 中元素是否是有限的数字,即不包括 inf 与 nan
  203. x.equal_all(y) #判断两个 Tensor 的全部元素是否相等,并返回形状为[1]的布尔类 Tensor
  204. x.equal(y) #判断两个 Tensor 的每个元素是否相等,并返回形状相同的布尔类 Tensor
  205. x.not_equal(y) #判断两个 Tensor 的每个元素是否不相等
  206. x.less_than(y) #判断 Tensor x 的元素是否小于 Tensor y 的对应元素
  207. x.less_equal(y) #判断 Tensor x 的元素是否小于或等于 Tensor y 的对应元素
  208. x.greater_than(y) #判断 Tensor x 的元素是否大于 Tensor y 的对应元素
  209. x.greater_equal(y) #判断 Tensor x 的元素是否大于或等于 Tensor y 的对应元素
  210. x.allclose(y) #判断 Tensor x 的全部元素是否与 Tensor y 的全部元素接近,并返回形状为[1]的布尔类 Tensor
  211. a1 = paddle.to_tensor([[1,2,3],[4,5,7]])
  212. a2 = paddle.to_tensor([[1,2,3],[4,5,6]])
  213. print(a1.equal_all(a2))
  214. print(a1.equal(a2))
  215. x.logical_and(y) #对两个布尔类型 Tensor 逐元素进行逻辑与操作
  216. x.logical_or(y) #对两个布尔类型 Tensor 逐元素进行逻辑或操作
  217. x.logical_xor(y) #对两个布尔类型 Tensor 逐元素进行逻辑亦或操作
  218. x.logical_not(y) #对两个布尔类型 Tensor 逐元素进行逻辑非操作

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/352506
推荐阅读
相关标签
  

闽ICP备14008679号