normal(mean, std, *, generator=None, out=None)
该函数返回从单独的正态分布中提取的随机数的张量,该正态分布的均值是mean,标准差是std。
用法如下:我们从一个标准正态分布N~(0,1),提取一个2x2的矩阵
torch.normal(mean=0.,std=1.,size=(2,2))
我们也可以让每一个值服从不同的正态分布,我们还是生成2x2的矩阵:
torch.normal(mean=torch.arange(4.),std=torch.arange(1.,0.6,-0.1)).reshape(2,2)
期望值也就是均值μ=0,即曲线图象对称轴为Y轴,标准差σ=1条件下的正态分布,记为N(0,1)。
标准的正太分布 均值和标准差求解 计算均值。把所有数值相加,再除以总体大小:
- 均值 (μ) = ΣX/N,这里的 Σ 是求和(加法)符号, xi 是每个单一数值,而N则是总体大小。
- 在上例中,均值 μ 就是 (12+55+74+79+90)/5 = 62。
**计算标准差。**它表征总体的分布情况。 标准差 = σ = sqrt [(Σ((X-μ)^2))/(N)].
- 对以上给出的例子,标准差是 sqrt[((12-62)^2 + (55-62)^2 + (74-62)^2 + (79-62)^2 + (90-62)^2)/(5)] = 27.4。(注意,如果要求样本的标准差,则应除以n-1,即样本大小减1。
torch.matmul是tensor的乘法,输入可以是高维的。
当输入是都是二维时,就是普通的矩阵乘法,和tensor.mm函数用法相同。
a = torch.tensor([[1,2], [3,4]])
a
Out[31]:
tensor([[1, 2],
[3, 4]])
b = torch.tensor([[2,2], [3,4]])
b
Out[33]:
tensor([[2, 2],
[3, 4]])
torch.matmul(a, b)
Out[34]:
tensor([[ 8, 10],
[18, 22]])
torch.matmul(a, b).shape
Out[35]: torch.Size([2, 2])
如果维度更高呢?前面的维度必须要相同,然后最里面的两个维度符合矩阵相乘的形状限制:i×j,j×k。
a = torch.tensor([[[1,2], [3,4], [5,6]],[[7,8], [9,10], [11,12]]])
a
Out[37]:
tensor([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]]])
a.shape
Out[38]: torch.Size([2, 3, 2])
b = torch.tensor([[[1,2], [3,4]],[[7,8], [9,10]]])
b
Out[40]:
tensor([[[ 1, 2],
[ 3, 4]],
[[ 7, 8],
[ 9, 10]]])
b.shape
Out[41]: torch.Size([2, 2, 2])
torch.matmul(a, b)
Out[42]:
tensor([[[ 7, 10],
[ 15, 22],
[ 23, 34]],
[[121, 136],
[153, 172],
[185, 208]]])
# a 和 b 的最外面的维度都是 2,相同。
# 最里面两个维度分别是 3 × 2 和 2 × 2,那么乘完以后就是 3 × 2
torch.matmul(a, b).shape
Out[43]: torch.Size([2, 3, 2])
当输入是都是二维时,就是普通的矩阵乘法,和tensor.mm函数用法相同。
当输入有多维时,把多出的一维作为batch提出来,其他部分做矩阵乘法。
下面看一个两个都是3维的例子。
大意是说,数组新的shape属性应该要与原来的配套,如果等于-1的话,那么Numpy会根据剩下的维度计算出数组的另外一个shape属性值。
举几个例子或许就清楚了,有一个数组z,它的shape属性是(4, 4)
z = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
z.shape
(4, 4)
z.reshape(-1) array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
z.reshape(-1,1)
array([[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11],
[12],
[13],
[14],
[15],
[16]])
z.reshape(-1, 2)
array([[ 1, 2],
[ 3, 4],
[ 5, 6],
[ 7, 8],
[ 9, 10],
[11, 12],
[13, 14],
[15, 16]])
shuffle()函数的使用
shuffle()函数是打乱序列里面的元素,并随机排列的。
import random random.shuffle (alist )
注意下:alist可以使是一个列表,也可以是个序列。shuffle()是不能直接访问的,需要导入random模块
具体例子:
import random alist = [1,2,3,4,5] random.shuffle(alist) print(alist) #[3, 5, 4, 2, 1] #---->结果都是随机的indices = list(range(10))
indices = list(range(10)) indices #输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]



