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