[英]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++ 類型,而IntArrayRef
是ArrayRef<int>
的別名。 這個類有幾個構造函數(例如來自標准 C 風格的數組、 std::vector
、 std::array
或std::initializer_list
)。
torch::zeros
和torch::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
。
總而言之,如果您想使用 C++ ,至少請閱讀參考資料並檢查類型。 我同意文檔可以使用一些工作,但是如果您對 C++ 有所了解,那么即使是有時可能需要的源代碼也不難理解。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.