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

Pytorch創(chuàng)建張量的四種方法

 更新時(shí)間:2023年05月16日 09:04:02   作者:ting_qifengl  
Pytorch創(chuàng)建張量的4種方法主要有:torch.Tensor()、torch.tensor()、torch.as_tensor()、torch.from_numpy(),本文通過實(shí)例代碼介紹Pytorch創(chuàng)建張量的四種方法,需要的朋友可以參考下

一、Pytorch創(chuàng)建張量的4種方法

Pytorch創(chuàng)建張量的4種方法主要有:torch.Tensor()、torch.tensor()、torch.as_tensor()、torch.from_numpy()。具體使用方法如下方代碼。其中torch.Tensor()是類構(gòu)造函數(shù),其余三種為工廠函數(shù)。工廠函數(shù)是指接受參數(shù)輸入并返回特定類型對(duì)象的函數(shù),其允許更多的動(dòng)態(tài)對(duì)象創(chuàng)建,有更多的配置參數(shù)。通常情況下更傾向于選擇工廠函數(shù)。

import torch
import numpy as np
t = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(torch.Tensor(t))  # 類構(gòu)造函數(shù)
print(torch.tensor(t))  # 工廠函數(shù)
print(torch.as_tensor(t))  # 工廠函數(shù)
print(torch.from_numpy(t))  # 工廠函數(shù)

輸出結(jié)果如下:

tensor([[1., 2., 3.],
        [4., 5., 6.],
        [7., 8., 9.]])
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)
tensor([[1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]], dtype=torch.int32)

二、4種方法的區(qū)別

1、數(shù)據(jù)類型

import torch
import numpy as np
data = np.array([1,2,3])
t1 = torch.Tensor(data)
print(t1)
print(t1.dtype)
t2 = torch.tensor(data)
print(t2)
print(t2.dtype)
t3 = torch.as_tensor(data)
print(t3)
print(t3.dtype)
t4 = torch.from_numpy(data)
print(t4)
print(t4.dtype)

輸出結(jié)果如下:

tensor([1., 2., 3.])
torch.float32
tensor([1, 2, 3], dtype=torch.int32)
torch.int32
tensor([1, 2, 3], dtype=torch.int32)
torch.int32
tensor([1, 2, 3], dtype=torch.int32)
torch.int32

可以看出,構(gòu)造函數(shù)torch.Tensor()輸出的數(shù)據(jù)類型與其它三種方法不同,其主要原因是:構(gòu)造函數(shù)在構(gòu)造一個(gè)張量時(shí)使用全局缺省值,而工廠函數(shù)通過輸入數(shù)據(jù)的類型來推斷輸出數(shù)據(jù)的類型。我們可以使用如下代碼查看全局缺省值的數(shù)據(jù)類型。

d = torch.get_default_dtype()
print(d)

輸出結(jié)果為:

torch.float32

所以,構(gòu)造函數(shù)torch.Tensor()輸出的數(shù)據(jù)類型為torch.float32。而工廠函數(shù)可以顯示指定數(shù)據(jù)類型,如下所示。

t = torch.tensor(np.array([1,2,3]), dtype=torch.float64)
print(t)

輸出結(jié)果為:

tensor([1., 2., 3.], dtype=torch.float64)

2、數(shù)據(jù)內(nèi)存分配方式

import torch
import numpy as np
data = np.array([1,2,3])
print(data)
t1 = torch.Tensor(data)
t2 = torch.tensor(data)
t3 = torch.as_tensor(data)
t4 = torch.from_numpy(data)
data[0] = 0
data[1] = 0
data[2] = 0
# t1 和 t2 輸出的都是更改前的數(shù)組
print(t1)
print(t2)
# t3 和 t4 輸出的都是更改后的數(shù)組
print(t3)
print(t4)

輸出結(jié)果為:

[1 2 3]
tensor([1., 2., 3.])
tensor([1, 2, 3], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)
tensor([0, 0, 0], dtype=torch.int32)

上述差異是由創(chuàng)建時(shí)分配內(nèi)存的方式造成的:torch.Tensor()和torch.tensor()的方式是將數(shù)組中的元素值直接拷貝到張量中,改變data中的元素值并不會(huì)影響到t1和t2中的值;torch.as_tensor()和torch.from_numpy()的方式是與data數(shù)組共享數(shù)據(jù)。(可將t1和t2的方式看作"值傳遞";t3和t4的方式看作“地址傳遞”)。數(shù)據(jù)共享比數(shù)據(jù)拷貝更高效,更節(jié)省內(nèi)存空間。

共享數(shù)據(jù)拷貝數(shù)據(jù)
torch.as_tensor()torch.tensor()
torch.from_numpy()torch.Tensor()

