什么是 Tensor ?有什么作用?
刚开始接触深度学习框架是从tensorflow开始的,1.x时代真不适合人类,各种api频繁更替,混乱,文档零碎。作为初学者当时最头疼的有两个概念,一个是 graph flow,另一个就是 tensor。后者直到使用 pytorch 后才逐渐搞清楚。
其实,Tensor 与 Numpy ndarray 类似都能作为 array 和 matrix 使用。在 pytorch 中经常使用 tensor 存储 model input、output、parameters 等。另外,tensor 还有几个特殊技能非常值得关注:
- Tensor 可在硬件加速器上使用(如 gpu、tpu)
- Tensor 和 Numpy array 可以共享内存,避免数据来回拷贝的开销(Bridge with Numpy)
- Tensor 针对自动微分(automatic diffferentiation)优化过
初始化 Tensor
熟悉 tensor 的各种初始化方法有助于提升编程效率。
# directly from data
data = [[1, 2], [3, 4]]
x_data = torch.tensor(data)
# from ndarray
np_array = np.array(data)
x_np = torch.from_numpy(np_array)
# from tensor
x_ones = torch.ones_like(x_data)
x_rand = torch.rand_like(x_data, dtype=torch.float)
# with random or constant values
shape = (2,3,)
rand_tensor = torch.rand(shape)