pytorch中.numpy()、.item()、.cpu()、.detach()及.data的使用

目录

*

+ .numpy()
+ .item()
+ .cpu()
+ .detach()和.data(重点)

.numpy()

Tensor.numpy()将Tensor转化为ndarray,这里的Tensor可以是标量或者向量(与item()不同)转换前后的dtype不会改变


a = torch.tensor([[1.,2.]])

a_numpy = a.numpy()

.item()

将一个Tensor变量转换为python标量(int float等)常用于用于深度学习训练时,将loss值转换为标量并加,以及进行分类任务,计算准确值值时需要

        optimizer.zero_grad()
        outputs = model(data)
        loss = F.cross_entropy(outputs, label)

        acc = (outputs.argmax(dim=1) == label).sum().cpu().item() / len(labels)
        loss.backward()
        optimizer.step()
        train_loss += loss.item()
        train_acc += acc

.cpu()

将数据的处理设备从其他设备(如.cuda()拿到cpu上),不会改变变量类型,转换后仍然是Tensor变量。

.detach()和.data(重点)

.detach()就是返回一个新的tensor,并且这个tensor是从当前的计算图中分离出来的。但是返回的tensor和原来的tensor是共享内存空间的。
举个例子来说明一下detach有什么用。 如果A网络的输出被喂给B网络作为输入, 如果我们希望在梯度反传的时候只更新B中参数的值,而不更新A中的参数值,这时候就可以使用detach()

a = A(input)
a = a.deatch()
out = B(a)
loss = criterion(out, labels)
loss.backward()

Tensor.data和Tensor.detach()一样, 都会返回一个新的Tensor, 这个Tensor和原来的Tensor共享内存空间,一个改变,另一个也会随着改变,且都会设置新的Tensor的requires_grad属性为False。这两个方法只取出原来Tensor的tensor数据, 丢弃了grad、grad_fn等额外的信息。

tensor.data是不安全的, 因为 x.data 不能被 autograd 追踪求微分
这是为什么呢?我们对.data进行进一步探究

import torch

a = torch.tensor([4., 5., 6.], requires_grad=True)
print("a", a)
out = a.sigmoid()
print("out", out)
print(out.requires_grad)
result = out.data
result.zero_()
print("result", result)
print("out", out)
out.sum().backward()
print(a.grad)
'''运行结果为:
a tensor([4., 5., 6.], requires_grad=True)
out tensor([0.9820, 0.9933, 0.9975], grad_fn=)
True
result tensor([0., 0., 0.])
out tensor([0., 0., 0.], grad_fn=)
tensor([0., 0., 0.])
'''

由于更改分离之后的变量值result,导致原来的张量out的值也跟着改变了,但是这种改变对于autograd是没有察觉的,它依然按照求导规则来求导,导致得出完全错误的导数值却浑然不知。

那么我们继续看看.detach()

pytorch中.numpy()、.item()、.cpu()、.detach()及.data的使用
可以看到将.data改为.detach()后程序立马报错,阻止了非法的修改,安全性很高

我们需要记住的就是:

  • .data 是一个属性,二.detach()是一个方法;
  • .data 是不安全的,.detach()是安全的。

Original: https://blog.csdn.net/gary101818/article/details/124658826
Author: Unstoppable~~~
Title: pytorch中.numpy()、.item()、.cpu()、.detach()及.data的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/757075/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 【Pygame实战】末世来临,真正从零开始的残酷生存游戏,你能活多久?

    导语 世界上有那么一群人,他们相信在有生之年会遭遇末日电影中出现的那些情况。 诸如生化灾难、自然灾难、外星人入侵等等。 这群人有个挺酷的名字——”末日生存主义者&#82…

    Python 2023年9月18日
    073
  • 深度学习之step by step搭建神经网络

    def zero_pad(X,pad): """ 把数据集X的图像边界全部使用0来扩充pad个宽度和高度。 参数: X – 图像数据集,维度为(样本数…

    Python 2023年10月29日
    032
  • 0.django部署(基础知识)

    我们前面的代码都是在我们自己的电脑(通常是Windows操作系统)上面运行的,因为我们还处于开发过程中。 当我们完成一个阶段的开发任务后,就需要把我们开发的网站服务,给真正的用户使…

    Python 2023年8月4日
    049
  • Flask——创建模型类

    常用的SQLAlchemy字段类型: 类型名python中类型python中类型Integerint普通整数,一般是32位SmallIntegerint取值范围小的整数,一般是16…

    Python 2023年8月13日
    064
  • 递归(基础)

    目录 一、递归的定义 1、什么时候会用到递归的方法 1. 定义是递归的 2. 数据结构是递归的 3. 问题的解法是递归的 2、应用递归的原则 3、递归调用顺序问题 1. 首先递归的…

    Python 2023年11月6日
    042
  • python3GUI–在线小说播放器By:PyQt5(附ui源码)

    一.准备工作 1.PyQt5 2.qtawesome 3.QMediaPlayer 4.LAVFilters 二.预览 1.启动 2.查看小说详情&播放小说 3.搜索后播放…

    Python 2023年6月12日
    085
  • 连连看有点费脑力,于是我直接用Python写了个自动过关脚本!太爽了!

    -*- coding:utf-8 -*- import cv2 import numpy as np import win32api import win32gui import …

    Python 2023年11月9日
    064
  • MySQL高可用之MHA架构企业实战

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

    Python 2023年8月26日
    070
  • 测试之Pytest

    Pytest 属于单元测试框架。针对软件最小单位(函数、方法)进行正确性的检查测试。框架用途:1.测试发现:从多个文件去找测试用例。2.测试执行:按照一定的顺序和规则执行,并生成结…

    Python 2023年9月14日
    066
  • Python函数:apply()

    函数: DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds…

    Python 2023年8月6日
    049
  • pytest的allure

    Allure是一款轻量级并且非常灵活的开源测试报告框架。 它支持绝大多数测试框架, 例如TestNG、Pytest、JUint等。它简单易用,易于集成。 先配置allure 验证是…

    Python 2023年9月13日
    058
  • vue项目的首屏优化策略

    虽然标题是vue项目的首屏优化策略,但是里面绝大部分的方法,对于其他语言写成的单页应用同样适用 首屏进入时,直接加载和首屏相关路由,其他全部路由组件实现懒加载,即打开该路由时再去加…

    Python 2023年10月7日
    045
  • JMeter+JDK+目录详解安装配置(详细教程)

    一、JMeter下载/安装 1、首先你要先去官网下载,这是地址:https://jmeter.apache.org 2、点Download Releases,选择最新版的下载 3、…

    Python 2023年8月2日
    084
  • Web-python+selenium-自动化测试技术-考试系统测试脚本

    Original: https://www.cnblogs.com/123456feng/p/16119239.htmlAuthor: 蚂蚁ailingTitle: Web-pyt…

    Python 2023年11月3日
    036
  • pandas(3)缺失值重复值以及时间类型的处理

    注意:drop和concat系方法axis=0,axis=1列,其它大多数与之相反1、描述统计:(1)查看整体描述统计describe()(2)数据分组pd.cut() 2、缺失值…

    Python 2023年8月7日
    061
  • CUlane数据集介绍

    culane数据集是车道线检测的一个比较通用的数据集,是由SCNN这篇论文提出的。它是由安装在六辆由北京不同驾驶员驾驶的不同车辆上的摄像机收集的。 收集了超过55小时的视频,并提取…

    Python 2023年10月8日
    043
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球