हालांकि दोनों torch.view
और torch.reshape
टेंसरों को फिर से व्यवस्थित करने के लिए उपयोग किया जाता है, यहां उनके बीच अंतर हैं।
- जैसा कि नाम से पता चलता है,
torch.view
केवल मूल टेंसर का एक दृश्य बनाता है । नया टेंसर हमेशा अपना डेटा ऑरिजनल टेंसर के साथ साझा करेगा । इसका मतलब यह है कि यदि आप मूल टेंसर को बदलते हैं, तो फिर से आकार का टेंसर बदल जाएगा और इसके विपरीत।
>>> z = torch.zeros(3, 2)
>>> x = z.view(2, 3)
>>> z.fill_(1)
>>> x
tensor([[1., 1., 1.],
[1., 1., 1.]])
- यह सुनिश्चित करने के लिए कि नया टेंसर हमेशा अपने डेटा को मूल के साथ साझा
torch.view
करता है, दो टेनसर्स [ डॉक्स ] के आकार पर कुछ आकस्मिक बाधाओं को लगाता है । अधिक बार नहीं यह एक चिंता का विषय नहीं है, लेकिन कभी-कभी torch.view
एक त्रुटि फेंकता है भले ही दो टेनर्स के आकार संगत हों। यहाँ एक प्रसिद्ध प्रति-उदाहरण है।
>>> z = torch.zeros(3, 2)
>>> y = z.t()
>>> y.size()
torch.Size([2, 3])
>>> y.view(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: invalid argument 2: view size is not compatible with input tensor's
size and stride (at least one dimension spans across two contiguous subspaces).
Call .contiguous() before .view().
torch.reshape
किसी भी आकस्मिक बाधा को लागू नहीं करता है, लेकिन यह भी डेटा साझा करने की गारंटी नहीं देता है। नया टेंसर मूल टेंसर का एक दृश्य हो सकता है, या यह पूरी तरह से एक नया टेंसर हो सकता है।
>>> z = torch.zeros(3, 2)
>>> y = z.reshape(6)
>>> x = z.t().reshape(6)
>>> z.fill_(1)
tensor([[1., 1.],
[1., 1.],
[1., 1.]])
>>> y
tensor([1., 1., 1., 1., 1., 1.])
>>> x
tensor([0., 0., 0., 0., 0., 0.])
टीएल; डीआर:
यदि आप केवल टेनर्स को फिर से जोड़ना चाहते हैं, तो उपयोग करें torch.reshape
। यदि आप मेमोरी उपयोग के बारे में भी चिंतित हैं और यह सुनिश्चित करना चाहते हैं कि दो टेनर्स एक ही डेटा, उपयोग साझा करें torch.view
।