欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解決Numpy與Pytorch彼此轉換時的坑

 更新時間:2021年05月13日 09:20:14   作者:工程曉猿  
這篇文章主要介紹了解決Numpy與Pytorch彼此轉換時的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言 ​  

最近使用 Numpy包與Pytorch寫神經(jīng)網(wǎng)絡時,經(jīng)常需要兩者彼此轉換,故用此筆記記錄碼代碼時踩(菜)過的坑,網(wǎng)上有人說:

Pytorch 又被稱為 GPU 版的 Numpy,二者的許多功能都有良好的一一對應。

​但在使用時還是得多多注意,一個不留神就陷入到了 一根煙一杯酒,一個Bug找一宿 的地步。

1.1、numpy ——> torch ​  

使用 torch.from_numpy() 轉換,需要注意,兩者共享內(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('轉換后a', a)
print('轉換后b', b)

# 顯示

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

1.2、torch——> numpy ​  

使用 .numpy() 轉換,同樣,兩者共享內(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)

# 結果

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

需要注意的是,如果將程序中的 np.add(c, 1, out=c) 改成 c = c + 1 會發(fā)現(xiàn)兩者貌似不共享內(nèi)存了,其實不然,原因是后者相當于改變了 c 的存儲地址??梢允褂?id(c) 發(fā)現(xiàn)c的內(nèi)存位置變了。

補充:pytorch中tensor數(shù)據(jù)和numpy數(shù)據(jù)轉換中注意的一個問題

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

下面通過代碼看一下區(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,'\n',b,'\n',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,'\n',b,'\n',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的元素值都不變。

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 詳解python基礎之while循環(huán)及if判斷

    詳解python基礎之while循環(huán)及if判斷

    這篇文章主要介紹了python基礎之while循環(huán)及if判斷的相關資料,需要的朋友可以參考下
    2017-08-08
  • Python經(jīng)典題實戰(zhàn)記錄之百元買百雞

    Python經(jīng)典題實戰(zhàn)記錄之百元買百雞

    有一道著名的"百錢買百雞"問題大家應該都不陌生,這篇文章主要給大家介紹了關于Python經(jīng)典題實戰(zhàn)記錄之百元買百雞的相關資料,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2023-12-12
  • 談談對Pytorch中的forward的理解

    談談對Pytorch中的forward的理解

    這篇文章主要介紹了談談對Pytorch中的forward的理解,在Pytorch中,forward方法是一個特殊的方法,被專門用來進行前向傳播,本文給大家詳細講解,需要的朋友可以參考下
    2023-04-04
  • Python 分發(fā)包中添加額外文件的方法

    Python 分發(fā)包中添加額外文件的方法

    這篇文章主要介紹了Python 分發(fā)包中添加額外文件的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python數(shù)據(jù)分析與機器學習在金融風控中的應用小結

    Python數(shù)據(jù)分析與機器學習在金融風控中的應用小結

    本篇詳解了Python數(shù)據(jù)分析與機器學習在金融風控中的應用,包括數(shù)據(jù)收集與預處理、信用風險評估模型、市場風險管理模型和操作風險監(jiān)控模型,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • Django實戰(zhàn)之用戶認證(初始配置)

    Django實戰(zhàn)之用戶認證(初始配置)

    這篇文章主要介紹了Django實戰(zhàn)之用戶認證(初始配置),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Python 逐行分割大txt文件的方法

    Python 逐行分割大txt文件的方法

    本文通過代碼給大家介紹了Python 逐行分割大txt文件的方法,在文中給大家提到了Python從txt文件中逐行讀取數(shù)據(jù)的方法,需要的朋友參考下吧
    2017-10-10
  • 使用Python進行目錄的對比方法

    使用Python進行目錄的對比方法

    今天小編就為大家分享一篇使用Python進行目錄的對比方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • python 解決flask 圖片在線瀏覽或者直接下載的問題

    python 解決flask 圖片在線瀏覽或者直接下載的問題

    今天小編就為大家分享一篇python 解決flask 圖片在線瀏覽或者直接下載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python 基于pygame實現(xiàn)俄羅斯方塊

    python 基于pygame實現(xiàn)俄羅斯方塊

    這篇文章主要介紹了python 基于pygame實現(xiàn)俄羅斯方塊的方法,幫助大家更好的理解和學習使用python,感興趣的朋友可以了解下
    2021-03-03

最新評論