看TensoRF过程中积累小知识点

1. 两个矩阵做@ 运算:

做的是矩阵乘法!(而普通的*则是逐元素相乘)。eg:

blender2opencv = np.array([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
transform_matrix = np.array([
                [1,2,3,4],
                [5,6,7,8],
                [9,10,11,12],
                [ 13,14,15,16]])
pose=transform_matrix @ blender2opencv
print(pose)
pose2=np.matmul(transform_matrix, blender2opencv)
print(pose2)

输出结果相同

2. 模块Transforms里面的ToTensor函数:

这个模块的主要作用主要就是将PIL或者numpy.ndarry的图像类型转变成tensor的类型格式。

3. np.newaxis:

将数组维度扩张,且扩张的那一维度的尺寸是1.

4. numpy中冒号与省略号的区别:

:表示某一维的所有数据;
…: 表示余下所有维的所有数据。
如:三维张量a。

a[0,:]=a[0,:,:]
a[0,...]=a[0,:,:]
a[:,0]=a[:,0,:]
a[...,0]=a[:,:,0]
5. torch.repeat

沿着特定的维复制张量。

x = torch.tensor([1, 2, 3])
>>> x.repeat(4, 2)
tensor([[ 1,  2,  3,  1,  2,  3],
        [ 1,  2,  3,  1,  2,  3],
        [ 1,  2,  3,  1,  2,  3],
        [ 1,  2,  3,  1,  2,  3]])
6. torch.rand_like(input)

返回和input一样size的张量,内容是服从(0,1)正态分布的数据。

7. None在一个向量(矩阵、张量)中的应用

简单来说就是增加一个新的维度。

a=np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a)
print(a.shape)
b=a[...,None]
print("b的形状:",b.shape)
c=a[...,None,:]
print(c.shape)
print(c)
# 输出结果
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(3, 3)
b的形状: (3, 3, 1)
(3, 1, 3)
[[[1 2 3]]

 [[4 5 6]]

 [[7 8 9]]]
8. 发现在python中两个维数不符的矩阵做乘法——对应元素相乘

eg:

m=np.array([1,2,3])
n=np.array([[1],[2],[3],[4],[5]])
m*n
# 输出结果
array([[ 1,  2,  3],
       [ 2,  4,  6],
       [ 3,  6,  9],
       [ 4,  8, 12],
       [ 5, 10, 15]])
9. view函数

Tensor.view(*shape) → Tensor。就是将张量改造成不同的形状。
eg:

x=torch.tensor([[1,2,3],[4,5,6]])
print(x.view(1,6))
print(x.view(-1,2))
print(x.view(3,2))
# 输出结果
tensor([[1, 2, 3, 4, 5, 6]])
tensor([[1, 2],
        [3, 4],
        [5, 6]])
tensor([[1, 2],
        [3, 4],
        [5, 6]])
10.cat函数

Tensor.view(*shape) → Tensor
就是将几个size一样的张量沿着给定的维度拼接起来。
eg:

x=torch.tensor([[1,2,3],[4,5,6]])
y=torch.cat((x,x,x),0)
print(y)
z=torch.cat((x,x,x),1)
print(z)
# 输出结果
tensor([[1, 2, 3],
        [4, 5, 6],
        [1, 2, 3],
        [4, 5, 6],
        [1, 2, 3],
        [4, 5, 6]])
tensor([[1, 2, 3, 1, 2, 3, 1, 2, 3],
        [4, 5, 6, 4, 5, 6, 4, 5, 6]])
11. detach函数

返回一个新的tensor,从当前计算图中分离下来的,但是仍指向原变量的存放位置,不同之处只是requires_grad为false,得到的这个tensor永远不需要计算其梯度,不具有grad。这样我们就会继续使用这个新的tensor进行计算,后面当我们进行反向传播时,到该调用detach()的tensor就会停止,不能再继续向前进行传播。
注意:使用detach返回的tensor和原始的tensor共同一个内存,即一个修改另一个也会跟着改变。

12. F.grid_sample函数

output=F.grid_sample(input, grid)
简单来说就是,提供一个input的Tensor以及一个对应的flow-field网格(比如光流,体素流等),然后根据grid中每个位置提供的坐标信息(这里指input中pixel的坐标),将input中对应位置的像素值填充到grid指定的位置,得到最终的输出。
在这里插入图片描述
解释的参考文档

13. F.softplus函数

一个比relu光滑的激活函数。长这样:
在这里插入图片描述

14. comprod函数

是一个算累乘的函数。
eg:

a=torch.tensor([[1,2,3],[4,5,6],[7,8,9]])
print(torch.cumprod(a,dim=0))
print(torch.cumprod(a,dim=1))
# 输出结果
tensor([[  1,   2,   3],
        [  4,  10,  18],
        [ 28,  80, 162]])
tensor([[  1,   2,   6],
        [  4,  20, 120],
        [  7,  56, 504]])
  • 23
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值