从python 2到python 3的代码转换

时间:2019-04-02 09:36:15

标签: python-2.7 pytorch

我正在设置一种新算法,该算法结合了python 3中的对象检测器(边界检测器)和python 2中的mask生成器。这里的问题是我有几个python 2文件,遮罩生成算法。因此,我尝试static class MethodLibrary //Method does not return something { public static void Fill_cmbDay(ComboBox strYear, int Month, ComboBox cmbTarget) //Void used does not return something { //Find how many days month has based on selected year & month. Convert month name to month number. int days = DateTime.DaysInMonth(Convert.ToInt32(strYear.SelectedItem),Month); //Clear Combo box cmbTarget.Items.Clear(); //Loop from 1 to number of days & add items to combo box for (int i = 1; i <= days; i++) { cmbTarget.Items.Add(i); } } } 将所有python 2文件转换为python3。该脚本似乎正常工作,但它是一种深度学习算法(用于在输入边界框坐标时生成掩码),需要一些pytorch权重要加载,在python 3中测试模型时,程序抛出了类似

的错误
  

“ RuntimeError:类型为torch.FloatTensor的预期对象,但找到了   键入torch.cuda.FloatTensor作为参数#2“ weight””

我在2to3个论坛中进行了搜索,但没有帖子对我有用。是因为我的遮罩生成代码是在python 2中训练的?

这是否意味着在加载权重和测试模型时,我应该使用python 2而不是python 3?如果有人可以对此有所阐明,那将是很好。作为一种变通办法,我仍然可以使用降级为python 2的对象检测器代码。但是我仍然想知道为什么它会引发错误。

2 个答案:

答案 0 :(得分:0)

问题是可以(可以)使用cpu对象,但是可以使用gpu对象。尝试将对象放入cpu:
mask.cpu()

答案 1 :(得分:0)

我刚刚通过在conda环境中重新安装割炬(0.4.0)和割炬视觉(0.2.1)解决了该问题。我不得不降级两个版本。最终,我成功地将python 2.7代码转换为python3。感谢2to3库。实际上,此错误发生在PyTorch的图像归一化功能中。那是一个内部函数,它接受图像数组作为张量。

tensor.sub_(mean[:, None, None]).div_(std[:, None, None]) 
RuntimeError: expected type torch.cuda.FloatTensor but got torch.FloatTensor