我正在进行一个面部识别项目,其中有两个人的每人各有两张面部图像
1. personA image1.jpg image2.jpg2. personB image1.jpg image2.jpg
我试图在上述数据集的面部嵌入上训练模型,如下所示:
params = {"C": [0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0], "gamma": [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1]}model = GridSearchCV(SVC(kernel="rbf", gamma="auto", probability=True), params, cv=3, n_jobs=-1)model.fit(data["embeddings"], labels)
其中data["embeddings"]
和labels
的长度为4
。data["embeddings"]
包含personA和personB的面部嵌入的ndarray
data['embeddings'] = [ [0.02331057, -0.01995077, ..], [-0.00034041, 0.02753334, ..], [0.02454563, -0.03797123, ...], [0.10561685, -0.08444008, ...] ]labels = [0 0 1 1]
但是在model.fit(data["embeddings"], labels)
时,我得到了以下错误:
ValueError: n_splits=3 cannot be greater than the number of members in each class.
我无法理解这个错误。有人能解释一下这个问题以及如何解决吗?
回答:
仔细阅读后,错误信息清晰且自解释性强;它只是告诉你,由于每个类别只有两个样本,你不能进行3折交叉验证。这至少需要每个类别有3个样本。
我猜如果设置cv=2
应该不会报错,但你的整个方法(即只有4个样本的数据集)似乎非常值得怀疑。