您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Numpy與Pytorch互轉時需要注意什么問題”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Numpy與Pytorch互轉時需要注意什么問題”這篇文章吧。
使用 torch.from_numpy() 轉換,需要注意,兩者共享內存。例子如下:
import torch
import numpy as np
a = np.array([1,2,3])
b = torch.from_numpy(a)
np.add(a, 1, out=a)
print('轉換后a', a)
print('轉換后b', b)
# 顯示
轉換后a [2 3 4]
轉換后b tensor([2, 3, 4], dtype=torch.int32)
使用 .numpy() 轉換,同樣,兩者共享內存。例子如下:
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)
# 結果
a: tensor([[1., 1., 1.],
[1., 1., 1.]])
c: [[1. 1. 1.]
[1. 1. 1.]]
需要注意的是,如果將程序中的 np.add(c, 1, out=c) 改成 c = c + 1 會發現兩者貌似不共享內存了,其實不然,原因是后者相當于改變了 c 的存儲地址。可以使用 id(c) 發現c的內存位置變了。
補充:pytorch中tensor數據和numpy數據轉換中注意的一個問題
在pytorch中,把numpy.array數據轉換到張量tensor數據的常用函數是torch.from_numpy(array)或者torch.Tensor(array),第一種函數更常用。
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
可以看出修改數組a的元素值,張量b的元素值也改變了,但是張量c卻不變。修改張量c的元素值,數組a和張量b的元素值都不變。
這說明torch.from_numpy(array)是做數組的淺拷貝,torch.Tensor(array)是做數組的深拷貝。
以上是“Numpy與Pytorch互轉時需要注意什么問題”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。