三、最優(yōu)的數(shù)據(jù)轉(zhuǎn)換方法

1、數(shù)據(jù)拷貝方式的最優(yōu)選擇是 torch.tensor() (因?yàn)槭枪S函數(shù));

2、內(nèi)存共享方式的最優(yōu)選擇是 torch.as_tensor() (因?yàn)閠orch.as_tensor可以接受任何python數(shù)據(jù)結(jié)構(gòu);而torch.from_numpy只接受numpy數(shù)組);

3、數(shù)據(jù)拷貝的方式更注重實(shí)現(xiàn);而內(nèi)存共享的方式更注重代碼性能,日常使用時(shí)不注重性能的話選擇torch.tensor()即可。

四、使用內(nèi)存共享函數(shù)的注意事項(xiàng)

1、由于numpy.ndaaray對(duì)象分配在CPU上,所以如果使用GPU的話,torch.as_tensor函數(shù)必須把數(shù)據(jù)從CPU上拷到GPU上;

2.、as_tensor()對(duì)于python內(nèi)置的數(shù)據(jù)結(jié)構(gòu),如列表,是無效的;

3、as_tensor的調(diào)用要求熟悉共享特征,以免對(duì)底層數(shù)據(jù)做不必要的更改,而影響到對(duì)象;

4、當(dāng)as_tensor和numpy.ndarray有大量的相互往返的操作時(shí),對(duì)性能的提升會(huì)有較大的影響。

到此這篇關(guān)于Pytorch創(chuàng)建張量的四種方法的文章就介紹到這了,更多相關(guān)Pytorch創(chuàng)建張量內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?pandas找出、刪除重復(fù)的數(shù)據(jù)實(shí)例

    Python?pandas找出、刪除重復(fù)的數(shù)據(jù)實(shí)例

    在面試中很可能遇到給定一個(gè)含有重復(fù)元素的列表,刪除其中重復(fù)的元素,下面這篇文章主要給大家介紹了關(guān)于Python?pandas找出、刪除重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 利用Python實(shí)現(xiàn)Json序列化庫的方法步驟

    利用Python實(shí)現(xiàn)Json序列化庫的方法步驟

    這篇文章主要給大家介紹了關(guān)于利用Python實(shí)現(xiàn)Json序列化庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python列表的構(gòu)造方法list()

    python列表的構(gòu)造方法list()

    這篇文章主要介紹了python列表的構(gòu)造方法list(),python中沒有數(shù)組這個(gè)概念,與之相應(yīng)的是列表,本篇文章就來說說列表這個(gè)語法,下面文章詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • Python headers請(qǐng)求頭如何實(shí)現(xiàn)快速添加

    Python headers請(qǐng)求頭如何實(shí)現(xiàn)快速添加

    這篇文章主要介紹了Python headers請(qǐng)求頭如何實(shí)現(xiàn)快速添加,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 使用Python寫一個(gè)創(chuàng)意五子棋游戲源代碼

    使用Python寫一個(gè)創(chuàng)意五子棋游戲源代碼

    這篇文章主要給大家介紹了關(guān)于使用Python寫一個(gè)創(chuàng)意五子棋游戲的相關(guān)資料,Python作為一種簡單易上手的編程語言,能夠輕松實(shí)現(xiàn)五子棋游戲,需要的朋友可以參考下
    2023-08-08
  • pytorch多GPU并行運(yùn)算的實(shí)現(xiàn)

    pytorch多GPU并行運(yùn)算的實(shí)現(xiàn)

    這篇文章主要介紹了pytorch多GPU并行運(yùn)算的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 通過數(shù)據(jù)庫向Django模型添加字段的示例

    通過數(shù)據(jù)庫向Django模型添加字段的示例

    這篇文章主要介紹了通過數(shù)據(jù)庫向Django模型添加字段的示例,Django是人氣最高的Python web開發(fā)框架,需要的朋友可以參考下
    2015-07-07
  • Python selenium模擬網(wǎng)頁點(diǎn)擊爬蟲交管12123違章數(shù)據(jù)

    Python selenium模擬網(wǎng)頁點(diǎn)擊爬蟲交管12123違章數(shù)據(jù)

    本次介紹怎么以模擬點(diǎn)擊方式進(jìn)入交管12123爬取車輛違章數(shù)據(jù),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • python實(shí)現(xiàn)簡單聊天室功能 可以私聊

    python實(shí)現(xiàn)簡單聊天室功能 可以私聊

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單聊天室功能,可以進(jìn)行私聊,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • 使用Python防止SQL注入攻擊的實(shí)現(xiàn)示例

    使用Python防止SQL注入攻擊的實(shí)現(xiàn)示例

    這篇文章主要介紹了使用Python防止SQL注入攻擊的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評(píng)論