0
1.1 torch.optim.SGD
- Q:不知道momentum啥意思
SGD是最基础的优化方法,普通的训练方法, 需要重复不断的把整套数据放入神经网络NN中训练,
这样消耗的计算资源会很大.当我们使用SGD会把数据拆分后再分批不断放入 NN 中计算. 每次使用批数据, 虽然不能反映整体数据的情况,
不过却很大程度上加速了 NN 的训练过程, 而且也不会丢失太多准确率.
torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False, *, maximize=False, foreach=None)
A:momentum即动量,它模拟的是物体运动时的惯性,即更新的时候在一定程度上保留之前更新的方向,同时利用当前batch的梯度微调最终的更新方向。(if μ!=0)(让参数变化保留一点原来的方向?不知道咋说)
1.2 torch.cat()
import torch
# 总结:
# 1. torch.cat((x,y),dim=0) :张量 X,Y按照列堆起来
# 2. torch.cat((x,y),dim=1) :张量 X,Y按照行并排起来
x = torch.ones(3, 4)
y = torch.zeros(3, 4)
z = torch.cat((x, y), dim=0) # dim = 0 ;按列堆起来
m = torch.cat((x, y), dim=1) # dim = 1 :按行并排
print(f'x={x}')
print(f'y={y}')
print(f'z={z}')
print(f'm={m}')
x=tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]])
y=tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
z=tensor([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
m=tensor([[1., 1., 1., 1., 0., 0., 0., 0.],
[1., 1., 1., 1., 0., 0., 0., 0.],
[1., 1., 1., 1., 0., 0., 0., 0.]])
1.3 torch.size()
Q:不知道啥意思序列长度和特征维度?这里x指的是feat数据集
seq_len, feature_dim = x.size(0), x.size(1)
torch.size()可以查看tensor的尺寸;size(0)就是为了将前面多维度的tensor展平成一维。
还是有点不懂,试一试。。
for i, fname in tqdm(enumerate(usage_list)):
feat = load_feat(os.path.join(feat_dir, mode, f'{fname}.pt'))
if i>10:
break
print(i)
print(feat.shape)
print(feat.size(0),feat.size(1))
0
torch.Size([936, 39])
936 39
1
torch.Size([653, 39])
653 39
2
torch.Size([598, 39])
598 39
3
torch.Size([485, 39])
485 39
???,好家伙,这不就是行和列吗
(三个维数的用sharp报错了。。TypeError: ‘torch.Size’ object is not callable )
A:
seq_len, feature_dim = x.size(0), x.size(1)
表示一个数据特征的长度以及维度。维度与39-dim MFCC有关,是已经处理好的。。
1.4 view和permute
Q:啥意思,菜鸡落泪
x = x.view(seq_len, concat_n, feature_dim).permute(1, 0, 2)
view函数的作用为重构张量的维度
b = a.permute(0,2 ,1) 将a的维度索引1和维度索引2交换位置
import torch
x=torch.tensor([1,2,3,4,5,6,7,8,9,10,11,12])
print(x.view(2,6))
print(x.view(2,3,2))
print(x.view(2,3,2)).permute(1, 0, 2)
#(2,3,2)第一项和第二项换参数
变为(3,2,2)
tensor([[ 1, 2, 3, 4, 5, 6],
[ 7, 8, 9, 10, 11, 12]])
tensor([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]]])
tensor([[[ 1, 2],
[ 7, 8]],
[[ 3, 4],
[ 9, 10]],
[[ 5, 6],
[11, 12]]])