pytorch
tensor
- 创建tensor
# torch.tensor(...)
box_feat = torch.tensor(data, dtype=None, device=None, requires_grad=False)
# torch.tensor.repeat(dim)
CFBank = torch.tensor([]).repeat(20,0)
# 此时,CFBank = tensor( [], size=(20,0) )
stack相当于增加维数,cat相当于增加某个维度的数量
# torch.stack()
torch.stack(([],[]), dim=0)
# 返回的结果是 tensor([], size=(2,1,0))
# torch.cat()
torch.cat([],[]), dim=0)
# 返回的结果是 tensor([], size=(2,0))
- tensor 属性:
# tensor 大小
box_feat.size()
# tensor 所在设备
box_feat.device
# tensor 是否在GPU上
box_feat.is_cuda
函数
python中**表示的意思
参考https://www.cnblogs.com/blogst/p/10965722.html
**表示python中的意思
表示python中的电源操作传递参数和定义参数时(所谓的参数是调用函数时传入的参数,参数是定义函数时定义函数的参数),还可以使用两个特殊语法:“*
”。
调用函数时使用***
test(*args)*的功能实际上是将序列args中的每个飞鲸网元素作为位置参数传入。例如,如果args等于(1,2,3),则此代码等同于test(1,2,3)。
test(**kwargs)**的功能是将字典kwargs转换为关键字参数。例如,如果kwargs等于a’:1,‘b’:2,‘c’:3,则此代码等同于测试(a=1,b=2,c=3)。
定义函数参数时使用***
DEF测试(*args):
…定义函数参数时,*的含义不同,*args表示所有传入位置参数都包含在tuple args中。例如,如果在上面的函数中调用test(1,2,3),args的值是(1,2,3)。:
DEF测试(**kwargs):
…同样,**用于关键字参数和字典。调用test(a=1,b=2,c=3),kwargs的值为a’:1,‘b’:2,‘c’:3。
普通的参数定义和传递与可以和平共存,但显然必须放在所有位置参数的末尾,*必须放在所有关键字参数的末尾,否则会产生歧义。
数组
切片
二维list切片
list不能直接对第二维进行切片如:
# 这样是错误的
lis = [[1,1,1],[2,2,2]]
lis = lis[:][1:3]
但是可以这样操作:
lis = [li[1:3] for li in lis]
[-1] [:-1] [::-1] [2::-1]
import numpy as np
a=np.random.rand(5)
print(a)
[1 2 3 4 5]
print(a[-1]) ###取最后一个元素
[5]
print(a[:-1]) ### 除了最后一个取全部
[1 2 3 4]
print(a[::-1]) ### 取从后向前(相反)的元素
[5 4 3 2 1]
print(a[2::-1]) ### 取从下标为2的元素翻转读取
[3 2 1]
numpy
squeeze
从数组的形状中删除单维度条目,即把shape中为1的维度去掉
1)a表示输入的数组;
2)axis用于指定需要删除的维度,但是指定的维度必须为单维度,否则将会报错;
3)axis的取值可为None 或 int 或 tuple of ints, 可选。若axis为空,则删除所有单维度的条目;
4)返回值:数组
5) 不会修改原数组;
>>> a = e.reshape(1,1,10)
>>> a
array([[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]])
>>> np.squeeze(a)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
pickle:‘ascii’ codec can’t decode byte 0xef in position 0:
这个是编码的问题,比如可能是当时保存pkl文件混合使用编码方式
如果网上的解决方式不适用,可以尝试:
data = pickle.load(fid, encoding = 'latin')
数字字符串补零
# 123~000123
s_exp = '123'
s_zfill = s_exp.zfill(6)
tensorboard:本机访问服务器docker容器中的tfboard
参考:https://www.cnblogs.com/marsggbo/p/13677839.html
- 在建立容器的时候为tfboard留出端口映射
docker run ... -p 6006:6666 ...
- 在容器中开启tfboard服务,因为容器中可能没有将tensorboard写入path路径,需要手动进入tensorboard路径运行:tensorboard/main.py开启服务
tensorboard --logdir ./path/to/your_files --port 6006
# or
python .../tensorboard/main.py --logdir ./path/to/your_files --port 6006
如果不能成功连接的话,加入参数–bind_all 让tfboard的端口暴露给网络而不是仅连接在localhost上
- 在本机cmd使用ssh -L命令连接到服务器的映射端口
ssh -L 6006:127.0.0.1:6666 root@66.66.66.66
这一步连到服务器本机,不需要连到容器内部
- 使用chrome(ie,edge不行)打开对应地址 http://127.0.0.1:6006 查看tfboard
pip指令出现SyntaxError: invalid syntax的两种原因及解决方法
参考 https://www.1024sky.cn/blog/article/36216