2016-11-09 6 views
0

私は、1022イメージと1022個のマルチクラスラベル(各ラベルは14クラス)を持つPythonでSVMを使用してイメージ分類を行います。このため今イメージを分類するためにSVMを訓練する際に配列エラーを伴う配列要素を設定する

mypath = 'path' 
k = listdir(mypath) 
images = np.empty((len(k)-1), dtype=object) 
resized_imgs = np.empty((len(k)-1),dtype=object) 
for n in range(0, len(k)-1): 
    images[n] = cv2.imread(join(mypath,k[n]),0) #Reading images in grayscale 
    resized_imgs[n] = cv2.resize(images[n],(32,32)) #Resizing images 
for i in range(0,len(k)-1): 
    a=resized_imgs[i].mean() 
    b=resized_imgs[i].std() 
    t=np.ndarray([32,32]) 
    t.fill(1) 
    t=t*a 
    resized_imgs[i]=(resized_imgs[i]-a)/b 
X_train = resized_imgs 

for i in range(len(k)-1): 
    X_train[i] = X_train[i].flatten().tolist() 

y_train = np.array(y_train) 
for i in range(len(k)-1): 
    y_train[i] = y_train[i].flatten().tolist() 

clf=svm.SVC(gamma=0.001) 
clf.fit(X_train,y_train) 

X_train y_train

私はエラーを取得しています:

--------------------------------------------------------------------------- 
ValueError        Traceback (most recent call last) 
<ipython-input-469-bfab446776df> in <module>() 
----> 1 clf.fit(X_train,y_train[:,0]) 

C:\Users\user\Anaconda3\lib\site-packages\sklearn\svm\base.py in fit(self, X, y, sample_weight) 
    148   self._sparse = sparse and not callable(self.kernel) 
    149 
--> 150   X = check_array(X, accept_sparse='csr', dtype=np.float64,  order='C') 
    151   y = self._validate_targets(y) 
    152 

C:\Users\user\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 
    371          force_all_finite) 
    372  else: 
--> 373   array = np.array(array, dtype=dtype, order=order, copy=copy) 
    374 
    375   if ensure_2d: 

ValueError: setting an array element with a sequence. 

私はこれが原因によるX_trainの配列のサイズの不一致になる可能性がどのように表示されませんX_trainの各要素は1024個の正規化されたピクセル値のリストであり、y_trainの各要素は14個の属性のリストに対応しています。

ご協力いただければ幸いです。ありがとう!

答えて

1

どこが間違っているのか分かりました。 Xtrainのdtypeはオブジェクト型だったので、floatに変更しなければならなかった。同じのために次のコードを使用し

np.array(list(X_train), dtype=np.float) 
関連する問題