以下のようにファイルをインポートしようとすると、エラーになってします。
対象のファイル2つは、確かに存在しており、間違いないのですが...。
お詳しい方、お助けください。。
import pickle # 学習済モデル(モデルはすでに保存済) clf = pickle.load(open("DNN_Grid.sav", "rb")) stdsc = pickle.load(open("DNN_Grid_sc.sav", "rb"))
以下、エラーメッセージ
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-4-c3b82fa280e4> in <module> 2 3 # 学習済モデル(モデルはすでに保存済) ----> 4 clf = pickle.load(open("DNN_Grid.sav", "rb")) 5 stdsc = pickle.load(open("DNN_Grid_sc.sav", "rb")) AttributeError: Can't get attribute 'create_model' on <module '__main__'>
以下は保存側の処理です。
最後の保存処理まで特にエラーは出ませんでしたが、
「def create_model(optimizer='rmsprop', init='glorot_uniform'):」」の箇所が原因なのでしょうか?
# ■グリッドサーチ(ネットワーク設定) def create_model(optimizer='rmsprop', init='glorot_uniform'): #ニュートラルネットワークで使用するモデル作成 model = keras.models.Sequential() # 入力層(1層)+中間層(2層:relu)◆注意→都度、input_dimの値(列数)を変えること model.add(Dense(units=8,input_dim=4)) model.add(Activation('relu')) model.add(Dropout(0.2)) # 中間層(3層:relu) model.add(Dense(units=8)) model.add(Activation('relu')) #model.add(Dropout(0.2)) # 出力層(4層:softmax) model.add(Dense(units=3)) model.add(Activation('softmax')) model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy']) return model
# ■グリッドサーチ(実行) from keras.wrappers.scikit_learn import KerasClassifier from sklearn.model_selection import GridSearchCV # KerasClassifier/KerasRegressor can be used as same as scikit_learn estimator. model = KerasClassifier(build_fn=create_model, verbose=0) # Grid Search parameters (epochs, batch size and optimizer) optimizers = ['adam']# optimizers = ['rmsprop', 'adam', 'sgd', 'adagrad'] init = ['normal']# init = ['glorot_uniform', 'normal', 'uniform'] epochs = [10] batches = [4,8] param_grid = dict(optimizer=optimizers, epochs=epochs, batch_size=batches, init=init) grid = GridSearchCV(estimator=model, param_grid=param_grid) grid_result = grid.fit(x_train_std, y_train) # summarize results # print("Best parameter set: {}".format(grid_result.best_params_)) print(grid.best_params_) print(grid.best_score_)
# ■グリッドサーチ(最適パラメータを再設定と実行) #clf = svm.SVC(C=1, gamma=0.0001,kernel='rbf')← 手動の場合 grid = grid.best_estimator_ # 訓練データとラベルで再度学習 grid.fit(x_train_std, y_train)
# ■グリッドサーチ(最適パラメータでの正解率) from sklearn import metrics accuracy = grid.score(x_test_std, y_test) print(f"正解率⇒ {accuracy}") # 注意(グリッドサーチのBESTスコアは訓練データの値、BESTパラメータ再設定でのスコアはテストデータの値)
# モデルを保存する import pickle filename = 'DNN_Grid.sav' pickle.dump(grid, open(filename, 'wb')) pickle.dump(stdsc, open("DNN_Grid_sc.sav", "wb"))
保存時のLOADを追記しました。
不思議なことにここではエラーが出ません。。
# 保存したモデルをロードする clf = pickle.load(open("DNN_Grid.sav", "rb")) stdsc = pickle.load(open("DNN_Grid_sc.sav", "rb"))
# ■グリッドサーチ # 未知データの読み込み df1 = pd.read_excel('2020-08-05_raw_1cycle_ave_1second.xlsx',sheet_name='notarget')# 未知データのエクセル読み込み x_test_keras_1 = np.array(df1) # データを標準化 x_test_keras_1_std = stdsc.fit_transform(x_test_keras_1) # 未知データをロードした学習済モデルで予測 y_test_keras_1_std =clf.predict(x_test_keras_1_std) print(y_test_keras_1_std)
[2 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 0 0 1 1 0 0 1 1 0 0 1 0 0 1 1 1 0 0 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 0 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 2 0 0 2 1 0 2 2 1 2 2 2 2 2 2 2 1 1 2 1 2 2 2 2 2 2 1 1 1 2 2 2 2 0 0 2 1 1 1 2 2 2 2 1 2 2 2 2 1 1 1 2 2 2 2 2 2 2 0 2 2 2 2 2 2 2 2 2 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2]
あなたの回答
tips
プレビュー