質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

697閲覧

機械学習モデルがインポートできません。。。

python_2019

総合スコア68

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2020/08/17 08:19

編集2020/08/17 15:04

以下のようにファイルをインポートしようとすると、エラーになってします。
対象のファイル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]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aokikenichi

2020/08/17 09:30

「対象のファイル2つは、確かに存在しており、間違いないのですが...。」 間違いがあるからエラーになっているわけでして、 呼び出し方法は間違えていないようですので、保存側に何か問題があるのでは? そこを示していただけないでしょうか?
meg_

2020/08/17 10:43

エラーメッセージは上記で全てですか?
python_2019

2020/08/17 14:09

ご連絡ありがとうございます。 エラーメッセージは上記で全てです。 また、保存側の処理も追記しました。 保存側の「model = KerasClassifier(build_fn=create_model, verbose=0)」の箇所が原因でしょうか?
meg_

2020/08/17 14:30

モジュールのバージョンは保存時と読み込み時で同じでしょうか?
python_2019

2020/08/17 14:37

はい、バージョンは同じです。 今、保存時でのLOAD処理を追記しました。 不思議なことに、ここではLOADしてもエラーにならないのです...。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問