#前提・実現したいこと
メーターの数字をsckit-learnを用いて行いたいと考えており、
自分でデータセットを作り学習させる途中でエラーが発生しました。
言語はpython3です。
自作したデータセットを用いて、test.pyで実行すると、以下のようなエラーが出てきます。
発生している問題・エラーメッセージ
#出力内容(最後のほうにエラーがでています)
---------2の画像をnumpy形式に変換し、Listに格納中--------- ---------7の画像をnumpy形式に変換し、Listに格納中--------- ---------8の画像をnumpy形式に変換し、Listに格納中--------- ------------リストをnumpy形式に変換中----------- Iteration 1, loss = 175.43883525 Iteration 2, loss = inf Iteration 3, loss = inf Iteration 4, loss = inf Iteration 5, loss = inf Iteration 6, loss = inf Iteration 7, loss = inf Iteration 8, loss = inf Iteration 9, loss = inf Iteration 10, loss = inf Iteration 11, loss = inf Iteration 12, loss = inf Training loss did not improve more than tol=0.000100 for 10 consecutive epochs. Stopping. 精度 0.7 Traceback (most recent call last): File "<ipython-input-8-a639f0b2b1f0>", line 1, in <module> runfile('C:/Users/erifu/Desktop/data0417/test.py', wdir='C:/Users/erifu/Desktop/data0417') File "C:\Users\erifu\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile execfile(filename, namespace) File "C:\Users\erifu\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile exec(compile(f.read(), filename, 'exec'), namespace) File "C:/Users/erifu/Desktop/data0417/test.py", line 32, in <module> print(metrics.confusion_matrix(data_test,p)) File "C:\Users\erifu\Anaconda3\lib\site-packages\sklearn\metrics\classification.py", line 253, in confusion_matrix y_type, y_true, y_pred = _check_targets(y_true, y_pred) File "C:\Users\erifu\Anaconda3\lib\site-packages\sklearn\metrics\classification.py", line 81, in _check_targets "and {1} targets".format(type_true, type_pred)) ValueError: Classification metrics can't handle a mix of multiclass-multioutput and binary targets
#該当のソースコード(test.py)
from sklearn.model_selection import train_test_split import suuji_0420 import numpy as np データの読み込み number=suuji_0420.load_Suuji() data,target=number.data,number.target 学習とテストに分ける data_train,data_test,target_train,target_test=train_test_split(data,target,train_size=0.8,random_state=1) 学習器の作成 from sklearn.neural_network import MLPClassifier mlp=MLPClassifier(verbose=True) mlp.fit(data_train,target_train) 評価 p=mlp.predict(data_test) print("精度",np.mean(p==target_test))#正解率 間違った文字の確認 from sklearn import metrics print(metrics.confusion_matrix(data_test,p)) from sklearn.externals import joblib joblib.dump(mlp,"model.pkl",compress=True)#モデルの保存
#データセット作成コード(suuuji0420)
from PIL import Image import numpy as np import os,glob 画像フォルダのへの絶対パス ROOT_DIR="/Users/erifu/Desktop/data0417/" 画像フォルダー名 categories=["2","7","8"] クラス class Number(): def __init__(self,data,target,target_names,images): self.data=data self.target=target self.target_names=target_names self.images=images キー(インスタンス変数)を取得するメソッド def keys(self): print("[data,target,target_names,images]") 画像データをnumpy形式に変換してデータセットを作成 def load_Suuji(): data=[]#画像の一次元データを格納するリスト target=[]#ラベル(正解)の情報を格納するリスト target_names=["2","7","8"] images=[]#画像の二次元データを格納するリスト for label,category in enumerate(categories): file_dir=ROOT_DIR + category すべての画像をとってくる files=glob.glob(file_dir + "/*.jpg") print("---------{}の画像をnumpy形式に変換し、Listに格納中---------".format(category)) for i,f in enumerate(files): img=Image.open(f) img=img.convert('L')#画像をフレースケールに変換 img=img.resize((84,84)) imgdata=np.asarray(img)#numpy配列に変換 images.append(imgdata)#画像データの二次元配列 data.append(imgdata.flatten())#画像データの一次元配列 target.append(label)#正解ラベルを格納 print("------------リストをnumpy形式に変換中-----------") data=np.array(data) target=np.array(target) target_names=np.array(target_names) images=np.array(images) インスタンスを生成 suuji=Number(data, target, target_names, images) return suuji
#備考
データセット作成時点で問題があるのかそれとも学習時点で問題があるのかすらよくわかりません。
ご回答のほどよろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー