pytorch使用时一些变量类型的注意事项

1.报错”default_collate: batch must contain tensors, numpy arrays, numbers, dicts or lists; found <U32“

原因:检查dataset的getitem,里面每次获得的数据是否是tensors, numpy arrays, numbers, dicts or lists

我的原始数据里大多数是float,但含有少数str,调用np.array后还是str,

因此for ... in dataloader时,正常迭代出几个batch后就会报错

2.numpy, pytorch类型转换:

参考numpy和torch数据类型转化问题_雷恩Layne的博客-CSDN博客_torch转float

1)numpy:

numpy使用astype转化数据类型,float默认转化为64位,可以使用np.float32指定为32位

a= np.array([1,2,3])

a = a.astype(np.float)

print(a.dtype)

>>>float64

此外,注意

不要用float代替np.float,否则可能出现意想不到的错误;
不能从np.float64位转化np.float32,会报错;
np.float64与np.float32相乘,结果为np.float64;
在实际使用过程中,可以指定为np.float,也可以指定具体的位数,如np.float,不过直接指定np.float更方便;
 

2)torch tensor:

torch使用torch.float()转化数据类型,float默认转化为32位,torch中没有torch.float64()这个方法

b = torch.tensor([4,5,6])

b = b.float()

b.dtype

>>>torch.float32

3.pytorch RuntimeError: expected scalar type Double but found Float

搭神经网络后,传入训练数据时的报错

原因:神经网络中的权重默认是torch.float32吧?但传入的训练数据格式是float64的

解决:

首先

torch.set_default_tensor_type(torch.FloatTensor)

之后对传入的参数:

for batch_idx,tensor in enumerate(trainloader):
    tensor = tensor.to(torch.float32)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值