5. view、expand、repeat、transpose、permute和squeeze、unsqueeze的区别
1. 远程服务器无法登录问题
权限可能是root权限,修改权限
用户权限: sudo chown -R user1 /path/to/directory
群组权限: sudo chgrp -R group1 /path/to/directory
2. 内存溢出解决方法
1)调小batch_size;
2)换一个显存更大/性能更好的GPU——e.g. V100 24G->A100 40G/ A100 80G ;
3)多卡并行 。
3. Padding
(1)用于卷积网络中,对输入边缘进行填充;
(2)避免特征图边缘信息损失;
(3)控制输出特征图大小和形状。
4. try...except...处理异常报错
try:
pass
except exception as e:
print(e)
pass
5. view、expand、repeat、transpose、permute和squeeze、unsqueeze的区别
(1) view
import torch
x = torch.randn(2, 3)
print(x.view(3, 2)) ### (2, 3) --> (3, 2)
(2) expand
x = torch.tensor([[1], [2], [3]])
print(x.expand(3, 4)) ### (3, 1) --> (3, 4)
print(x.expand(-1, 4)) ### (3, 1) --> (3, 4)
print(x.expand(4, 4)) ### 报错!!!
(3) repeat
x = torch.tensor([1, 2, 3])
print(x.repeat(3, 1)) ### (1, 3)--> (3, 3)
(4) transpose: 交换张量的两个指定维度
x = torch.randn(2, 3)
print(x.transpose(0, 1)) ### (2, 3) -->(3, 2)
(5) permute: 根据指定顺序重新排布张量的所有维度
x = torch.randn(2, 3, 4)
print(x.permute(2, 0, 1)) ### (2, 3, 4) --> (4, 2, 3)
(6) squeeze: 去除张量中大小为 1 的维度
x = torch.randn(1, 2, 3, 1)
print(x.squeeze()) ### (1, 2, 3, 1) --> (2, 3)
(7) unsqueeze: 增加一个大小为 1 的维度
x = torch.randn(2, 3)
print(x.unsqueeze(0)) ### (2, 3) --> (1, 2, 3)
### 总结
- **view**: 改变张量形状,但不改变存储;
- **expand**: 沿指定维度重复数据,但不复制内容,不改变存储;
- **repeat**: 实际复制数据以沿指定维度重复,改变存储;
- **transpose**: 交换两个指定维度;
- **permute**: 根据指定顺序重新排列所有维度;
- **squeeze**: 去除大小为 1 的维度;
- **unsqueeze**: 增加一个大小为 1 的维度。