溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題

發(fā)布時(shí)間:2022-02-25 10:08:30 來(lái)源:億速云 閱讀:179 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題”這篇文章吧。

1.1、numpy ——> torch ??

使用 torch.from_numpy() 轉(zhuǎn)換,需要注意,兩者共享內(nèi)存。例子如下:

import torch
import numpy as np

a = np.array([1,2,3])
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print('轉(zhuǎn)換后a', a)
print('轉(zhuǎn)換后b', b)

# 顯示

轉(zhuǎn)換后a [2 3 4]
轉(zhuǎn)換后b tensor([2, 3, 4], dtype=torch.int32)

1.2、torch——> numpy ??

使用 .numpy() 轉(zhuǎn)換,同樣,兩者共享內(nèi)存。例子如下:

import torch
import numpy as np

a = torch.zeros((2, 3), dtype=torch.float)
c = a.numpy()
np.add(c, 1, out=c)
print('a:', a)
print('c:', c)

# 結(jié)果

a: tensor([[1., 1., 1.],
           [1., 1., 1.]])
c: [[1. 1. 1.]
  [1. 1. 1.]]

需要注意的是,如果將程序中的 np.add(c, 1, out=c) 改成 c = c + 1 會(huì)發(fā)現(xiàn)兩者貌似不共享內(nèi)存了,其實(shí)不然,原因是后者相當(dāng)于改變了 c 的存儲(chǔ)地址。可以使用 id(c) 發(fā)現(xiàn)c的內(nèi)存位置變了。

補(bǔ)充:pytorch中tensor數(shù)據(jù)和numpy數(shù)據(jù)轉(zhuǎn)換中注意的一個(gè)問(wèn)題

在pytorch中,把numpy.array數(shù)據(jù)轉(zhuǎn)換到張量tensor數(shù)據(jù)的常用函數(shù)是torch.from_numpy(array)或者torch.Tensor(array),第一種函數(shù)更常用。

下面通過(guò)代碼看一下區(qū)別:

import numpy as np
import torch

a=np.arange(6,dtype=int).reshape(2,3)
b=torch.from_numpy(a)
c=torch.Tensor(a)

a[0][0]=10
print(a,'
',b,'
',c)
[[10  1  2]
 [ 3  4  5]] 
 tensor([[10,  1,  2],
        [ 3,  4,  5]], dtype=torch.int32) 
 tensor([[0., 1., 2.],
        [3., 4., 5.]])

c[0][0]=10
print(a,'
',b,'
',c)
[[10  1  2]
 [ 3  4  5]] 
 tensor([[10,  1,  2],
        [ 3,  4,  5]], dtype=torch.int32) 
 tensor([[10.,  1.,  2.],
        [ 3.,  4.,  5.]])

print(b.type())
torch.IntTensor
print(c.type())
torch.FloatTensor

可以看出修改數(shù)組a的元素值,張量b的元素值也改變了,但是張量c卻不變。修改張量c的元素值,數(shù)組a和張量b的元素值都不變。

這說(shuō)明torch.from_numpy(array)是做數(shù)組的淺拷貝,torch.Tensor(array)是做數(shù)組的深拷貝。

以上是“Numpy與Pytorch互轉(zhuǎn)時(shí)需要注意什么問(wèn)題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI