Я получаю ValueError для модуля Python Kmeans, импортированного из Sklearn - PullRequest
0 голосов
/ 09 июля 2019

Я портировал старый код Pytorch из репозитория github. Я должен запустить файл kmeans.py для kmeans. Когда я делаю, я получаю

valueerror:too many values to unpack.

Вот код kmeans.

# -*- coding:utf-8 -*-


from sklearn.cluster import KMeans
from retrieval import load_feat_db
from sklearn.externals import joblib
from config import DATASET_BASE, N_CLUSTERS
import os


if __name__ == '__main__':
    feats, labels = load_feat_db()
    #model = KMeans(n_clusters=N_CLUSTERS, random_state=0, n_jobs=-1).fit(feats)
    model = KMeans(n_clusters=N_CLUSTERS, random_state=1, n_jobs=1).fit(feats)
    model_path = os.path.join(DATASET_BASE, r'models', r'kmeans.m')
    joblib.dump(model, model_path)

и вот load_feat_db (), который, я думаю, выдает ошибку.

@timer_with_task("Loading feature database")
def load_feat_db():
    feat_all = os.path.join(DATASET_BASE, 'all_feat.npy')
    feat_list = os.path.join(DATASET_BASE, 'all_feat.list')
    color_feat = os.path.join(DATASET_BASE, 'all_color_feat.npy')
    if not os.path.isfile(feat_list) or not os.path.isfile(feat_all) or not os.path.isfile(color_feat):
        print("No feature db file! Please run feature_extractor.py first.")
        return
    deep_feats = np.load(feat_all)
    color_feats = np.load(color_feat)
    with open(feat_list) as f:
        labels = list(map(lambda x: x.strip(), f.readlines()))
    return deep_feats, color_feats, labels

Я прочитал документацию по scikit, синтаксис правильный, я попытался изменить seed_state random и n_jobs = 1 (для пробного запуска с одним ядром), но проблема остается. Лямбда-функция, кажется, в порядке. Это действительно не работает из-за Sci Kit? Сейчас я планирую использовать другие kmeans, такие как в opencv.

1 Ответ

0 голосов
/ 09 июля 2019

Функция load_feat_db() возвращает 3 значения, return deep_feats, color_feats, labels

Тем не менее, когда вы вызываете его, вы выделяете место только для 2 возвращаемых значений, feats, labels = load_feat_db()

Попробуйте вместо этого использовать следующий вызов функции, d_feats, c_feats, labels = load_feat_db()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...