0

이미지 데이터 용 SVC 분류자를 학습하려고합니다. 나는이 코드를 실행하면 그러나 :이미지 데이터가 포함 된 scikit-learn에서 지원 벡터 분류자를 적용하면 오류가 발생합니다.

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

을이 오류를 얻을 :

ValueError: setting an array element with a sequence. 

나는하기 matplotlib와 배열로 이미지를 생산 : plt.imread(image). 이 배열에없는 것처럼

오류가 보인다, 아직 나는 데이터가 모두 목록에있는 라벨의 종류를 확인할 때 (I 수동으로 라벨 데이터를 목록에 추가) :

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' 

난에 누락 어떤 단계 모르겠어요 그것을 분류하기 위해 분류 자 ​​(classifier)가 필요로하는 형태로 데이터를 얻는다. 누구든지 필요한 것을 볼 수 있습니까?

답변

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]으로 분류자를 실행 해 볼 수도 있습니다.

업데이트 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 및 training 레이블을 사용하여 학습합니다.

+0

나는 그것에 뭔가를 추가하는 것을 잊고 있다는 것을 알았다! 예제로 질문을 업데이트했습니다. 희망이 도움이됩니다! – Jon

+0

'train_set [0]'은'plt.imread()'함수에서 얻은 한 이미지의 데이터입니다. 올바른 형식이 아닌가요? – Jon

+0

뭔가있는 것처럼 보입니다! 'Value_rror : 희미한 배열을 찾았습니다 3. Estimator expected <= 2.' 그래도'plt.imshow (test_set_ [0]')를 실행하면'train_set [0] ])'그것은 이미지를 정확하게 보여준다. – Jon