我在使用PyCharm调试程序时,发现有些张量因为shape过大(数据量太多),导致该张量中的数值无法完全显示。下面就简单介绍怎样完全显示张量中的数值。
- 假设某个张量 inp_voxel 的 shape 为 torch.Size([5, 128, 128]),如下图所示。
- 首先我们需要选中张量 inp_voxel ,然后单击鼠标右键 会出现如下图所示的条目,接着鼠标左键单击 Evaluate Expression;
- 在弹出的对话框 Expression 处删除原有的内容,接着输入
np.array(inp_voxel.data.cpu())
,然后点击对话框中的 Evaluate。
- 在弹出的对话框中点击 ...View as Array 就可以完全显示张量 inp_voxel 中的数值了。
- 张量 inp_voxel 的 shape 为 torch.Size([5, 128, 128]) ,即该张量由 5 个大小为 128×128 的矩阵组成。通过上面的代码
np.array(inp_voxel.data.cpu())
只能显示第 1 个大小 128×128 的矩阵。通俗地讲,可以把张量 inp_voxel 看成由 5 层 大小为128×128 的矩阵组成,而代码np.array(inp_voxel.data.cpu())
只显示第 1 层矩阵中的数值,如下图中的 __py_debug_temp_var_2017385755[0] 所示。([0]就表示第一层矩阵)
- 如果我们想要显示第 4 层矩阵中的数值,可以在 Expression 处输入
np.array(inp_voxel[3].data.cpu())
,然后点击 Evaluate 和 ...View as Array 就可以完全显示张量 inp_voxel 第 4 层矩阵中的数值了。其实这里的 inp_voxel[3] 就是通过索引操作来获取张量 inp_voxel 第 4 层矩阵中的数据,接着转为numpy数组。
- 扩展:我觉得上面操作的核心思想:就是将张量(tensor)转为numpy数组(ndarray)来进行完全显示 。其实,我们不一定非得在 Expression 处输入表达式
np.array(inp_voxel.data.cpu())
,我们还可以输入表达式inp_voxel.numpy()
来进行转换,然后点击 Evaluate 即可。只要用合适的正确地语法将张量(tensor)转为numpy数组(ndarray)即可!!!!!!!
参考:
pycharm中evaluate expression的用法
个人笔记(4)PyCharm在进行debug时遇到张量显示不全、不方便查看数值的问题