Pytorch中的 .detach().cpu().numpy()

用法

在 PyTorch 中,.detach().cpu().numpy() 是一个常见的链式方法调用,主要用于将一个在计算图中(即由 autograd 跟踪的)张量转换为 NumPy 数组。

.detach():

  1. detach 方法用于从计算图中分离出一个张量。也就是说,返回一个新的张量,该张量与原始张量共享相同的数据,但不会再计算梯度。
  2. 这在需要将张量用于不希望追踪计算图的操作时非常有用,比如在推理过程中或在计算损失之外进行一些操作时。

.cpu():

  1. 将张量移动到 CPU 内存中。如果张量已经在 CPU 上,则该操作不会有任何影响;如果张量在 GPU 上,则会将其数据从 GPU 内存传输到 CPU 内存。
  2. 这是因为 NumPy 仅能处理 CPU 内存中的数据,而不能直接处理 GPU 上的数据。

.numpy():

  1. 将 PyTorch 张量转换为 NumPy 数组。
  2. PyTorch 张量和 NumPy 数组之间共享内存,因此转换是一个轻量级的操作,不会复制数据。

应用场景

  • 模型推理和评估:在推理过程中将张量转换为 NumPy 数组,以便使用 NumPy 进行后续处理。
  • 数据可视化:将张量转换为 NumPy 数组,以便使用 Matplotlib 等库进行绘图。
  • 与其他库的兼容性:一些库(如 SciPy、Scikit-learn)需要 NumPy 数组作为输入,通过这种方法可以轻松转换数据格式。

这种方法使得在使用 PyTorch 进行深度学习时,可以方便地在张量和 NumPy 数组之间进行转换,从而利用两者的优势。


例子

def train(epoch):

    RMSE = 0
    cost_all = 0

    for step, (batch_x, batch_mask_x, batch_y) in enumerate(loader):

        batch_x = batch_x.type(torch.FloatTensor).cuda()
        batch_mask_x = batch_mask_x.type(torch.FloatTensor).cuda()

        decoder = rec(batch_x)   # 前向传播
        loss, rmse = rec.loss(decoder=decoder, input=batch_x, optimizer=optimer, mask_input=batch_mask_x)   # 计算损失
        optimer.zero_grad()   # 清零梯度
        loss.backward()    # 反向传播计算梯度
        optimer.step()    # 更新参数
        cost_all += loss
        RMSE += rmse

    # detach()
    RMSE = np.sqrt(RMSE.detach().cpu().numpy() / (train_mask_r == 1).sum())
    print('epoch:', epoch, 'train RMSE:', RMSE)
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cheeryang_ego

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值