<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何診斷LSTM模型的過度擬合和欠擬合 > 原文: [https://machinelearningmastery.com/diagnose-overfitting-underfitting-lstm-models/](https://machinelearningmastery.com/diagnose-overfitting-underfitting-lstm-models/) 可能很難確定您的長短期記憶模型是否在您的序列預測問題上表現良好。 您可能獲得了良好的模型技能分數,但重要的是要知道您的模型是否適合您的數據,或者它是不合適還是過度適應,并且可以使用不同的配置做得更好。 在本教程中,您將了解如何診斷LSTM模型在序列預測問題上的擬合程度。 完成本教程后,您將了解: * 如何收集和繪制LSTM模型的訓練歷史。 * 如何診斷身體不適,身體健康和過度模特。 * 如何通過平均多個模型運行來開發更強大的診斷。 讓我們開始吧。 ## 教程概述 本教程分為6個部分;他們是: 1. 在Keras訓練歷史 2. 診斷圖 3. Underfit示例 4. 合適的例子 5. 適合例子 6. 多次運行示例 ## 1.在Keras訓練歷史 通過查看模型的表現,您可以了解很多關于模型行為的信息。 通過調用 _fit()_函數來訓練LSTM模型。此函數返回一個名為_歷史記錄_的變量,該變量包含損失的跟蹤以及在編譯模型期間指定的任何其他指標。這些分數記錄在每個時代的末尾。 ```py ... history = model.fit(...) ``` 例如,如果編譯模型以優化對數損失( _binary_crossentropy_ )并測量每個時期的準確度,則將計算對數損失和準確度并記錄在每個訓練時期的歷史記錄中。 通過調用 _fit()_返回的歷史對象中的鍵訪問每個分數。默認情況下,在擬合模型時優化的損失稱為“_損失_”,精度稱為“ _acc_ ”。 ```py ... model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) history = model.fit(X, Y, epochs=100) print(history.history['loss']) print(history.history['acc']) ``` Keras還允許您在擬合模型時指定單獨的驗證數據集,也可以使用相同的損失和指標進行評估。 這可以通過在 _fit()_上設置 _validation_split_ 參數來使用一部分訓練數據作為驗證數據集來完成。 ```py ... history = model.fit(X, Y, epochs=100, validation_split=0.33) ``` 這也可以通過設置 _validation_data_ 參數并傳遞X和y數據集的元組來完成。 ```py ... history = model.fit(X, Y, epochs=100, validation_data=(valX, valY)) ``` 在驗證數據集上評估的度量標準使用相同的名稱進行鍵控,并帶有“ _val__ ”前綴。 ```py ... model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) history = model.fit(X, Y, epochs=100, validation_split=0.33) print(history.history['loss']) print(history.history['acc']) print(history.history['val_loss']) print(history.history['val_acc']) ``` ## 2.診斷圖 LSTM模型的訓練歷史記錄可用于診斷模型的行為。 您可以使用Matplotlib庫繪制模型的表現。例如,您可以如下繪制訓練損失與測試損失的關系: ```py from matplotlib import pyplot ... history = model.fit(X, Y, epochs=100, validation_data=(valX, valY)) pyplot.plot(history.history['loss']) pyplot.plot(history.history['val_loss']) pyplot.title('model train vs validation loss') pyplot.ylabel('loss') pyplot.xlabel('epoch') pyplot.legend(['train', 'validation'], loc='upper right') pyplot.show() ``` 創建和查看這些圖可以幫助您了解可能的新配置,以便從模型中獲得更好的表現。 接下來,我們將看一些例子。我們將考慮訓練上的模型技能和最小化損失的驗證集。您可以使用對您的問題有意義的任何指標。 ## 3.適合的例子 欠適應模型被證明在訓練數據集上表現良好而在測試數據集上表現不佳。 這可以從訓練損失低于驗證損失的圖中診斷出來,并且驗證損失具有表明可以進一步改進的趨勢。 下面提供了一個下裝LSTM模型的小例子。 ```py from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from matplotlib import pyplot from numpy import array # return training data def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # return validation data def get_val(): seq = [[0.5, 0.6], [0.6, 0.7], [0.7, 0.8], [0.8, 0.9], [0.9, 1.0]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # define model model = Sequential() model.add(LSTM(10, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # compile model model.compile(loss='mse', optimizer='adam') # fit model X,y = get_train() valX, valY = get_val() history = model.fit(X, y, epochs=100, validation_data=(valX, valY), shuffle=False) # plot train and validation loss pyplot.plot(history.history['loss']) pyplot.plot(history.history['val_loss']) pyplot.title('model train vs validation loss') pyplot.ylabel('loss') pyplot.xlabel('epoch') pyplot.legend(['train', 'validation'], loc='upper right') pyplot.show() ``` 運行此示例會生成訓練和驗證損失圖,顯示欠裝模型的特征。在這種情況下,可以通過增加訓練時期的數量來改善表現。 在這種情況下,可以通過增加訓練時期的數量來改善表現。 ![Diagnostic Line Plot Showing an Underfit Model](img/a44fa8a2bc9ae42ffdd07d835c4ab944.jpg) 顯示一個適合模型的診斷線劇情 或者,如果訓練集上的表現優于驗證集并且表現已經趨于平穩,則模型可能不合適。以下是一個例子 以下是具有不足的存儲器單元的欠裝模型的示例。 ```py from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from matplotlib import pyplot from numpy import array # return training data def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((5, 1, 1)) return X, y # return validation data def get_val(): seq = [[0.5, 0.6], [0.6, 0.7], [0.7, 0.8], [0.8, 0.9], [0.9, 1.0]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # define model model = Sequential() model.add(LSTM(1, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # compile model model.compile(loss='mae', optimizer='sgd') # fit model X,y = get_train() valX, valY = get_val() history = model.fit(X, y, epochs=300, validation_data=(valX, valY), shuffle=False) # plot train and validation loss pyplot.plot(history.history['loss']) pyplot.plot(history.history['val_loss']) pyplot.title('model train vs validation loss') pyplot.ylabel('loss') pyplot.xlabel('epoch') pyplot.legend(['train', 'validation'], loc='upper right') pyplot.show() ``` 運行此示例顯示了看似欠配置的欠裝模型的特征。 在這種情況下,可以通過增加模型的容量來改善表現,例如隱藏層中的存儲器單元的數量或隱藏層的數量。 ![Diagnostic Line Plot Showing an Underfit Model via Status](img/35ba67d586a2921fe065a177566d5c05.jpg) 通過狀態顯示適合模型的診斷線圖 ## 4.合適的例子 一個很好的擬合是模型的表現在訓練和驗證集上都很好。 這可以從訓練和驗證損失減少并在同一點附近穩定的圖中診斷出來。 下面的小例子演示了一個非常合適的LSTM模型。 ```py from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from matplotlib import pyplot from numpy import array # return training data def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((5, 1, 1)) return X, y # return validation data def get_val(): seq = [[0.5, 0.6], [0.6, 0.7], [0.7, 0.8], [0.8, 0.9], [0.9, 1.0]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # define model model = Sequential() model.add(LSTM(10, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # compile model model.compile(loss='mse', optimizer='adam') # fit model X,y = get_train() valX, valY = get_val() history = model.fit(X, y, epochs=800, validation_data=(valX, valY), shuffle=False) # plot train and validation loss pyplot.plot(history.history['loss']) pyplot.plot(history.history['val_loss']) pyplot.title('model train vs validation loss') pyplot.ylabel('loss') pyplot.xlabel('epoch') pyplot.legend(['train', 'validation'], loc='upper right') pyplot.show() ``` 運行該示例將創建一個顯示訓練和驗證丟失會議的線圖。 理想情況下,如果可能的話,我們希望看到這樣的模型表現,盡管這對于大量數據的挑戰性問題可能是不可能的。 ![Diagnostic Line Plot Showing a Good Fit for a Model](img/e71709dd650d77d229fcdc697a7fc1ef.jpg) 顯示適合模型的診斷線圖 ## 5.過度配合示例 過度擬合模型是訓練組上的表現良好并且持續改進的模型,而驗證組上的表現改善到某一點然后開始降級。 這可以從訓練損失向下傾斜并且驗證損失向下傾斜,到達拐點并且再次開始向上傾斜的圖中診斷出來。 下面的示例演示了一個過度擬合的LSTM模型。 ```py from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from matplotlib import pyplot from numpy import array # return training data def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((5, 1, 1)) return X, y # return validation data def get_val(): seq = [[0.5, 0.6], [0.6, 0.7], [0.7, 0.8], [0.8, 0.9], [0.9, 1.0]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # define model model = Sequential() model.add(LSTM(10, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # compile model model.compile(loss='mse', optimizer='adam') # fit model X,y = get_train() valX, valY = get_val() history = model.fit(X, y, epochs=1200, validation_data=(valX, valY), shuffle=False) # plot train and validation loss pyplot.plot(history.history['loss'][500:]) pyplot.plot(history.history['val_loss'][500:]) pyplot.title('model train vs validation loss') pyplot.ylabel('loss') pyplot.xlabel('epoch') pyplot.legend(['train', 'validation'], loc='upper right') pyplot.show() ``` 運行此示例會創建一個圖表,顯示過度擬合模型的驗證丟失中的特征拐點。 這可能是太多訓練時期的標志。 在這種情況下,模型訓練可以在拐點處停止。或者,可以增加訓練示例的數量。 ![Diagnostic Line Plot Showing an Overfit Model](img/55f14709ad9e7f52e68a60fca2a22d44.jpg) 顯示適合模型的診斷線劇情 ## 6.多次運行示例 LSTM是隨機的,這意味著每次運行都會獲得不同的診斷圖。 多次重復診斷運行(例如5,10或30)可能很有用。然后可以繪制來自每次運行的訓練和驗證軌跡,以更加穩健地了解模型隨時間的行為。 下面的示例在繪制每次運行的訓練跟蹤和驗證損失之前多次運行相同的實驗。 ```py from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from matplotlib import pyplot from numpy import array from pandas import DataFrame # return training data def get_train(): seq = [[0.0, 0.1], [0.1, 0.2], [0.2, 0.3], [0.3, 0.4], [0.4, 0.5]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((5, 1, 1)) return X, y # return validation data def get_val(): seq = [[0.5, 0.6], [0.6, 0.7], [0.7, 0.8], [0.8, 0.9], [0.9, 1.0]] seq = array(seq) X, y = seq[:, 0], seq[:, 1] X = X.reshape((len(X), 1, 1)) return X, y # collect data across multiple repeats train = DataFrame() val = DataFrame() for i in range(5): # define model model = Sequential() model.add(LSTM(10, input_shape=(1,1))) model.add(Dense(1, activation='linear')) # compile model model.compile(loss='mse', optimizer='adam') X,y = get_train() valX, valY = get_val() # fit model history = model.fit(X, y, epochs=300, validation_data=(valX, valY), shuffle=False) # story history train[str(i)] = history.history['loss'] val[str(i)] = history.history['val_loss'] # plot train and validation loss across multiple runs pyplot.plot(train, color='blue', label='train') pyplot.plot(val, color='orange', label='validation') pyplot.title('model train vs validation loss') pyplot.ylabel('loss') pyplot.xlabel('epoch') pyplot.show() ``` 在得到的圖中,我們可以看到欠擬合的總體趨勢在5次運行中保持不變,并且可能增加訓練時期的數量。 ![Diagnostic Line Plot Showing Multiple Runs for a Model](img/5cae28c63c17385e8be130c6a2e9ecdb.jpg) 診斷線圖顯示模型的多個運行 ## 進一步閱讀 如果您要深入了解,本節將提供有關該主題的更多資源。 * [歷史回調Keras API](https://keras.io/callbacks/#history) * [維基百科機器學習中的學習曲線](https://en.wikipedia.org/wiki/Learning_curve#In_machine_learning) * [維基百科上的過度擬合](https://en.wikipedia.org/wiki/Overfitting) ## 摘要 在本教程中,您了解了如何診斷LSTM模型在序列預測問題上的擬合。 具體來說,你學到了: * 如何收集和繪制LSTM模型的訓練歷史。 * 如何診斷身體不適,身體健康和過度模特。 * 如何通過平均多個模型運行來開發更強大的診斷。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看