pytorch: tensor与numpy之间的转换[通俗易懂]

pytorch: tensor与numpy之间的转换[通俗易懂]训练时,输入一般为tensor,但在计算误差时一般用numpy;tensor和numpy的转换采用numpy()和from_numpy这两个函数机型转换。值得注意的是,这两个函数所产生的tensor和numpy是共享相同内存的,而且两者之间转换很快。importtorchimportnumpyasnp#Converttensortonumpya=torch.ones(3)b=a.numpy()print(a,b)a+=1print(a,b)#Conve

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

训练时,输入一般为tensor,但在计算误差时一般用numpy;tensor和numpy的转换采用numpy()和from_numpy这两个函数机型转换。值得注意的是,这两个函数所产生的tensor和numpy是共享相同内存的,而且两者之间转换很快。

import torch
import numpy as np

# Convert tensor to numpy
a = torch.ones(3)
b = a.numpy()
print(a, b)
a += 1
print(a, b)

# Convert numpy to tensor
c = np.ones(3)
d = torch.from_numpy(c)
print(c, d)
c += 1
print(c, d)

输出为:
tensor([1., 1., 1.]) [1. 1. 1.]
tensor([2., 2., 2.]) [2. 2. 2.]
[1. 1. 1.] tensor([1., 1., 1.], dtype=torch.float64)
[2. 2. 2.] tensor([2., 2., 2.], dtype=torch.float64)

另外,还有一个numpy转换为tensor的函数,但不共享内存,转换较慢

import torch
import numpy as np

e = np.array([1,2,3])
f = torch.tensor(e)
print(e, f)
e += 1
print(e, f)

输出为:
[1 2 3] tensor([1, 2, 3], dtype=torch.int32)
[2 3 4] tensor([1, 2, 3], dtype=torch.int32)

再另外介绍一个取数字的函数:item() ,该函数把tensor和numpy的数转化为数的类型。例如,type(a[0])和type(b[0])分别为tensor和numpy,用item()就可以转化为int或float。当要把训练结果写入到excel保存时,只能时python的原生数字形式,该函数就发挥作用了。

print(type(a[1]))
print(type(b[1]))
print(type(a[1].item()))
print(type(b[1].item()))

<class ‘torch.Tensor’>
<class ‘numpy.float32’>
<class ‘float’>
<class ‘float’>

注意·:该函数只能用在对象引用一个数组,不能用在包含一个数组的对象,如a.item()或b.item()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180533.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle中更改表名称,oracle中修改表名的几种方式[通俗易懂]

    oracle中更改表名称,oracle中修改表名的几种方式[通俗易懂]answer1:ALTERTABLEold_table_nameRENAMETOnew_table_name;(大写为系统命令)answer2:sql>selecttnamefromtab;@H_404_7@TNAME@H_404_7@——————————@H_404_7@TEST@H_404_7@@H_404_7@sql>…

    2022年5月13日
  • 自己动手实现arping

    自己动手实现arping只要接触过网络的人,相信对ping命令并不陌生。该命令可以用来检测本机到目标机的网络是否连通,是一种很常见的网络监测手段。对网络熟悉一点的人可能还知道ping命令的工作原理。让我们看看ping命令的介绍:DESCRIPTIONpingusestheICMPprotocol’smandatoryECHO_REQUESTdatagramtoelicitanICMPECHO_RESPONSEfromahostorgateway….

    2022年6月7日
  • client denied by server configuration[通俗易懂]

    client denied by server configuration

    2022年3月7日
  • hash 哈希算法_哈希一致性算法

    hash 哈希算法_哈希一致性算法文章目录一、哈希函数定义特点应用常见哈希算法二、murmurhash定义特点应用介绍三、MurmurHash使用四、性能测试MurmurHash:(multiplyandrotate)and(multiplyandrotate)Hash,乘法和旋转的hash算法。一、哈希函数定义散列函数(英语:Hashfunction)又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合

    2022年10月18日
  • 小程序白屏问题和内存研究

    小程序白屏问题和内存研究

    2021年6月18日
  • JS 暂时性死区[通俗易懂]

    JS 暂时性死区[通俗易懂]JS暂时性死区ES6暂时性死区引用ES6暂时性死区只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。vartmp=123;if(true){tmp=’abc’;//ReferenceErrorlettmp;}上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,导致后…

    2022年6月30日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号