Does PyTorch convert all tensors to DoubleTensors on print? I created a tensor of size (4000, 259200) and type ByteTensor, and while I have it sitting in memory alright, when I try to print it, it throws the error you can see below. I’m using Ubuntu 16.04 and PyTorch 0.2.0.post3. My machine has ~8GB RAM and the same for swap. To replicate, use the following:
import torch
X = torch.zeros((4000, 259200)).type(torch.ByteTensor)
print(X)
ERROR BELOW
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
~/venvs_class/vision_class/lib/python3.5/site-packages/IPython/core/formatters.py in __call__(self, obj)
700 type_pprinters=self.type_printers,
701 deferred_pprinters=self.deferred_printers)
--> 702 printer.pretty(obj)
703 printer.flush()
704 return stream.getvalue()
~/venvs_class/vision_class/lib/python3.5/site-packages/IPython/lib/pretty.py in pretty(self, obj)
393 if callable(meth):
394 return meth(obj, self, cycle)
--> 395 return _default_pprint(obj, self, cycle)
396 finally:
397 self.end_group()
~/venvs_class/vision_class/lib/python3.5/site-packages/IPython/lib/pretty.py in _default_pprint(obj, p, cycle)
508 if _safe_getattr(klass, '__repr__', None) is not object.__repr__:
509 # A user-provided repr. Find newlines and replace them with p.break_()
--> 510 _repr_pprint(obj, p, cycle)
511 return
512 p.begin_group(1, '<')
~/venvs_class/vision_class/lib/python3.5/site-packages/IPython/lib/pretty.py in _repr_pprint(obj, p, cycle)
699 """A pprint that just redirects to the normal repr function."""
700 # Find newlines and replace them with p.break_()
--> 701 output = repr(obj)
702 for idx,output_line in enumerate(output.splitlines()):
703 if idx:
~/venvs_class/vision_class/lib/python3.5/site-packages/torch/tensor.py in __repr__(self)
131
132 def __repr__(self):
--> 133 return str(self)
134
135 def __str__(self):
~/venvs_class/vision_class/lib/python3.5/site-packages/torch/tensor.py in __str__(self)
138 # characters to replace unicode characters with.
139 if sys.version_info > (3,):
--> 140 return _tensor_str._str(self)
141 else:
142 if hasattr(sys.stdout, 'encoding'):
~/venvs_class/vision_class/lib/python3.5/site-packages/torch/_tensor_str.py in _str(self)
286 strt = _vector_str(self)
287 elif self.ndimension() == 2:
--> 288 strt = _matrix_str(self)
289 else:
290 strt = _tensor_str(self)
~/venvs_class/vision_class/lib/python3.5/site-packages/torch/_tensor_str.py in _matrix_str(self, indent, formatter, force_truncate)
205 if formatter is None:
206 fmt, scale, sz = _number_format(self,
--> 207 min_sz=5 if not print_full_mat else 0)
208 else:
209 fmt, scale, sz = formatter
~/venvs_class/vision_class/lib/python3.5/site-packages/torch/_tensor_str.py in _number_format(tensor, min_sz)
68 def _number_format(tensor, min_sz=-1):
69 min_sz = max(min_sz, 2)
---> 70 tensor = torch.DoubleTensor(tensor.size()).copy_(tensor).abs_().view(tensor.nelement())
71
72 pos_inf_mask = tensor.eq(float('inf'))
RuntimeError: $ Torch: not enough memory: you tried to allocate 7GB. Buy new RAM! at /pytorch/torch/lib/TH/THGeneral.c:270