初试记录时间:2022.6.7
学习教程来源:
Tensor
Tensor类似与数组,它是一个多维的数据。理论上Tensor可以是无限维数。
Tensor的数据:floats/ints/complex numbers。
Tensor的数据格式:数组必须类似于“矩形”。
shape:定义Tensor的维数。
dtype:定义Tensor的数据类型。int8/int16/int32/int64/float16/float32/float32/complex64/complex128/uint8/bool。
place:指定分配的设备位置。CPU/GPU/固定内存。(CPU:place = paddle.CPUPlace() / place = CPUPlace;GPU:place = paddle.CUDAPlace(0) / place = CUDAPlace(0);固定内存:place = paddle.CUDAPinnedPlace() / place = CUDAPinnedPlace)
Tensor的转换方式:
ndim_2_tensor = paddle.to_tensor([[1.0, 2.0, 3.0],[4.0, 5.0, 6.0]])print(ndim_2_tensor)
Tensor(shape=[2, 3], dtype=float32, place=CUDAPlace(0), stop_gradient=True,[[1., 2., 3.],[4., 5., 6.]])
# Tensor可以有任意数量的轴(也称为维度)ndim_3_tensor = paddle.to_tensor([[[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]],[[11, 12, 13, 14, 15],[16, 17, 18, 19, 20]]])print(ndim_3_tensor)
Tensor(shape=[2, 2, 5], dtype=int64, place=CUDAPlace(0), stop_gradient=True,[[[1, 2, 3, 4, 5],[ 6, 7, 8, 9, 10]],[[11, 12, 13, 14, 15],[16, 17, 18, 19, 20]]])
Tensor转换为numpy array:
转换方式:
ndim_2_tensor.numpy()
array([[1., 2., 3.],[4., 5., 6.]], dtype=float32)
numpy array转换为Tensor:
转换方式与Tensor的创建方式相同。
改变Tensor的shape
利用reshape()函数改变Tensor的shape
ndim_3_tensor = paddle.reshape(ndim_3_tensor, [2, 5, 3])
通过cast改变dtype:
float64_tensor = paddle.cast(float32_tensor, dtype='float64')
Tensor的name:
Tensor的name是Tensor的唯一标识。
数学运算符:
数学运算:
x.abs() #逐元素取绝对值x.ceil() #逐元素向上取整x.floor() #逐元素向下取整x.round() #逐元素四舍五入x.exp() #逐元素计算自然常数为底的指数x.log() #逐元素计算x的自然对数x.reciprocal() #逐元素求倒数x.square() #逐元素计算平方x.sqrt() #逐元素计算平方根x.sin() #逐元素计算正弦x.cos() #逐元素计算余弦x.add(y) #逐元素相加x.subtract(y) #逐元素相减x.multiply(y) #逐元素相乘x.divide(y) #逐元素相除x.mod(y) #逐元素相除并取余x.pow(y) #逐元素幂运算x.max() #指定维度上元素最大值,默认为全部维度x.min() #指定维度上元素最小值,默认为全部维度x.prod() #指定维度上元素累乘,默认为全部维度x.sum() #指定维度上元素的和,默认为全部维度
x + y -> x.add(y) #逐元素相加x - y -> x.subtract(y) #逐元素相减x * y -> x.multiply(y) #逐元素相乘x / y -> x.divide(y) #逐元素相除x % y -> x.mod(y) #逐元素相除并取余x ** y -> x.pow(y) #逐元素幂运算
逻辑运算
x.isfinite() #判断tensor中元素是否是有限的数字,即不包括inf与nanx.equal_all(y) #判断两个tensor的全部元素是否相等,并返回shape为[1]的bool Tensorx.equal(y) #判断两个tensor的每个元素是否相等,并返回shape相同的bool Tensorx.not_equal(y) #判断两个tensor的每个元素是否不相等x.less_than(y) #判断tensor x的元素是否小于tensor y的对应元素x.less_equal(y) #判断tensor x的元素是否小于或等于tensor y的对应元素x.greater_than(y) #判断tensor x的元素是否大于tensor y的对应元素x.greater_equal(y) #判断tensor x的元素是否大于或等于tensor y的对应元素x.allclose(y) #判断tensor x的全部元素是否与tensor y的全部元素接近,并返回shape为[1]的bool Tensor
x == y -> x.equal(y) #判断两个tensor的每个元素是否相等x != y -> x.not_equal(y) #判断两个tensor的每个元素是否不相等x < y -> x.less_than(y) #判断tensor x的元素是否小于tensor y的对应元素x <= y -> x.less_equal(y) #判断tensor x的元素是否小于或等于tensor y的对应元素x > y -> x.greater_than(y) #判断tensor x的元素是否大于tensor y的对应元素x >= y -> x.greater_equal(y) #判断tensor x的元素是否大于或等于tensor y的对应元素
bool运算操作:
x.logical_and(y) #对两个bool型tensor逐元素进行逻辑与操作x.logical_or(y) #对两个bool型tensor逐元素进行逻辑或操作x.logical_xor(y) #对两个bool型tensor逐元素进行逻辑亦或操作x.logical_not(y) #对两个bool型tensor逐元素进行逻辑非操作
线性代数相关运算:
x.cholesky() #矩阵的cholesky分解x.t() #矩阵转置x.transpose([1, 0]) #交换axis 0 与axis 1的顺序x.norm('fro') #矩阵的Frobenius 范数x.dist(y, p=2) #矩阵(x-y)的2范数x.matmul(y) #矩阵乘法
cholesky分解:
矩阵A为一个正定的矩阵。
则A可以必定可以写成一个下三角矩阵和其转置矩阵的乘积。
将A分解为一个这样的下三角矩阵则称为cholesky分解。
正定矩阵:
Frobenius范数:
定义:
矩阵各项元素的绝对值平方的总和开根。
