[python]ディープラーニングで、学習モデル・重みデータを保存したい
私は高専の機械科に所属している学生で、卒業研究でpythonを使用しているのですが、数ヶ月あたりに始めたのでよくわかりません。
研究内容は「ディープラーニングを用いて加工形状を分類する」というもので、既にExtraTreesClassifierという学習手法を使って学習は出来ているのですが、学習モデルと重みデータを保存しようとするとエラーが出てしまいます。
###エラーメッセージ
run trial_senban_ETC2.py ./data/learn900 ./data/test100 0.9 Traceback (most recent call last): File "C:\Users\kousaku25\Desktop\narita\senban\trial_senban_ETC2.py", line 113, in <module> model.save('senban_model.pkl') AttributeError: 'ExtraTreesClassifier' object has no attribute 'save'
該当のソースコード
python
1import os 2import glob 3import sys 4import keras 5import numpy as np 6from skimage import io 7from sklearn import datasets 8from sklearn.metrics import accuracy_score 9from sklearn.ensemble import ExtraTreesClassifier 10from keras.models import Sequential 11from keras.layers import Convolution2D, MaxPooling2D 12from keras.layers import Dense, Dropout, Flatten 13from keras.optimizers import RMSprop 14 15IMAGE_SIZE1 = 84 16IMAGE_SIZE2 = 124 17COLOR_BYTE = 3 18CATEGORY_NUM = 6 19nb_classes = 2 20 21def load_senbanimage(path): 22 23 files = glob.glob(os.path.join(path, '*/*.bmp')) 24 25 images = np.ndarray((len(files), IMAGE_SIZE1, IMAGE_SIZE2, 26 COLOR_BYTE), dtype = np.uint8) 27 labels = np.ndarray(len(files), dtype=np.int) 28 29 30 for idx, file in enumerate(files): 31 32 image = io.imread(file) 33 images[idx] = image 34 35 label = os.path.split(os.path.dirname(file))[-1] 36 labels[idx] = int(label) 37 38 flat_data = images.reshape((-1, IMAGE_SIZE1 * IMAGE_SIZE2 * COLOR_BYTE)) 39 images = flat_data.view() 40 return datasets.base.Bunch(data=flat_data, 41 target=labels.astype(np.int), 42 target_names=np.arange(CATEGORY_NUM), 43 images=images, 44 DESCR=None) 45 46 labels = keras.utils.np_utils.to_categorical(labels, nb_classes) 47 in_size = IMAGE_SIZE1 * IMAGE_SIZE2 48 49 50 model = Sequential() 51 model.add(Convolution2D(32, 3, 3, input_shape=(in_size))) 52 model.add(Activation=('relu')) 53 model.add(MaxPooling2D(pool_size=(2, 2))) 54 55 model.add(Convolution2D(32, 3, 3)) 56 model.add(Activation=('relu')) 57 model.add(MaxPooling2D(pool_size=(2, 2))) 58 59 model.add(Convolution2D(64, 3, 3,)) 60 model.add(Activation=('relu')) 61 model.add(MaxPooling2D(pool_size=(2, 2))) 62 63 model.add(Flatten()) 64 model.add(Dense(2)) 65 model.add(Activation=('relu')) 66 model.add(Dropout(0.5)) 67 model.add(Dense(1)) 68 model.add(Activation=('sigmoid')) 69 70 71 model.compile( 72 loss='binary_crossentropy', 73 optimizer=RMSprop(), 74 metrics=['accuracy']) 75 76if __name__ == '__main__': 77 argvs = sys.argv 78 train_path = argvs[1] 79 test_path = argvs[2] 80 81 82 train = load_senbanimage(train_path) 83 84 model = ExtraTreesClassifier(n_estimators=20, random_state=42) 85 model.fit(train.data, train.target) 86 87 test = load_senbanimage(test_path) 88 predicted = model.predict(test.data) 89 90 print (accuracy_score(test.target, predicted)) 91 92 93 model.save('senban_model.pkl') 94 model.save_weights('senban_weight.h5')
補足
最適な学習手法が明確ではなかったためall_estimatorsメソッドを用いて最も正答率の高かったExtraTreesClassifierを採用しましたが、エラー文を見た感じそこに問題があるのでしょうか?
知識が浅く、参考書やネットで見たものをツギハギしたため、おかしい点があると思いますが、アドバイスいただけると幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー