W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
原文: https://pytorch.org/cppdocs/
這些頁(yè)面提供了 PyTorch C ++ API 公共部分的文檔。 該 API 大致可分為五個(gè)部分:
這些構(gòu)建模塊一起構(gòu)成了一個(gè)可用于張量計(jì)算和動(dòng)態(tài)神經(jīng)網(wǎng)絡(luò)的研究和生產(chǎn)就緒的 C ++庫(kù),其中特別強(qiáng)調(diào) GPU 加速以及快速的 CPU 性能。 目前,F(xiàn)acebook 正在研究和生產(chǎn)中使用它。 我們期待歡迎更多的 PyTorch C ++ API 用戶。
警告
目前,應(yīng)將 C ++ API 視為“測(cè)試版”穩(wěn)定性。 我們可能會(huì)對(duì)后端進(jìn)行重大更改,以改進(jìn) API,或者在為 PyTorch 提供 Python 接口(這是我們最穩(wěn)定和最受支持的接口)時(shí)使用。
ATen 從根本上講是一個(gè)張量庫(kù),在 PyTorch 中幾乎所有其他 Python 和 C ++接口都在其上構(gòu)建。 它提供了一個(gè)核心Tensor
類,在該類上定義了數(shù)百種操作。 這些操作大多數(shù)都具有 CPU 和 GPU 實(shí)現(xiàn),Tensor
類將根據(jù)其類型向其動(dòng)態(tài)調(diào)度。 使用 ATen 的一個(gè)小示例如下所示:
#include <ATen/ATen.h>
at::Tensor a = at::ones({2, 2}, at::kInt);
at::Tensor b = at::randn({2, 2});
auto c = a + b.to(at::kInt);
此Tensor
類和 ATen 中的所有其他符號(hào)在at::
命名空間中找到,在這里記錄在中。
我們所稱的 autograd 是 PyTorch C ++ API 的一部分,這些部分通過(guò)涉及自動(dòng)區(qū)分的功能擴(kuò)展了 ATen Tensor
類。 autograd 系統(tǒng)在張量上記錄操作,以形成 autograd 圖。 在該圖中的葉變量上調(diào)用backwards()
,可通過(guò)跨越 autograd 圖的函數(shù)和張量網(wǎng)絡(luò)執(zhí)行反向模式微分,最終產(chǎn)生梯度。 以下示例提供了該界面的外觀:
#include <torch/csrc/autograd/variable.h>
#include <torch/csrc/autograd/function.h>
torch::Tensor a = torch::ones({2, 2}, torch::requires_grad());
torch::Tensor b = torch::randn({2, 2});
auto c = a + b;
c.backward(); // a.grad() will now hold the gradient of c w.r.t. a.
默認(rèn)情況下,ATen 中的at::Tensor
類不可區(qū)分。 若要增加 autograd API 提供的張量的可微性,必須使用 <cite>torch ::</cite> 命名空間中的張量工廠函數(shù),而不是位于::: 命名空間中的<cite>。 例如,使用<cite>在:: ones</cite> 創(chuàng)建的張量將是不可微的,而使用 <cite>Torch :: ones</cite> 創(chuàng)建的張量將是可微的。</cite>
PyTorch C ++前端為神經(jīng)網(wǎng)絡(luò)以及一般的機(jī)器學(xué)習(xí)研究和生產(chǎn)用例提供了一個(gè)高級(jí)的純 C ++建模接口,在設(shè)計(jì)和提供的功能上很大程度上遵循了 Python API。 C ++前端包括以下內(nèi)容:
torch.nn.Module
)定義機(jī)器學(xué)習(xí)模型的接口;torch.utils.data.DataLoader
);torch.nn.parallel.DataParallel
);有關(guān) C ++前端的詳細(xì)說(shuō)明,請(qǐng)參見(jiàn)本文檔的。 與 C ++前端相關(guān)的 <cite>torch ::</cite> 命名空間的相關(guān)部分包括 torch :: nn , torch :: optim 和 [torch :: data , torch :: serialize , torch :: jit 和 torch :: python 。 C ++前端的示例可以在該存儲(chǔ)庫(kù)的中找到,該存儲(chǔ)庫(kù)正在持續(xù)不斷地?cái)U(kuò)展。
注意
除非有特殊原因要專門(mén)限制自己使用 ATen 或 Autograd API,否則 C ++前端是 PyTorch C ++生態(tài)系統(tǒng)的推薦入口點(diǎn)。 盡管它仍處于測(cè)試階段,因?yàn)槲覀兪占四挠脩舴答?,但與 ATen 和 Autograd API 相比,它提供了更多的功能和更好的穩(wěn)定性保證。
TorchScript 是 PyTorch 模型的表示形式,可以由 TorchScript 編譯器理解,編譯和序列化。 從根本上說(shuō),TorchScript 本身就是一種編程語(yǔ)言。 它是使用 PyTorch API 的 Python 的子集。 TorchScript 的 C ++接口包含三個(gè)主要功能:
如果您想盡可能地在 Python 中定義模型,但是隨后將它們導(dǎo)出到 C ++進(jìn)行生產(chǎn)環(huán)境和無(wú) Python 推斷,第一種機(jī)制可能對(duì)您很感興趣。 您可以通過(guò)以下此鏈接找到有關(guān)此內(nèi)容的更多信息。 第二個(gè) API 涉及您想使用自定義運(yùn)算符擴(kuò)展 TorchScript 的場(chǎng)景,可以類似地在推理過(guò)程中從 C ++對(duì)其進(jìn)行序列化和調(diào)用。 最后,torch :: jit :: compile 函數(shù)可用于直接從 C ++訪問(wèn) TorchScript 編譯器。
C ++擴(kuò)展提供了一種簡(jiǎn)單而強(qiáng)大的方法來(lái)訪問(wèn)上述所有接口,以擴(kuò)展 PyTorch 的常規(guī) Python 用例。 C ++擴(kuò)展最常用于在 C ++或 CUDA 中實(shí)現(xiàn)自定義運(yùn)算符,以加快對(duì)原始 PyTorch 設(shè)置的研究。 C ++擴(kuò)展 API 不會(huì)向 PyTorch C ++ API 添加任何新功能。 相反,它提供了與 Python setuptool 以及 JIT 編譯機(jī)制的集成,該機(jī)制允許從 Python 訪問(wèn) ATen,autograd 和其他 C ++ API。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: