报错代码为:
label = torch.FloatTensor(label)
报错 TypeError: can't convert np.ndarray of type numpy.uint16. The only supported types are: float64, float32, float16, int64, int32, int16, int8, and uint8.
我没有百度到一样的问题,但看着是数据类型不对——现在是int,需要的是float,解决方法请往下翻,在5.中。
期间我试了很多int转float的方法,具体如下(由于接触python时间不长,可能有点……嗯……):
1. label = torch.FloatTensor(float(label))
报错:TypeError: only size-1 arrays can be converted to Python scalars
2. label.astype(float)
这是百度到的 1.中的报错找到的方案,1.的报错是解决了,但是并没有转化了数据类型,还是报错
TypeError: can't convert np.ndarray of type numpy.uint16.……
3. 到此,我想,是不是得用pytorch中专用的类型转化函数呢?于是,改为:
label = label.to(torch.float64)
报错 AttributeError: 'numpy.ndarray' object has no attribute 'to'
所以,这个方法只适用于转化前后都是tensor的情况
4. 那么,怎么将numpy转为tensor?
label = torch.from_numpy(label)
再加上3.中类型转化函数,得:
label = torch.from_numpy(label)
label = label.to(torch.float64)
然而,并没有什么用,类型还是numpy.uint16
5. 那,还有什么方法呢?我想起了当初学C语言入门时的方法:
label = label/1.0
试了那么多方法,问题就这样解决了……
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总结:
我想不到3.中类型转化失败的原因。是不是我用的类型转化方法不对呢?针对这个问题,还有什么解决方法?
我觉得自己的解决方法不够python,有没有python的解决方案呢?
希望看到这个帖子的各位,不要吝啬,请说出你们的想法!!!