相关阅读Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482在Pytorch中reshape()是Tensor类的一个重要方法它与Numpy中的reshape类似用于返回一个改变了形状但数据和数据的顺序与原来一致的新张量。注意此时返回的新张量可能与原张量共享底层存储此时返回的称作原张量的视图这取决于应用此方法的Tensor是否能使用View方法完成同样的功能。张量的视图可能是一个非连续张量关于它的更多细节可以看下面的文章。Pytorch基础Tensor的连续性https://blog.csdn.net/weixin_45791458/article/details/140736700?ops_request_misc%257B%2522request%255Fid%2522%253A%2522eb4c722817c335758581a52404bb2dce%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_ideb4c722817c335758581a52404bb2dcebiz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-140736700-null-null.nonecaseutm_term%E9%9D%9E%E8%BF%9E%E7%BB%ADspm1018.2226.3001.4450reshape()方法的语法如下所示Tensor.reshape(*shape) → Tensor shape (tuple of ints or int...) - the desired shapereshape()的用法如下所示import torch # 创建一个张量 x torch.randn(3, 4) tensor([[ 0.1961, -0.9038, 0.9196, -1.1851], [ 1.1321, 0.3153, 0.3485, 0.7977], [-0.5279, 0.2062, -0.4224, -0.3993]]) # 使用reshape()方法将其重新塑造为2行6列的形状 y x.reshape(2, 6) y x.reshape((2,6)) #两种形式均可y x.reshape([2,6])也可 tensor([[ 0.1961, -0.9038, 0.9196, -1.1851, 1.1321, 0.3153], [ 0.3485, 0.7977, -0.5279, 0.2062, -0.4224, -0.3993]])可以看到给出的参数既可以是多个整数其中每个整数代表一个维度的大小而整数的数量代表维度的数量也可以是一个元组或是列表其中每个元素代表一个维度的大小而元素数量代表维度的数量。而且reshape()方法不改变Tensor中数据的排列顺序指的是从上到下从左到右遍历的顺序只改变形状这也就对reshape()方法各维度大小的乘积有要求要与原Tensor一致。在上例中即3*42*6。另外reshape()方法还有一个trick即某一维的实参可以是-1此时会自动根据原Tensor大小和给出的其他维度参数的大小推断出这一维度的大小举例如下import torch # 创建一个张量 x torch.randn(3, 4) tensor([[ 0.1961, -0.9038, 0.9196, -1.1851], [ 1.1321, 0.3153, 0.3485, 0.7977], [-0.5279, 0.2062, -0.4224, -0.3993]]) # 使用reshape()方法将其重新塑造为6行n列的形状n为自动推断出的值 y x.reshape(6, -1) tensor([[ 0.1961, -0.9038], [ 0.9196, -1.1851], [ 1.1321, 0.3153], [ 0.3485, 0.7977], [-0.5279, 0.2062], [-0.4224, -0.3993]]) # 使用reshape()方法将其重新塑造为(2,2,n)的形状n为自动推断出的值 y x.reshape(2, 2, -1) tensor([[[ 0.1961, -0.9038, 0.9196], [-1.1851, 1.1321, 0.3153]], [[ 0.3485, 0.7977, -0.5279], [ 0.2062, -0.4224, -0.3993]]]) # 不能在两个维度都指定-1这时无法推断出唯一结果 y x.reshape(2, -1, -1) Traceback (most recent call last): File stdin, line 1, in module RuntimeError: only one dimension can be inferred除此之外还可以使用torch.reshape()函数这与使用reshape()方法效果一致torch.reshape()的语法如下所示。torch.reshape(input, shape) → Tensor input (Tensor) – the tensor to be reshaped shape (tuple of python:int) – the new shape import torch # 创建一个张量 x torch.randn(3, 4) tensor([[ 0.1961, -0.9038, 0.9196, -1.1851], [ 1.1321, 0.3153, 0.3485, 0.7977], [-0.5279, 0.2062, -0.4224, -0.3993]]) # 使用torch.reshape()函数将其重新塑造为6行n列的形状n为自动推断出的值 y torch.reshape(x, (6, -1)) tensor([[ 0.1961, -0.9038], [ 0.9196, -1.1851], [ 1.1321, 0.3153], [ 0.3485, 0.7977], [-0.5279, 0.2062], [-0.4224, -0.3993]])