日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

view(*args)改变张量的大小和形状_pytorch reshape numpy

發布時間:2023/11/28 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 view(*args)改变张量的大小和形状_pytorch reshape numpy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

20201227

這個方法是在不改變數據內容的情況下,改變一個數組的格式,參數及返回值,官網介紹:

a:數組–需要處理的數據

newshape:新的格式–整數或整數數組,如(2,3)表示2行3列,新的形狀應該與原來的形狀兼容,即行數和列數相乘后等于a中元素的數量

order:

首先做出翻譯:order : 可選范圍為{‘C’, ‘F’, ‘A’}。使用索引順序讀取a的元素,并按照索引順序將元素放到變換后的的數組中。如果不進行order參數的設置,默認參數為C。

(1)“C”指的是用類C寫的讀/索引順序的元素,最后一個維度變化最快,第一個維度變化最慢。以二維數組為例,簡單來講就是橫著讀,橫著寫,優先讀/寫一行。

(2)“F”是指用FORTRAN類索引順序讀/寫元素,最后一個維度變化最慢,第一個維度變化最快。豎著讀,豎著寫,優先讀/寫一列。注意,“C”和“F”選項不考慮底層數組的內存布局,只引用索引的順序。

(3)“A”選項所生成的數組的效果與原數組a的數據存儲方式有關,如果數據是按照FORTRAN存儲的話,它的生成效果與”F“相同,否則與“C”相同。這里可能聽起來有點模糊,下面會給出示例。

二、示例解釋

1、首先隨機生成一個4行3列的數組

2、使用reshape,這里有兩種使用方法,可以使用np.reshape(r,(-1,1),order=‘F’),也可以使用r1=r.reshape((-1,1),order=‘F’),這里我選擇使用第二種方法。通過示例可以觀察不同的order參數效果。



F 按列的順序 先排列的元素
通過例子可以看出來,F是優先對列信息進行操作,而C是優先行信息操作。如果未對r的格式進行設置,那么我們rashape的時候以“A”的順序進行order的話,它的效果和“C”相同。

3、我們將r的存儲方式進行修改,修改為類Fortan的方式進行存儲。并做與第2步類似的操作。


2.接下來創建一個數組a,可以看到這是一個一維的數組


3.使用reshape()方法來更改數組的形狀,可以看到看數組d成為了一個二維數組


4.通過reshape生成的新數組和原始數組公用一個內存,也就是說,假如更改一個數組的元素,另一個數組也將發生改變

5.同理還可以得到一個三維數組

reshape(-1,1)什么意思:

大意是說,數組新的shape屬性應該要與原來的配套,如果等于-1的話,那么Numpy會根據剩下的維度計算出數組的另外一個shape屬性值。

只有-1的話 默認是展平成一維 與shape數值相同的行 是沒有列的
shape表現為(xx,) 如果假設有一列的話應該是(xx,1) 但是又可以
直接當做有一列來操作 不必可以先轉成有一列再進行其他操作

也就是說,先前我們不知道z的shape屬性是多少,但是想讓z變成只有一列,行數不知道多少,通過z.reshape(-1,1),Numpy自動計算出有12行,新的數組shape屬性為(16, 1),與原來的(4, 4)配套。


同理,只給定行數,newshape等于-1,Numpy也可以自動計算出新數組的列數。

https://www.jianshu.com/p/fc2fe026f002

20201202

import torch
a = torch.randn(3,5,2)
print(a)
print(a.view(-1))
tensor([[[-0.6887,  0.2203],[-1.6103, -0.7423],[ 0.3097, -2.9694],[ 1.2073, -0.3370],[-0.5506,  0.4753]],[[-1.3605,  1.9303],[-1.5382, -1.0865],[-0.9208, -0.1754],[ 0.1476, -0.8866],[ 0.4519,  0.2771]],[[ 0.6662,  1.1027],[-0.0912, -0.6284],[-1.0253, -0.3542],[ 0.6909, -1.3905],[-2.1140,  1.3426]]])
tensor([-0.6887,  0.2203, -1.6103, -0.7423,  0.3097, -2.9694,  1.2073, -0.3370,-0.5506,  0.4753, -1.3605,  1.9303, -1.5382, -1.0865, -0.9208, -0.1754,0.1476, -0.8866,  0.4519,  0.2771,  0.6662,  1.1027, -0.0912, -0.6284,-1.0253, -0.3542,  0.6909, -1.3905, -2.1140,  1.3426])

