簡體   English   中英

在 C++ 中創建一個 torch::Tensor 來改變形狀

[英]Create a torch::Tensor in C++ to change the shape

我有一個張量數組,我想改變張量的形狀。 我嘗試使用torch.view ,但它引發了“shape[1] 對於大小為 10000 的輸入無效”的異常。 任何人都可以給我一個錯誤信息的提示嗎?

int shape[] = {1,1,100,100};
torch::Tensor img = torch::zeros((100,100),torch::KF32);
torch::Tensor tmg = img.view(*shape);

C++不是python所以像用* unpacking這樣的結構顯然是行不通的。 (, ) ,您應該使用可以“自動轉換”到IntArrayRef

創建對象基礎知識

ArrayRef是一個模板類,這意味着它可以保存不同的 C++ 類型,而IntArrayRefArrayRef<int>的別名。 這個類有幾個構造函數(例如來自標准 C 風格的數組、 std::vectorstd::arraystd::initializer_list )。

torch::zerostorch::Tensor view方法都需要這個確切的對象

你可以做的是:

/* auto to feel more "Pythonic" */
auto img = torch::zeros({100, 100}, torch::kF32);
auto tmg = img.view({1, 1, 100, 100});

{1, 1, 100, 100}std::initializer_list<int>類型,因此可以從中構造ArrayRef<int> (又名IntArrayRef )(可能會移動,因為該對象是rvalue )。

同樣的事情發生在torch::zeros

這種情況下更簡單的方法

雖然像這樣unsqueeze你在這里可以更容易地完成:

auto img = torch::zeros({100, 100}, torch::kF32);
auto unsqueezed = img.unsqueeze(0).unsqueeze(0);

其中維度為0

關於 libtorch

總而言之,如果您想使用 C++ ,至少請閱讀參考資料並檢查類型 我同意文檔可以使用一些工作,但是如果您對 C++ 有所了解,那么即使是有時可能需要的源代碼也不難理解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM