我正在制作一个SVM分类器来对图像进行分类。程序使用的是Google Colab,文件已上传到Google Drive。图像的形状为torch.Size([32, 3, 224, 224])
。
这是我分割数据集的方式,
images = (images.numpy())labels = (labels.numpy())X_train, X_test, y_train, y_test = train_test_split(images, labels, test_size=0.3, random_state=42)
在训练数据和测试数据分割后,X_train和X_test的新形状分别为(22, 3, 224, 224)
和(10, 3, 224, 224)
。现在当我尝试这样做时,问题出现了
# 创建分类器:支持向量分类器classifier = svm.SVC(gamma=0.001)# 拟合训练数据classifier.fit(X_train,y_train)----> 3 classifier.fit(X_train,y_train) 537 if not allow_nd and array.ndim >= 3: 538 raise ValueError("Found array with dim %d. %s expected <= 2."--> 539 % (array.ndim, estimator_name)) 540 if force_all_finite: 541 _assert_all_finite(array,
ValueError: Found array with dim 4. Estimator expected <= 2.
我有4个图像类别,我希望SVM分类器能训练模型,之前我用CNN和迁移学习做过。我读了一些帖子,这里可能需要重塑数据。你能帮我解决这个问题吗?感谢你的帮助。
回答:
目前,你的输入数据有四个维度(批次大小, 通道数, 高度, 宽度)
,你需要将图像展平为两个维度(图像数量, 通道数*高度*宽度)
X_train = X_train.reshape(22,3*224*224)X_test = X_test.reshape(10,3*224*224)