Gridsearchの間に初期のストッピングLSTMトレーニングを停止していません -- lstm フィールド と exit フィールド と gridsearchcv フィールド 関連 問題

EarlyStopping during GridSearch not stopping LSTM training












1
vote

問題

日本語

Kerasを使用してLSTMネットワークを開発しています。私は "gridsearchcv"を使用してパラメータを最適化しています、私は "早期停止"関数を導入することを決定したことを決定したことを決定しました。 UllUMAMELE、「Delta_min」を非常に低く、「忍耐」を非常に低く設定しても、トレーニングは停止されません。トレーニングフェーズは初期のコールバックを無視します。

グリッドサーチCVと初期の段階は互換性がありませんか?

私のコードの下:

<事前> <コード> import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import LSTM, Dense from keras.wrappers.scikit_learn import KerasRegressor from sklearn.metrics import mean_squared_error from sklearn.metrics import mean_absolute_error from sklearn.metrics import make_scorer from sklearn.model_selection import GridSearchCV from time import time #for earlystop implementation from keras.callbacks import EarlyStopping def create_model(optimizer, hl1_nodes, input_shape): # creation of the NN - Electric Load # LSTM layers followed by other LSTM layer must have the parameter "return_sequences" set at True model = Sequential() model.add(LSTM(units = hl1_nodes , input_shape=input_shape, return_sequences=False)) model.add(Dense(1, activation="linear")) # output layer model.compile(optimizer=optimizer, loss='mean_squared_error', metrics=['mean_absolute_error']) model.summary() return model def LSTM_1HL_method(X_train, X_test, Y_train, Y_test): # normalize X and Y data mmsx = MinMaxScaler() mmsy = MinMaxScaler() X_train = mmsx.fit_transform(X_train) X_test = mmsx.transform(X_test) Y_train = mmsy.fit_transform(Y_train) Y_test = mmsy.transform(Y_test) # NN for Electric Load # LSTM Input Shape time_steps = 1 # number of time-steps you are feeding a sequence (?) inputs_numb = X_train.shape[1] # number of inputs input_shape=(time_steps, inputs_numb) model = KerasRegressor(build_fn=create_model,verbose=1,input_shape=input_shape) #GridSearch code start=time() optimizers = ['adam'] epochs = np.array([1000]) hl1_nodes = np.array([32, 64, 128]) btcsz = np.array([1,X_train.shape[0]]) earlyStop=[EarlyStopping(monitor="loss",verbose=1,mode='min',min_delta=1000,patience=1)] #early stop setting param_grid = dict(optimizer=optimizers, hl1_nodes=hl1_nodes, nb_epoch=epochs,batch_size=btcsz, callbacks=[earlyStop]) scoring = make_scorer(mean_squared_error) #in order to use a metric as a scorer grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring = scoring) # NN training X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1]) grid_result = grid.fit(X_train, Y_train) # Predictions - Electric Load Yhat_train = grid_result.predict(X_train) X_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1]) Yhat_test = grid_result.predict(X_test) # Denormalization - Electric Load Yhat_train=Yhat_train.reshape(-1,1) Yhat_test=Yhat_test.reshape(-1,1) Yhat_train = mmsy.inverse_transform(Yhat_train) Yhat_test = mmsy.inverse_transform(Yhat_test) return Yhat_train, Yhat_test
英語

I am developing an LSTM network using Keras. I am optimizing parameter using "gridsearchcv", since I do not want to gridsearch the epoch parameter I decided to introduce an "early-stopping" function. Unluckily, even if I set "delta_min" very big and "patience" very low, training is not stopped. It seems that the training phase ignores the earlystopping callback.

May gridsearchcv and earlystopping be not compatible?

Below my code:

import pandas as pd import numpy as np from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import LSTM, Dense from keras.wrappers.scikit_learn import KerasRegressor from sklearn.metrics import mean_squared_error from sklearn.metrics import mean_absolute_error from sklearn.metrics import make_scorer  from sklearn.model_selection import GridSearchCV from time import time  #for earlystop implementation from keras.callbacks import EarlyStopping  def create_model(optimizer, hl1_nodes, input_shape):     # creation of the NN - Electric Load     # LSTM layers followed by other LSTM layer must have the parameter "return_sequences" set at True     model = Sequential()     model.add(LSTM(units = hl1_nodes , input_shape=input_shape, return_sequences=False))     model.add(Dense(1, activation="linear"))  # output layer     model.compile(optimizer=optimizer, loss='mean_squared_error', metrics=['mean_absolute_error'])     model.summary()     return model  def LSTM_1HL_method(X_train, X_test, Y_train, Y_test):      # normalize X and Y data     mmsx = MinMaxScaler()     mmsy = MinMaxScaler()      X_train = mmsx.fit_transform(X_train)     X_test = mmsx.transform(X_test)     Y_train = mmsy.fit_transform(Y_train)     Y_test = mmsy.transform(Y_test)        # NN for Electric Load     # LSTM  Input Shape     time_steps = 1  # number of time-steps you are feeding a sequence (?)     inputs_numb = X_train.shape[1]  # number of inputs     input_shape=(time_steps, inputs_numb)      model = KerasRegressor(build_fn=create_model,verbose=1,input_shape=input_shape)      #GridSearch code     start=time()     optimizers = ['adam']     epochs = np.array([1000])     hl1_nodes = np.array([32, 64, 128])     btcsz = np.array([1,X_train.shape[0]])      earlyStop=[EarlyStopping(monitor="loss",verbose=1,mode='min',min_delta=1000,patience=1)] #early stop setting       param_grid = dict(optimizer=optimizers, hl1_nodes=hl1_nodes, nb_epoch=epochs,batch_size=btcsz, callbacks=[earlyStop])     scoring = make_scorer(mean_squared_error) #in order to use a metric as a scorer     grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring = scoring)      # NN training     X_train = X_train.reshape(X_train.shape[0], 1, X_train.shape[1])     grid_result = grid.fit(X_train, Y_train)      # Predictions - Electric Load     Yhat_train = grid_result.predict(X_train)     X_test = X_test.reshape(X_test.shape[0], 1, X_test.shape[1])     Yhat_test = grid_result.predict(X_test)       # Denormalization - Electric Load     Yhat_train=Yhat_train.reshape(-1,1)     Yhat_test=Yhat_test.reshape(-1,1)     Yhat_train = mmsy.inverse_transform(Yhat_train)     Yhat_test = mmsy.inverse_transform(Yhat_test)       return Yhat_train, Yhat_test 
</div
        

回答リスト

0
 
vote

私は通常安全な早期停止のためのマウス位置入力を使用します。

(これはそれほど知られていないので、とにかくここに入れる)

<事前> <コード> def queryMousePosition(): from ctypes import windll, Structure, c_long, byref class POINT(Structure): _fields_ = [("x", c_long), ("y", c_long)] pt = POINT() windll.user32.GetCursorPos(byref(pt)) return pt.x, pt.y # %timeit queryMousePosition() class TerminateOnFlag(keras.callbacks.Callback): def on_batch_end(self, batch, logs=None): mouse_x, mouse_y = queryMousePosition() if mouse_x < 10: # move the cursor to the left to stop self.model.stop_training = True callbacks=[TerminateOnFlag()] model.fit_generator(..., callbacks=callbacks, ...)
 

I usually use the mouse position input for safe early stopping.

(This is not so known method, so i put it here anyway)

def queryMousePosition():     from ctypes import windll, Structure, c_long, byref     class POINT(Structure): _fields_ = [("x", c_long), ("y", c_long)]     pt = POINT()     windll.user32.GetCursorPos(byref(pt))     return pt.x, pt.y  # %timeit queryMousePosition()   class TerminateOnFlag(keras.callbacks.Callback):     def on_batch_end(self, batch, logs=None):         mouse_x, mouse_y = queryMousePosition()         if mouse_x < 10:  # move the cursor to the left to stop             self.model.stop_training = True  callbacks=[TerminateOnFlag()]  model.fit_generator(..., callbacks=callbacks, ...) 
</div
 
 

