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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pytorch Merge操作

發布時間:2025/4/16 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch Merge操作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡述

Pytorch中沒有內置Merge操作,需要手動實現。

下面會以多個四維的Tensor直接的Merge操作來展示。(len, *image_shape(占三維))

比如上面,這樣的圖片。

每一行都是一個數據X_i(包含三張黑白圖)。
所以,如果是直接用torch.cat([x0, x1, x2])的話,就是直接把這九張圖按照順序排列了下。

[x1[0],..., x1[n], x2[0],..., x2[n], x3[0],..., x3[n]]

圖片對應的編號順序:

123456789

但是如果有時候,需要把這個大圖進行一個 轉置 , 就需要用到了Merge的操作。

將(x1, x2, x3),三個變量merge操作。之后,就是

[x1[0], x2[0], x3[0], ..., x1[n], x2[n], x3[n]]

這樣再輸出的話,就是在大圖上做了轉置的效果。

因此需要做Merge。

Merge實現

先給范式:x1,x2,...xn的相互merge

torch.stack([x1,x2,..,xn]).transpose(1, 0).contiguous().view(len(x1+x2+..+xn), *x.shape[1:])

簡單來說,就是

  • 先用stack按照第一維度來進行疊加(是會擴充維度的)
  • 之后,將擴充出來的維度和一開始的index維度(也就是x1[0], x1[2], ..., x1[index]),進行轉置(注意的是,需要使用contiguous() 因為需要在物理層面上也要完成轉置,之后才能view。這是pytorch的內部機制)
  • 最后,再用view的方式將擴充好的維度壓縮回去。
  • 給個范例的輸出:

    再給個實例上的代碼區別的部分:

    圖一

    plt.imshow(np.transpose(vutils.make_grid(torch.cat([G_x.cpu().detach(), x.cpu().detach(), y.cpu().detach()]), nrow=3, padding=0,normalize=True, scale_each=True), (1, 2, 0)), cmap='gray')

    圖二(轉置后)

    plt.imshow(np.transpose(vutils.make_grid(torch.stack([G_x.cpu().detach(), x.cpu().detach(), y.cpu().detach()]).transpose(1, 0).contiguous().view(BATCH_SIZE * 3, 1, 96, 96), nrow=3, padding=0,normalize=True, scale_each=True), (1, 2, 0)), cmap='gray')

    總結

    以上是生活随笔為你收集整理的Pytorch Merge操作的全部內容,希望文章能夠幫你解決所遇到的問題。

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