torch一些老忘记的函数

1. torch.diag_embed(input) 将输入tensor最后一维变成对角线矩阵

参数

input为tensor

示例

import torch
a = torch.tensor([[1,2],[3,4]])
print(a)
'''a->tensor([[1, 2],
             [3, 4]]), shape->(1,2)'''
b = torch.diag_embed(a)
print(b)
'''tensor([[[1, 0],
         [0, 2]],
        [[3, 0],
         [0, 4]]]), shape->(1,2,2)'''

2. torch.linalg.qr(A, mode)

参数

  • A:形状为两个维度以上的Tensor
  • mode:‘reduced’ , ‘complete’ , ‘r’ 之一。控制返回的张量的形状,默认为’reduced‘

return (Q,R)

用途:计算矩阵的QR分解
QR分解一些需要简单理解的知识
当mode='reduced’的时候,采用的简化QR分解 Q ∈ R m × k Q \in \mathbb{R}^{m \times k} QRm×k R ∈ R k × n R \in \mathbb{R}^{k \times n} RRk×n。其中 k = m i n ( m , n ) k=min(m,n) k=min(m,n)
当mode=’complete‘的时候,采用的完全QR分解 Q ∈ R m × m Q \in \mathbb{R}^{m \times m} QRm×m R ∈ R m × n R \in \mathbb{R}^{m \times n} RRm×n
注意,当 n > = m n>=m n>=m时,简化的QR分解与完全的QR分解一致。
当mode=’r‘的时候,仅返回简化QR分解的r矩阵,Q矩阵为空。 R ∈ R k × n R \in \mathbb{R}^{k \times n} RRk×n

注意

  1. mode='r’不支持反向传播,请采用mode=‘reduced’
  2. 当A的前 k = m i n ( m , n ) k=min(m,n) k=min(m,n)列线性无关时,QR分解仅在R的对角线处唯一。如果不是这种情况,不同的库或在不同设备上可能会产生不同的有效分解。
  3. 仅当A中每个矩阵的前 k = m i n ( m , n ) k=min(m,n) k=min(m,n)列线性无关时,才支持梯度计算。如果不满足这个条件,不会抛出错误,但是产生的梯度会不正确。这是因为QR分解在这些点上是不可微的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要可视化UNet模型中的特征图,您可以使用PyTorch中的hook函数。hook函数允许您在模型的特定层上注册一个函数,该函数将在每次前向传播时被调用,并且可以访问该层的特征图。 下面是一个示例,展示了如何使用hook函数可视化UNet模型的特征图: ```python import torch import torch.nn as nn import torchvision.utils as vutils # 定义UNet模型 class UNet(nn.Module): def __init__(self): super(UNet, self).__init__() # 定义UNet的结构 def forward(self, x): # UNet的前向传播过程 return output # 创建UNet模型实例 model = UNet() # 注册hook函数的回调函数 def hook_fn(module, input, output): # 可视化特征图的代码 fmap_grid = vutils.make_grid(output, normalize=True, scale_each=True) writer.add_image('feature map', fmap_grid, global_step=322) # 找到要可视化特征图的层 target_layer = model.conv1 # 注册hook函数 hook_handle = target_layer.register_forward_hook(hook_fn) # 执行前向传播 output = model(input) # 移除hook函数 hook_handle.remove() ``` 在上面的代码中,您需要替换`UNet`类中的代码以定义您自己的UNet模型。然后,选择要可视化特征图的目标层,并将其传递给`register_forward_hook`函数以注册hook函数。 在hook函数中,您可以执行特征图的可视化操作,并使用TensorBoard将其添加到图像中。确保根据您的设置正确导入`torch`、`torch.nn`和`torchvision.utils`模块,并将`writer`替换为您用于记录TensorBoard事件的实际写入器。 请注意,在执行完前向传播后,不要忘记使用`remove()`方法移除hook函数,以免在之后的前向传播中再次调用hook函数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值