関連する質問

3  AttributeError: 'str'オブジェクトには、新しいバージョンのSklearnのために属性 'パラメータがありません。  ( Attributeerror str object has no attribute parameters due to new version of ) 
Sklearnを使ったトピックモデリングをしています。グリッド検索出力からLOG-尤度を取得しようとしている間、私は以下のエラーを得ています: attributeError: 'str'オブジェクトには属性 'パラメータ' がありません。 私は、古いバ...

0  gridsearchcvとその機能の重要性  ( Gridsearchcv and its feature importance ) 
gridsearchcvでは、次のようなもののようにフィットすると: <事前> <コード> forest_reg = RandomForestRegressor() grid_search = GridSearchCV(forest_reg, param_g...

1  PCAとKeras Classifierの両方をSklearn Pipelineに入れる方法とグリッド検索CVを実行しますか?  ( How do i put both pca and a keras classifier into an sklearn pipeline and do a g ) 
事前にPCAを搭載したKeras NNでグリッド検索CV操作をしようとしています。この目的のために、私はPCAステップからなるパイプラインを構築し、次にSklearnラッパーを使用してKeras推定器を作成しました。ただし、検索したいものの1つはPCAのN_C...

3  例外を伴うgridsearchcv  ( Gridsearchcv with exception ) 
GridsearchCV を試してみましたが、 param grid にいくつかの例外があります。これが私のグリッド検索コードです: <事前> <コード> from sklearn.model_selection import GridSearchCV f...

1  rfecvと組み合わせると、gridsearchで 'max_features'を使う方法  ( How to use max features in gridsearch when combining with rfecv ) 
事前に答えてくれてありがとう。これは私の最初の投稿です、そして私はPythonにとって比較的新しいので、私がひどく何かをフォーマットしたかどうか謝罪します。 私は、Sklearnで再帰的な機能の排除とグリッド検索を組み合わせて、ハイパーパラメータと機能の数の最...

1  スコアリング機能を備えたgridsearchCVとREFITパラメータ  ( Gridsearchcv with scoring function and refit parameter ) 
私の質問はこの1つです。そこにはしっかりした答えはありません。 私はマルチクラスのマルチラベルの分類をしています。ただし、 refit パラメータを持ち、最後にモデルの最良のパラメータを得るためには、Refitのスコアー関数の1つを導入する必要があります。そう...

0  Pipeline + StandardScaler + OHE + CLF + GRIDSearchCV + ColumnTranFormer  ( Pipeline standardscaler ohe clf gridsearchcv columntranformer ) 
私のLILプロジェクトのためのPipeline + StandardScaler + OHE + CLF + GRIDSearchCV + ColumnTranFormerを使用してデータモデリングしようとしていました。 私はコードを除いてちょうど罰金を尽くす...

2  AttributeError: 'slice'オブジェクトには属性 'flags'エラーがありません  ( Attributeerror slice object has no attribute flags error ) 
私は別の検証セットを持っているので、交差検証なしに div { width: 100px; height: 100px; } [att=A].classA { background-color: red; } .error { ...

3  GridSearchCVのcolumntransformer要素にアクセスする方法  ( How to access columntransformer elements in gridsearchcv ) 
Grid_Searchのparam_gridのcolumntransformer(パイプラインの一部である)に含まれる個々のプリプロセッサを参照して、正しい命名規則を見つけたいと思いました。 環境とアンプ。サンプルデータ: <事前> <コード> impo...

1  gridsearchcvセマフォまたはロックが何度もリリースされました  ( Gridsearchcv semaphore or lock released too many times ) 
最初はWindows PC上でコードを開発し、すべてがうまくいきました。ただし、ロードシェードを取得しましたので、携帯型Pythonの開発環境の開発などが必要なので、電源が失敗したときに私の開発を続けてSLAX 9.8 USBを設定します。 しかし、USBの作...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有