逐元素操作
这部分操作会对tensor的每一个元素(point-wise,又名element-wise)进行操作,此类操作的输入与输出形状一致。常用的操作如表3-4所示。
表3-4: 常见的逐元素操作
函数 | 功能 |
---|---|
abs/sqrt/div/exp/fmod/log/pow.. | 绝对值/平方根/除法/指数/求余/求幂.. |
cos/sin/asin/atan2/cosh.. | 相关三角函数 |
ceil/round/floor/trunc | 上取整/四舍五入/下取整/只保留整数部分 |
clamp(input, min, max) | 超过min和max部分截断 |
sigmod/tanh.. | 激活函数 |
对于很多操作,例如div、mul、pow、fmod等,PyTorch都实现了运算符重载,所以可以直接使用运算符。如a ** 2
等价于torch.pow(a,2)
, a * 2
等价于torch.mul(a,2)
。
其中clamp(x, min, max)
的输出满足以下公式:
clamp
常用在某些需要比较大小的地方,如取一个tensor的每个元素与另一个数的较大值。
In [71]:
a = t.arange(0, 6).view(2, 3).float() t.cos(a)
Out[71]:
tensor([[ 1.0000, 0.5403, -0.4161], [-0.9900, -0.6536, 0.2837]])
In [72]:
a % 3 # 等价于t.fmod(a, 3)
Out[72]:
tensor([[0., 1., 2.], [0., 1., 2.]])
In [73]:
a ** 2 # 等价于t.pow(a, 2)
Out[73]:
tensor([[ 0., 1., 4.], [ 9., 16., 25.]])
In [74]:
# 取a中的每一个元素与3相比较大的一个 (小于3的截断成3) print(a) t.clamp(a, min=3)
tensor([[0., 1., 2.], [3., 4., 5.]])
Out[74]:
tensor([[3., 3., 3.], [3., 4., 5.]])
In [75]:
b = a.sin_() # 效果同 a = a.sin();b=a ,但是更高效节省显存 a
Out[75]:
tensor([[ 0.0000, 0.8415, 0.9093], [ 0.1411, -0.7568, -0.9589]])