只有一个元素张量可以转换为 Python 标量错误 pca.fit_transform
only one element tensors can be converted to Python scalars error with pca.fit_transform
我正在尝试使用 PCA 执行降维,其中 outputs
是一个张量列表,其中每个张量的形状为 (1, 3, 32,32)。这是代码:
from sklearn.decomposition import PCA
pca = PCA(10)
pca_result = pca.fit_transform(output)
但无论我怎样尝试,我总是收到这个错误:
ValueError: only one element tensors can be converted to Python scalars
我知道大小为 (1,3, 32,32) 的张量造成了问题,因为它正在寻找 1 个元素作为错误,但不知道如何解决它。
我已经尝试通过循环输出来展平每个张量(不知道它是否是解决此问题的正确方法),使用以下代码但它会导致 pca 出错:
new_outputs = []
for i in outputs:
for j in i:
j = j.cpu()
j = j.detach().numpy()
j = j.flatten()
new_outputs.append(j)
pca_result = pca.fit_transform(new_output)
如果有人可以帮助解决这个错误,我将不胜感激,无论我采用的展平方法是否正确。
PS:我已阅读讨论此错误的现有帖子 (,),但其中 none 可以解决我的问题。
假设你的张量存储在一个形状像 (10, 3, 32, 32)
的矩阵中,其中 10 对应于张量的数量,你应该像这样展平每个张量:
import torch
from sklearn.decomposition import PCA
data= torch.rand((10, 3, 32, 32))
pca = PCA(10)
pca_result = pca.fit_transform(data.flatten(start_dim=1))
data.flatten(start_dim=1)
使您的数据保持良好状态 (10, 3*32*32)
您 post 编辑的错误实际上与您链接的 post 之一有关。 PCA 估计器需要使用 fit()
方法的类似数组的对象,并且您提供了张量列表。
我正在尝试使用 PCA 执行降维,其中 outputs
是一个张量列表,其中每个张量的形状为 (1, 3, 32,32)。这是代码:
from sklearn.decomposition import PCA
pca = PCA(10)
pca_result = pca.fit_transform(output)
但无论我怎样尝试,我总是收到这个错误:
ValueError: only one element tensors can be converted to Python scalars
我知道大小为 (1,3, 32,32) 的张量造成了问题,因为它正在寻找 1 个元素作为错误,但不知道如何解决它。 我已经尝试通过循环输出来展平每个张量(不知道它是否是解决此问题的正确方法),使用以下代码但它会导致 pca 出错:
new_outputs = []
for i in outputs:
for j in i:
j = j.cpu()
j = j.detach().numpy()
j = j.flatten()
new_outputs.append(j)
pca_result = pca.fit_transform(new_output)
如果有人可以帮助解决这个错误,我将不胜感激,无论我采用的展平方法是否正确。
PS:我已阅读讨论此错误的现有帖子 (
假设你的张量存储在一个形状像 (10, 3, 32, 32)
的矩阵中,其中 10 对应于张量的数量,你应该像这样展平每个张量:
import torch
from sklearn.decomposition import PCA
data= torch.rand((10, 3, 32, 32))
pca = PCA(10)
pca_result = pca.fit_transform(data.flatten(start_dim=1))
data.flatten(start_dim=1)
使您的数据保持良好状态 (10, 3*32*32)
您 post 编辑的错误实际上与您链接的 post 之一有关。 PCA 估计器需要使用 fit()
方法的类似数组的对象,并且您提供了张量列表。