我正在设置一种新算法,该算法结合了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的对象检测器代码。但是我仍然想知道为什么它会引发错误。
答案 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