<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 在 Python 中使用 Keras 深度學習模型和 Scikit-Learn > 原文: [https://machinelearningmastery.com/use-keras-deep-learning-models-scikit-learn-python/](https://machinelearningmastery.com/use-keras-deep-learning-models-scikit-learn-python/) Keras 是用于研究和開發的 Python 中最受歡迎的深度學習庫之一,因為它簡單易用。 [scikit-learn](http://machinelearningmastery.com/a-gentle-introduction-to-scikit-learn-a-python-machine-learning-library/) 庫是 Python 中一般機器學習最受歡迎的庫。 在這篇文章中,您將了解如何使用 Keras 中的深度學習模型和 Python 中的 scikit-learn 庫。 這將允許您利用 scikit-learn 庫的功能來完成模型評估和模型超參數優化等任務。 讓我們開始吧。 * **更新**:有關使用 Keras 調整超參數的更大示例,請參閱帖子: * [如何使用 Keras 網格搜索 Python 中的深度學習模型的超參數](http://machinelearningmastery.com/grid-search-hyperparameters-deep-learning-models-python-keras/) * **2016 年 10 月更新**:更新了 Keras 1.1.0 和 scikit-learn v0.18 的示例。 * **2017 年 1 月更新**:修正了打印網格搜索結果的錯誤。 * **2017 年 3 月更新**:更新了 Keras 2.0.2,TensorFlow 1.0.1 和 Theano 0.9.0 的示例。 * **更新 Mar / 2018** :添加了備用鏈接以下載數據集,因為原始圖像已被刪除。 ![Use Keras Deep Learning Models with Scikit-Learn in Python](https://img.kancloud.cn/39/0d/390d44ecbeb24718d41f20b415670b24_640x427.png) 使用 Keras 深度學習模型與 Scikit-Learn 在 Python 照片由 [Alan Levine](https://www.flickr.com/photos/cogdog/7519589420/) ,保留一些權利。 ## 概觀 Keras 是一個用于 Python 深度學習的流行庫,但該庫的重點是深度學習。事實上,它致力于極簡主義,只關注您需要快速簡單地定義和構建深度學習模型。 Python 中的 scikit-learn 庫建立在 SciPy 堆棧之上,用于高效的數值計算。它是一個功能齊全的通用機器學習庫,提供許多有助于開發深度學習模型的實用程序。不少于: * 使用重新取樣方法(如 k-fold 交叉驗證)評估模型。 * 高效搜索和評估模型超參數。 Keras 庫為深度學習模型提供了一個方便的包裝器,可用作 scikit-learn 中的分類或回歸估計器。 在接下來的部分中,我們將介紹使用 KerasClassifier 包裝器的示例,該包裝器用于在 Keras 中創建并用于 scikit-learn 庫的分類神經網絡。 測試問題是[皮馬印第安人發病的糖尿病分類數據集](http://archive.ics.uci.edu/ml/datasets/Pima+Indians+Diabetes)。這是一個包含所有數字屬性的小型數據集,易于使用。 [下載數據集](http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data)并將其直接放在您當前正在使用的名稱 **pima-indians-diabetes.csv** (更新:[從這里下載](https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv))。 以下示例假設您已成功安裝 Keras 和 scikit-learn。 ## 使用交叉驗證評估深度學習模型 Keras 中的 KerasClassifier 和 KerasRegressor 類接受一個參數 **build_fn** ,它是要調用以獲取模型的函數的名稱。 您必須定義一個名為您定義模型的函數,編譯并返回它。 在下面的示例中,我們定義了一個函數 **create_model()**,它為問題創建了一個簡單的多層神經網絡。 我們通過 **build_fn** 參數將此函數名稱傳遞給 KerasClassifier 類。我們還傳遞了 **nb_epoch = 150** 和 **batch_size = 10** 的其他參數。它們會自動捆綁并傳遞給 **fit()**函數,該函數由 KerasClassifier 類在內部調用。 在這個例子中,我們使用 scikit-learn [StratifiedKFold](http://scikit-learn.org/stable/modules/generated/sklearn.cross_validation.StratifiedKFold.html) 來執行 10 倍分層交叉驗證。這是一種重采樣技術,可以提供對機器學習模型在看不見的數據上的表現的可靠估計。 我們使用 scikit-learn 函數 **cross_val_score()**來使用交叉驗證方案評估我們的模型并打印結果。 ```py # MLP for Pima Indians Dataset with 10-fold cross validation via sklearn from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn import KerasClassifier from sklearn.model_selection import StratifiedKFold from sklearn.model_selection import cross_val_score import numpy # Function to create model, required for KerasClassifier def create_model(): # create model model = Sequential() model.add(Dense(12, input_dim=8, activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(1, activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) return model # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) # load pima indians dataset dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") # split into input (X) and output (Y) variables X = dataset[:,0:8] Y = dataset[:,8] # create model model = KerasClassifier(build_fn=create_model, epochs=150, batch_size=10, verbose=0) # evaluate using 10-fold cross validation kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed) results = cross_val_score(model, X, Y, cv=kfold) print(results.mean()) ``` 運行該示例顯示每個迭代的模型技能。創建和評估總共 10 個模型,并顯示最終的平均精度。 ```py 0.646838691487 ``` ## 網格搜索深度學習模型參數 前面的例子展示了從 Keras 包裝深度學習模型并將其用于 scikit-learn 庫的函數是多么容易。 在這個例子中,我們更進一步。在創建 KerasClassifier 包裝器時,我們為 **build_fn** 參數指定的函數可以使用參數。我們可以使用這些參數來進一步自定義模型的構造。另外,我們知道我們可以為 **fit()**函數提供參數。 在此示例中,我們使用網格搜索來評估神經網絡模型的不同配置,并報告提供最佳估計表現的組合。 **create_model()**函數被定義為采用兩個參數 optimizer 和 init,兩者都必須具有默認值。這將允許我們評估為我們的網絡使用不同的優化算法和權重初始化方案的效果。 創建模型后,我們為要搜索的參數定義值數組,具體如下: * 用于搜索不同重量值的優化器。 * 用于使用不同方案準備網絡權重的初始化器。 * 用于訓練模型的時期,用于對訓練數據集進行不同次數的曝光。 * 用于在重量更新之前改變樣本數量的批次。 選項被指定到字典中并傳遞給 [GridSearchCV](http://scikit-learn.org/stable/modules/generated/sklearn.grid_search.GridSearchCV.html) scikit-learn 類的配置。該類將針對每個參數組合評估我們的神經網絡模型的版本(對于優化器,初始化,時期和批次的組合,2 x 3 x 3 x 3)。然后使用默認的 3 倍分層交叉驗證評估每種組合。 這是很多模型和大量的計算。這不是一個你想要輕松使用的方案,因為它需要時間。您可以使用較小的數據子集設計小型實驗,這些實驗將在合理的時間內完成。在這種情況下,這是合理的,因為網絡較小且數據集較小(少于 1000 個實例和 9 個屬性)。 最后,顯示最佳模型的表現和配置組合,然后顯示所有參數組合的表現。 ```py # MLP for Pima Indians Dataset with grid search via sklearn from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn import KerasClassifier from sklearn.model_selection import GridSearchCV import numpy # Function to create model, required for KerasClassifier def create_model(optimizer='rmsprop', init='glorot_uniform'): # create model model = Sequential() model.add(Dense(12, input_dim=8, kernel_initializer=init, activation='relu')) model.add(Dense(8, kernel_initializer=init, activation='relu')) model.add(Dense(1, kernel_initializer=init, activation='sigmoid')) # Compile model model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy']) return model # fix random seed for reproducibility seed = 7 numpy.random.seed(seed) # load pima indians dataset dataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") # split into input (X) and output (Y) variables X = dataset[:,0:8] Y = dataset[:,8] # create model model = KerasClassifier(build_fn=create_model, verbose=0) # grid search epochs, batch size and optimizer optimizers = ['rmsprop', 'adam'] init = ['glorot_uniform', 'normal', 'uniform'] epochs = [50, 100, 150] batches = [5, 10, 20] 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, Y) # summarize results print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_)) means = grid_result.cv_results_['mean_test_score'] stds = grid_result.cv_results_['std_test_score'] params = grid_result.cv_results_['params'] for mean, stdev, param in zip(means, stds, params): print("%f (%f) with: %r" % (mean, stdev, param)) ``` 在 CPU(而不是 CPU)上執行的工作站上可能需要大約 5 分鐘才能完成。運行該示例顯示以下結果。 我們可以看到,網格搜索發現使用統一初始化方案,rmsprop 優化器,150 個迭代和 5 個批量大小在此問題上實現了大約 75%的最佳交叉驗證分數。 ```py Best: 0.752604 using {'init': 'uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 150} 0.707031 (0.025315) with: {'init': 'glorot_uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 50} 0.589844 (0.147095) with: {'init': 'glorot_uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 50} 0.701823 (0.006639) with: {'init': 'normal', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 50} 0.714844 (0.019401) with: {'init': 'normal', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 50} 0.718750 (0.016573) with: {'init': 'uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 50} 0.688802 (0.032578) with: {'init': 'uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 50} 0.657552 (0.075566) with: {'init': 'glorot_uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 100} 0.696615 (0.026557) with: {'init': 'glorot_uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 100} 0.727865 (0.022402) with: {'init': 'normal', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 100} 0.736979 (0.030647) with: {'init': 'normal', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 100} 0.739583 (0.029635) with: {'init': 'uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 100} 0.717448 (0.012075) with: {'init': 'uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 100} 0.692708 (0.036690) with: {'init': 'glorot_uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 150} 0.697917 (0.028940) with: {'init': 'glorot_uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 150} 0.727865 (0.030647) with: {'init': 'normal', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 150} 0.747396 (0.016053) with: {'init': 'normal', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 150} 0.729167 (0.007366) with: {'init': 'uniform', 'optimizer': 'rmsprop', 'batch_size': 5, 'epochs': 150} 0.752604 (0.017566) with: {'init': 'uniform', 'optimizer': 'adam', 'batch_size': 5, 'epochs': 150} 0.662760 (0.035132) with: {'init': 'glorot_uniform', 'optimizer': 'rmsprop', 'batch_size': 10, 'epochs': 50} ... ``` ## 摘要 在這篇文章中,您了解了如何包裝 Keras 深度學習模型并在 scikit-learn 通用機器學習庫中使用它們。 您可以看到,使用 scikit-learn 進行標準機器學習操作(如模型評估和模型超參數優化)可以節省大量時間來自行實施這些方案。 包裝模型允許您利用 scikit 中的強大工具學習,使您的深度學習模型適合您的一般機器學習過程。 您是否有任何關于在 scikit-learn 或此帖子中使用 Keras 模型的問題?在評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看