窝牛号

pytorch深度学习框架之tensor张量

张量

上期文章我们介绍了pytorch的基础知识,本期我们将开始我们的pytorch之旅的第一个技术知识点--张量

Numpy 提供了一个 n 维数组对象,以及许多用于操作这些数组的函数。Numpy 是科学计算的通用框架;它对计算图、深度学习或梯度一无所知。但是,我们可以通过使用 numpy 操作手动实现网络的前向和后向传递。

Numpy 是一个很棒的框架,但它不能利用 GPU 来加速其数值计算。对于现代深度神经网络,GPU 通常提供50 倍或更高的加速,因此不幸的是 numpy 不足以用于现代深度学习。

这里我们介绍最基本的PyTorch 概念:张量。PyTorch Tensor 在概念上与 numpy 数组相同:Tensor 是一个 n 维数组,PyTorch 提供了许多操作Tensor 的函数。在幕后,张量可以跟踪计算图和梯度,但它们也可用作科学计算的通用工具。

同样与 numpy 不同的是,PyTorch Tensors 可以利用 GPU 来加速其数值计算。要在 GPU 上运行 PyTorch Tensor,只需指定正确的设备。

在开始本文章前,我们需要安装pytorch第三方库软件,直接在cmd命令框中输入

pip install pytorch torchvision tensor([1., 1., 1., 1., 1.]) b = torch.zeros(5) print(b) tensor([1., 2., 3., 4., 5.])

使用以上方法我们定义了一维的数据张量,其中torch.tensor中接受一个numpy的数组

当然我们也可以定义一个2维数据或者多维数据,并可以使用shape属性查看张量的属性

data = [[1, 2],[3, 4]] x_data = torch.tensor(data) print(x_data) tensor([[1, 2], [3, 4]], dtype=torch.int32) g = torch.tensor([[[1., 2.], [3., 4.]], [[5., 6.], [7., 8.]]]) print(g) print(g.shape) tensor([[[1., 2.], [3., 4.]], [[5., 6.], [7., 8.]]]) torch.Size([2, 2, 2])

当然通过以上的方式定义一个张量外,我们还可以使用另外一个张量来定义新的张量

这里需要说明除非明确覆盖,否则新张量保留原始张量的属性(形状、数据类型)。

data = [[1, 2],[3, 4]] x_data = torch.tensor(data) print(x_data) x_ones = torch.ones_like(x_data) 34;Ones Tensor: n {x_ones} n& 重新定义张量为float类型 print(f&34;) tensor([[1, 2], [3, 4]]) Ones Tensor: tensor([[1, 1], [1, 1]]) Random Tensor: tensor([[0.6791, 0.0938], [0.8537, 0.9403]])

同样的我们还可以使用张量的shape的属性定义一个张量,shape是张量维度的元组,除了shape属性外,张量还有tensor.dtype与tensor.device属性

shape = (2,3,) rand_tensor = torch.rand(shape) ones_tensor = torch.ones(shape) zeros_tensor = torch.zeros(shape) print(f&34;) print(f&34;) print(f&34;) tensor = torch.rand(3,4) print(f&34;) print(f&34;) print(f&34;) Random Tensor: tensor([[0.2010, 0.4683, 0.1847], [0.8443, 0.3900, 0.8123]]) Ones Tensor: tensor([[1., 1., 1.], [1., 1., 1.]]) Zeros Tensor: tensor([[0., 0., 0.], [0., 0., 0.]]) Shape of tensor: torch.Size([3, 4]) Datatype of tensor: torch.float32 Device tensor is stored on: cpu张量运算

张量运算与普通的数据运算类似,包括算术、线性代数、矩阵操作(转置、索引、切片)、采样等。这些操作中的每一个都可以在 GPU 上运行(速度通常比在 CPU 上更高)。默认情况下,张量是在 CPU 上创建的。我们需要使用.to方法明确地将张量移动到 GPU

if torch.cuda.is_available(): tensor = tensor.to(&39;)张量的数学操作可以参考pytorch.org/docs/stable/torch.html tensor1 = torch.tensor([[1,2,3],[4,5,6]]) tensor2 = torch.tensor([[-1,2,-3],[4,-5,6]]) print(tensor1+tensor2) print(torch.add(tensor1,tensor2)) [ 8, 0, 12]]) print(tensor1-tensor2) print(torch.sub(tensor1,tensor2)) [ 0, 10, 0]]) print(tensor1 * 2) [ 8, 10, 12]]) print(tensor1 * tensor2) [ 16, -25, 36]]) tensor3 = torch.tensor([[1,2],[3,4],[5,6]]) print(torch.mm(tensor1,tensor3)) [49, 64]]) tensor([[0, 1, 1], tensor([[-1, 1, -1], 34;t: {t}&34;n: {n}&34;t: {t}&34;n: {n}&NumPy 数组到张量,同样的由于CPU 和 NumPy 数组上的张量可以共享它们的底层内存位置,改变一个将改变另一个 n = np.ones(5) t = torch.from_numpy(n) t: tensor([1., 1., 1., 1., 1.], dtype=torch.float64) n: [1. 1. 1. 1. 1.] t: tensor([2., 2., 2., 2., 2.], dtype=torch.float64) n: [2. 2. 2. 2. 2.]

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1