cpu_imgs.numpy()
5.
note:GPU tensor不能直接转为numpy数组,必须先转到CPU tensor。
6. 如果tensor是
标量
的话,可以直接使用 item() 函数
(只能是标量)
将值取出来:
print loss_output.item()
我想要对一个大批量的
数据
分批输入模型得到所有的embedding,但是过程进行到
中
间报
cuda
out of memory。经查勘是因为早些的embedding没有及时从
cuda
中
释放内存导致后面的model无法进行forward。
只需要
pytorch
的
tensor
.
cpu
()就可以释放了。
举个例子:
embeddings=[]
for batch in data_loader:
embedding_batch=model(input_data)
embeddings.append(e
前面的博客简单讲了Variable和Parameter的区别,这次加入tenor,详细的分析三者的区别和联系。文
中
参考了
Pytorch
中
的
Tensor
, Variable & Parameter
1.
Tensor
pytorch
中
的
Tensor
类似于
numpy
中
的array,而不直接用
tensor
的原因,是因为
tensor
能够更方便地在
GPU
上进行运算。
pytorch
为
tensor
设计了许多方便的操作,同时
tensor
也可以轻松地和
numpy
数组进行相互
转换
。
2.Variable
Variable是对
Tensor
的封装,操作与
tensor
基本一致,不同的是
# 以下代码只有在
PyTorch
GPU
版本上才会执⾏行行
if torch.
cuda
.is_available():
device
= torch.
device
("
cuda
") #
GPU
y = torch.ones_like(x,
device
=
device
) # 直接创建一个在
GPU
上的
Tensor
x = x.to(
device
) # 等价于 .to("
cuda
")
z = x + y
print(z)
print(z.to("
cpu
", torch.double)) # to()还可以同时更改.
PyTorch
教程-7:
PyTorch
中
保存与加载
tensor
和模型详解
保存和读取
Tensor
PyTorch
中
的
tensor
可以保存成 .pt 或者 .pth 格式的文件,使用torch.save()方法保存张量,使用torch.load()来读取张量:
x = torch.rand(4,5)
torch.save(x, "./my
Tensor
.pt")
y = torch.load("./my
Tensor
.pt")
print(y)
tensor
([[0.9363, 0.2292, 0.1612,
普通的计算都是发生在
cpu
里的,如果
数据
在
cpu
中
,那么可以通过 x.
numpy
()方法将
tensor
转为
numpy
要调用
gpu
计算要 x.
cuda
(), 如果还要回到内存要先.
cpu
除char
tensor
外所有
tensor
都可以
转换
为
numpy
import torch as tor
import
numpy
as np
a = tor.ones(5)
tensor
([1., 1., 1., 1., 1.])
a.dev
因为data.
cpu
后,会将data的类型改为builtin_function_or_method,所以一定记得加()报错里面的内容就已经告诉我们怎么改了,即在
数据
后面加.
cpu
()在
cpu
上运行
tensor
张量,会出现如下报错。其
中
data可以是一维,二维,三维等等。注意
cpu
后面加(),否则会报错。个人遇到的bug记录。
有时候,需要查看模型和
数据
是在
GPU
上,还是在
CPU
上;或者需要将模型和
数据
放在指定的
GPU
或者
CPU
上,那该怎么做呢?
1. 判断模型是在
GPU
上还是
CPU
上
model = nn.LSTM(input_size=10, hidden_size=4, num_layers=1, batch_first=True)
print(next(model.parameters()).
device
)
2.判断
数据
是在
GPU
上还是
CPU
上
data = torch.ones([2, 3])
print(d