結論
X.view(-1)中的-1本意是根據(剩下維度)來自動調整,但是這里只有一個維度,因此就會將X里面的所有維度數據轉化成一維的,并且按先后順序排列。

dataTar 形狀為 [20,21]
dataTar = dataTar.view(20,-1)
原來的基礎上加-1 是什么作用

改成這種形狀相當于 前面兩位是 batch_size,通道數,后面兩位相當于整個圖片的元素
當元素總數只有比如768的時候,要開方的總數要和768一樣,因為768不能完整開方,所以要padding
改成28x28

pytorch使用view(*args)在不改變張量數據的情況下隨意改變張量的大小和形狀

Song ? 26190 次瀏覽 ? 0 個回復 ? 2017年09月23日

torch.Tensor.view會返回具有相同數據但大小不同的新張量。 返回的張量必須有與原張量相同的數據和相同數量的元素,但可以有不同的大小。一個張量必須是連續contiguous()的才能被查看。類似于Numpy的np.reshape()

pytorch中view的用法

torch.Tensor.view會將原有數據重新分配為一個新的張量,比如我們使用:

x = torch.randn(2, 4)

會輸出一個隨機張量:

 1.5600 -1.6180 -2.0366  2.71150.8415 -1.0103 -0.4793  1.5734
[torch.FloatTensor of size 2x4]

然后我們看一下使用view重新構造一個Tensor

y = x.view(4,2)
print y

# 輸出如下
1.5600 -1.6180
-2.0366 2.7115
0.8415 -1.0103
-0.4793 1.5734
[torch.FloatTensor of size 4x2]

從這里我們可以看出來他的作用,既然這樣,我們可以將他變成一個三維數組:

z = x.view(2,2,2)

# 輸出
(0 ,.,.) =
1.5600 -1.6180
-2.0366 2.7115

(1 ,.,.) =
0.8415 -1.0103
-0.4793 1.5734
[torch.FloatTensor of size 2x2x2]

注意:我們不能隨便定義參數,需要根據自己的數據使用,比如x.view(2,2,1)會返回錯誤RuntimeError: invalid argument 2: size '[2 x 2 x 1]' is invalid for input of with 8 elements at /Users/soumith/code/builder/wheel/pytorch-src/torch/lib/TH/THStorage.c:41

下面是官方的案例:

x = torch.randn(4, 4)
print x
print x.size()

# 輸出(4L, 4L)

y = x.view(16)
print y.size()
# 輸出(16L,)

z = x.view(-1, 8) # the size -1 is inferred from other dimensions
print z.size()

# 輸出(2L, 8L)

view_as(tensor)的用法

返回被視作與給定的tensor相同大小的原tensor。 等效于:

self.view(tensor.size())

具體用法為:

a = torch.Tensor(2, 4)
b = a.view_as(torch.Tensor(4, 2))
print b

pytorch中view的選擇

  • .resize(): 將tensor的大小調整為指定的大小。如果元素個數比當前的內存大小大,就將底層存儲大小調整為與新元素數目一致的大小。如果元素個數比當前內存小,則底層存儲不會被改變。原來tensor中被保存下來的元素將保持不變,但新內存將不會被初始化。
  • .permute(dims):將tensor的維度換位。具體可以自己測試
  • torch.unsqueeze:返回一個新的張量,對輸入的制定位置插入維度

相比之下,如果你想返回相同數量的元素,只是改變數組的形狀推薦使用torch.view()


維度-1從其他維度推導而出也就是剩余的維度

20201210

原來是一個維度[20 ],view -1 變換之后增加了一個維度[20 1]

總結

以上是生活随笔為你收集整理的view(*args)改变张量的大小和形状_pytorch reshape numpy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。