modAL应用pytorch时TypeError: <class ‘torch.Tensor‘> datatype is not supported

这篇博客讨论了在使用modAL库进行主动学习时遇到的问题,即模型不支持Tensor类型数据。解决方案是将Tensor转换为numpy数组。文章详细介绍了detach()函数的作用,以及在处理CUDAtensor到numpy转换的必要性,确保数据能够在主动学习循环中正确运行。
摘要由CSDN通过智能技术生成
mnist_data = MNIST('.', download=True, transform=ToTensor())
dataloader = DataLoader(mnist_data, shuffle=True, batch_size=60000)
X, y = next(iter(dataloader))
# the active learning loop
n_queries = 10
for idx in range(n_queries):
    print('Query no. %d' % (idx + 1))
    query_idx, query_instance = learner.query(X_pool, n_instances=100)
    learner.teach(
        X=X_pool[query_idx], y=y_pool[query_idx], only_new=True,
    )
    # remove queried instance from pool
    X_pool = np.delete(X_pool, query_idx, axis=0)
    y_pool = np.delete(y_pool, query_idx, axis=0)

在运行时会报错,TypeError: <class 'torch.Tensor'> datatype is not supported

这是因为modAL中的learner并不支持tensor类型的输入,所以这里x_pool和y_pool会出现错误

解决办法把tensor类型转化成numpy数据类型,即在X, y = next(iter(dataloader))后加两行

x=x.detach().cpu().numpy()
y=y.detach().cpu().numpy()

这里detach()作用是返回一个新的Tensor,只不过不再有梯度。

如果想把CUDA tensor格式的数据改成numpy时,需要先将其转换成cpu float-tensor随后再转到numpy格式。 numpy不能读取CUDA tensor 需要将它转化为 CPU tensor

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值