0

画像データのSVC分類子を訓練しようとしています。しかし、私はこのコードを実行すると:画像データを含むscikit-learnのサポートベクター分類器を適用するとエラーが発生する

classifier = svm.SVC(gamma=0.001) 
classifier.fit(train_set, train_set_labels) 

を、私はこのエラーを取得する:plt.imread(image)

ValueError: setting an array element with a sequence. 

私はmatplotlibの持つ配列に画像を生成します。

それが配列ではないようなエラーはそう、まだ私は、データの種類とラベルをチェックするとき、彼らは両方のリスト(私は手動でラベルデータのリストに追加)している:

print(type(train_set)) 
print(type(train_set_labels)) 

<class 'list'> 
<class 'list'> 

plt.imshow(items[0])を実行すると、画像が出力に正しく表示されます。

私もscikit-learnからtrain_test_split呼ば:

train_set, test_set = train_test_split(items, test_size=0.2, random_state=42) 

例入力:

train_set[0] 

array([[[212, 134, 34], 
    [221, 140, 48], 
    [240, 154, 71], 
    ..., 
    [245, 182, 51], 
    [235, 175, 43], 
    [242, 182, 50]], 

    [[230, 152, 51], 
    [222, 139, 47], 
    [236, 147, 65], 
    ..., 
    [246, 184, 49], 
    [238, 179, 43], 
    [245, 186, 50]], 

    [[229, 150, 47], 
    [205, 122, 28], 
    [220, 129, 46], 
    ..., 
    [232, 171, 28], 
    [237, 179, 35], 
    [244, 188, 43]], 

    ..., 
    [[115, 112, 103], 
    [112, 109, 102], 
    [ 80, 77, 72], 
    ..., 
    [ 34, 25, 28], 
    [ 55, 46, 49], 
    [ 80, 71, 74]], 

    [[ 59, 56, 47], 
    [ 66, 63, 56], 
    [ 48, 45, 40], 
    ..., 
    [ 32, 23, 26], 
    [ 56, 47, 50], 
    [ 82, 73, 76]], 

    [[ 29, 26, 17], 
    [ 41, 38, 31], 
    [ 32, 29, 24], 
    ..., 
    [ 56, 47, 50], 
    [ 59, 50, 53], 
    [ 84, 75, 78]]], dtype=uint8) 

例ラベル:

train_set_labels[0] 

'Picasso' 

私は私が欠けているものをステップわからないんだけどそれを訓練するために分類器が必要とする形式でデータを取得する。誰にも必要なものが見えますか?あなたが受けている

答えて

0

エラーメッセージ:あなたはどこかに単一の値が必要であることをリストに入れしようとしているとき

ValueError: setting an array element with a sequence, 

は正常になります。これはあなたのtrain_setが多次元要素のリストで構成されていることを私に示唆していますが、入力がリストであると述べています。入力とラベルの例を投稿することはできますか?

更新日 はい、それは私が思った通りです。あなたのトレーニングデータの最初の要素、train_set [0]は長いリストに対応しています(私はどれくらいの長さを持つことができません)。各要素は3つの要素のリストで構成されています。したがって、分類器がリストのリスト(各行がn個のフィーチャのリストで構成されたトレーニング例の数に対応するm個の行)を必要とするとき、リストのリストのリストで分類器を呼び出すことになります。 train_set配列にはほかに何がありますか? train_set [0]に完全なデータセットがありますか?もしそうなら、train_set [0]の各サブ要素に対応する各要素を持つ新しい配列を作成する必要があります。そのコードを実行する必要がありますが、私はその分類子に慣れていません。あるいは、train_set [0]で分類器を実行してみることもできます。

UPDATE 2

私は順序でデータを前処理する最善の方法は、それがアルゴリズムに許容可能であるためには何を伝えることができないだろうので、私はscikit-learn.svcと経験を持っていませんリストのリストで構成されているtrain_setの各要素に対して、上記のリストにサブリストのすべての要素を再帰的に配置することです。たとえば、

new_train_set = [] 
    for i in range(len(train_set)): 
     for j in range(len(train_set[i]): 
     new_train_set.append([train_set[i,j]) 

私はnew_train_setとトレーニングラベルを使用してトレーニングします。

+0

私はそれに何かを追加することを忘れていたことを知っていた!私は例を用いて質問を更新しました。それが役に立てば幸い! – Jon

+0

'train_set [0]'は 'plt.imread()'関数から得た1つのイメージのデータです。それは正しいフォーマットではありませんか? – Jon

+0

あなたは何かをしているように見えます! 'ValueError:配列がdimで見つかった3. Estimator expected <= 2.'しかし、' plt.imshow(test_set_ [0] ')を実行すると、 ]) '画像を正しく表示します。 – Jon

関連する問題