Pytorch第四课:package-torch.Storage类详解

版权声明:本文为王小草原创文章,要转载请先联系本人哦 https://blog.csdn.net/sinat_33761963/article/details/84614923

一个torch.Storage是一个单一数据类型的连续一维数组。

每个torch.Tensor都有一个对应的、相同数据类型的存储:class torch.FloatStorage

1 torch.Storage类型

import torch

torch.FloatStorage([1,2,3,4,5])
torch.ByteStorage([1,2,3,4,5])
torch.ShortStorage([1,2,3,4,5])
torch.IntStorage([1,2,3,4,5])
torch.LongStorage([1,2,3,4,5])
torch.FloatStorage([1,2,3,4,5])
torch.DoubleStorage([1,2,3,4,5])
torch.ShortStorage([1,2,3,4,5])
 1
 2
 3
 4
 5
[torch.ShortStorage of size 5]

2 构造Storage

你可以使用torch.FloatStorage()构造一个空的Storage,构造函数的数值是随机初始化的。

我们可以使用2种方法来构造torch.FloatStorage()并把它存入内存中

# 1.通过数组
torch.FloatStorage([1,2,3,4,5])
 1.0
 2.0
 3.0
 4.0
 5.0
[torch.FloatStorage of size 5]
# 2.随机生成一个Storage
torch.FloatStorage(5)
 0.0
 2.524354896707238e-29
 5.68810702241079e+19
 -2.5249696896566726e-29
 2.802596928649634e-45
[torch.FloatStorage of size 5]

3 Storage的操作

3.1 类型的转化

byte():将此存储转为byte类型

char():将此存储转为char类型

float():将此存储转为float类型

double():将此存储转为double类型

half():将此存储转为half类型

int():将此存储转为int类型

long():将此存储转为long类型

short():将此存储转为short类型

a = torch.FloatTensor([1,2,3,4])
print(a.int().type()) # 转换成int
print(a.long().type()) # 转换成long
torch.IntTensor
torch.LongTensor

3.2 复制

clone():返回此存储的一个副本

copy_():复制

cpu():如果当前此存储不在CPU上,则返回一个它的CPU副本

cuda(device=None, async=False):返回此对象在CUDA内存中的一个副本。如果此对象已在CUDA内存中且在正确的设备上,那么不会执行复制操作,直接返回原对象。

a = torch.FloatTensor([1,2,3,4])
b = a.clone()
print(b)
tensor([ 1.,  2.,  3.,  4.])

3.3 torch.Storage与torch.Tensor之间的转化

将Tensor转换为Storage非常简单,只需要storage()函数即可

a = torch.FloatTensor([1,2,3,4])
print(a)
print(a.storage())

tensor([ 1.,  2.,  3.,  4.])
 1.0
 2.0
 3.0
 4.0
[torch.FloatStorage of size 4]

3.4 其他操作

大部分操作都与torch.Tensor包中类似。如下给出:
data_ptr() =>获取第一个元素的位置
element_size() =>回单个元素的字节大小
fill_() =>填充某个值
new() =>构建一个有相同数据类型的storage
pin_memory() =>如果此存储当前未被锁定,则将它复制到锁定内存中。
resize_() => 重新调整大小
share_memory_() =>将此存储移动到共享内存中。
size() =>返回storage大小
tolist() =>返回一个包含此存储中元素的列表
type(new_type=None, async=False) =>将此对象转为指定类型。
from_buffer()
is_cuda = False
is_pinned()
is_shared()
is_sparse = False

猜你喜欢

转载自blog.csdn.net/sinat_33761963/article/details/84614923