ゼロから優しく始めるpython入門を参考に、画像認識のプログラムを組んでいます。
データセットの作成はサンプルプログラムを参考に、エラーなく実行できたのですが、データを学習させるプログラムでエラーが発生しました。
python
1# 学習用とテスト用に分割 --- (*1) 2from sklearn.model_selection import train_test_split as split 3x, x_test, y, y_test = split(data, target) 4 5# データを学習 --- (*2) 6from sklearn import svm 7clf = svm.LinearSVC() 8clf.fit(x, y) 9 10# モデルを評価 --- (*3) 11 12pred = clf.predict(x_test) 13result = list(pred == y_test).count(True) / len(y_test) 14print("正解率=" + str(result))
上記のプログラムを実行するとこのようなエラーが出ました。
ValueError Traceback (most recent call last) <ipython-input-65-79fe9f04f566> in <module> 6 from sklearn import svm 7 clf = svm.LinearSVC() ----> 8 clf.fit(x, y) 9 10 # モデルを評価 --- (*3) ~\Anaconda3\lib\site-packages\sklearn\svm\classes.py in fit(self, X, y, sample_weight) 227 X, y = check_X_y(X, y, accept_sparse='csr', 228 dtype=np.float64, order="C", --> 229 accept_large_sparse=False) 230 check_classification_targets(y) 231 self.classes_ = np.unique(y) ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_X_y(X, y, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator) 717 ensure_min_features=ensure_min_features, 718 warn_on_dtype=warn_on_dtype, --> 719 estimator=estimator) 720 if multi_output: 721 y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False, ~\Anaconda3\lib\site-packages\sklearn\utils\validation.py in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator) 494 try: 495 warnings.simplefilter('error', ComplexWarning) --> 496 array = np.asarray(array, dtype=dtype, order=order) 497 except ComplexWarning: 498 raise ValueError("Complex data not supported\n" ~\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order) 536 537 """ --> 538 return array(a, dtype, copy=False, order=order) 539 540 ValueError: setting an array element with a sequence.
また、データとラベルはこのように作成しました。
python
1from PIL import Image 2import numpy as np 3import glob 4 5#画像を読み込んでデータとラベルに追加する 6data = [] 7target = [] 8 9def glob_images(dir,label,size): 10 files = glob.glob(dir + "/*.JPG") 11 for f in files: 12 img = Image.open(f)#画像を開く 13 img = img.convert("RGB")#念のためRGB画像に変換 14 img.thumbnail((size,size),Image.LANCZOS)#サイズ変更方法を指定してリサイズ 15 ary = np.array(img).reshape(-1,) #一次元の配列にする 16 data.append(ary) 17 target.append(label) #ラベルに追加 18 19#画像ディレクトリとラベル、画像サイズを指定してデータを追加 20glob_images("./tissue",label=0,size=8) 21glob_images("./floor",label=1,size=8)
10行目は写真の拡張子がJPGなので、それに合わせ変更しています。
また、最後の2行も使用するファイル名に合わせています。
どうやら8行目の構文がおかしいようなのですが、エラーメッセージを見ても理解できませんでした。
改善方法などを教えていただけると嬉しいです。
環境
Jupyter
python 3.7.4
windows 10
あなたの回答
tips
プレビュー