引言
- 本文为个人记录学习使用pytorch来构建RNN代码过程中遇到的一些函数用法总结
- 本文主要包含pytorch中torch.from_numpy()以及其他与其功能类似的函数,有些注释可能存在错误,仅供参考
torch.from_numpy()
- 该函数功能就是从
numpy.ndarray创建一个tensor张量
该方法创建的张量和ndarray是共享同一内存的,对张量的修改将反映在ndarray中,反之亦然。且返回的张量是不能调整大小的。
- 测试代码和测试结果展示
import torch
import numpy as np
# 效果展示
a=np.array([1,2,3,4])
print(a, type(a))
b = torch.from_numpy(a)
print(b, type(b))
其他与其功能类似的函数
- 除此之外还有其他几个方法也可以实现该功能:
torch.Tensor(), torch.tensor()、torch.as_tensor()
其中torch.Tensor()是类构造函数,其余三种为工厂函数。工厂函数是指接受参数输入并返回特定类型对象的函数,其允许更多的动态对象创建,有更多的配置参数。通常情况下更倾向于选择工厂函数
- 结果上类构造函数和工厂函数的结果还是不太一样的,其实明显可以看到返回的数据类型中第一个返回结果是float类型
- 注1:在内存上区别,前两个方法是使用拷贝将数组中元素拷贝到张量中的,后两种是共享数据的,显然共享数据是可以节省空间的更加高效的(或者说这俩就是一种是深拷贝,一种是浅拷贝)
- 如果想要使用拷贝的方式最优选是
.tensor(),因为Tensor()是类构造函数,所以...; 如果使用共享方式最优选择是.as_tensor(),主要是因为后一个只能接收numpy数组,这个可以接收更多的数据结构
- 如果想要使用拷贝的方式最优选是
- 注2:numpy.ndaaray对象是分配在CPU上的,如果使用GPU的话,两种拷贝方法需要先将数据从CPU拷贝到GPU