欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費(fèi)注冊(cè)]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>數(shù)值算法/人工智能>

超參數(shù)優(yōu)化是深度學(xué)習(xí)中的重要組成部分

大?。?/span>0.3 MB 人氣: 2017-09-30 需要積分:1
參數(shù)優(yōu)化是深度學(xué)習(xí)中的重要組成部分。其原因在于,神經(jīng)網(wǎng)絡(luò)是公認(rèn)的難以配置,而又有很多參數(shù)需要設(shè)置。最重要的是,個(gè)別模型的訓(xùn)練非常緩慢。
在這篇文章中,你會(huì)了解到如何使用scikit-learn python機(jī)器學(xué)習(xí)庫中的網(wǎng)格搜索功能調(diào)整Keras深度學(xué)習(xí)模型中的超參數(shù)。
閱讀本文后,你就會(huì)了解:
如何包裝Keras模型以便在scikit-learn中使用,以及如何使用網(wǎng)格搜索。如何網(wǎng)格搜索常見的神經(jīng)網(wǎng)絡(luò)參數(shù),如學(xué)習(xí)速率、 dropout 率、epochs 和神經(jīng)元數(shù)量。如何設(shè)計(jì)自己的超參數(shù)優(yōu)化實(shí)驗(yàn)。
概述
本文主要想為大家介紹如何使用scikit-learn網(wǎng)格搜索功能,并給出一套代碼實(shí)例。你可以將代碼復(fù)制粘貼到自己的項(xiàng)目中,作為項(xiàng)目起始。
下文所涉及的議題列表:
如何在scikit-learn模型中使用Keras。如何在scikit-learn模型中使用網(wǎng)格搜索。如何調(diào)優(yōu)批尺寸和訓(xùn)練epochs。如何調(diào)優(yōu)優(yōu)化算法。如何調(diào)優(yōu)學(xué)習(xí)率和動(dòng)量因子。如何確定網(wǎng)絡(luò)權(quán)值初始值。如何選擇神經(jīng)元激活函數(shù)。如何調(diào)優(yōu)Dropout正則化。如何確定隱藏層中的神經(jīng)元的數(shù)量。
如何在scikit-learn模型中使用Keras
通過用KerasClassifier或KerasRegressor類包裝Keras模型,可將其用于scikit-learn。
要使用這些包裝,必須定義一個(gè)函數(shù),以便按順序模式創(chuàng)建并返回Keras,然后當(dāng)構(gòu)建KerasClassifier類時(shí),把該函數(shù)傳遞給build_fn參數(shù)。
例如:
defcreate_model():... returnmodel model = KerasClassifier(build_fn=create_model)
KerasClassifier類的構(gòu)建器為可以采取默認(rèn)參數(shù),并將其被傳遞給model.fit()的調(diào)用函數(shù),比如 epochs數(shù)目和批尺寸(batch size)。
例如:
defcreate_model():... returnmodel model = KerasClassifier(build_fn=create_model, nb_epoch=10)
KerasClassifier類的構(gòu)造也可以使用新的參數(shù),使之能夠傳遞給自定義的create_model()函數(shù)。這些新的參數(shù),也必須由使用默認(rèn)參數(shù)的 create_model() 函數(shù)的簽名定義。
例如:
defcreate_model(dropout_rate=0.0):... returnmodel model = KerasClassifier(build_fn=create_model, dropout_rate=0.2)
您可以在Keras API文檔中,了解到更多關(guān)于scikit-learn包裝器的知識(shí)。
如何在scikit-learn模型中使用網(wǎng)格搜索
網(wǎng)格搜索(grid search)是一項(xiàng)模型超參數(shù)優(yōu)化技術(shù)。
在scikit-learn中,該技術(shù)由GridSearchCV類提供。
當(dāng)構(gòu)造該類時(shí),你必須提供超參數(shù)字典,以便用來評(píng)價(jià)param_grid參數(shù)。這是模型參數(shù)名稱和大量列值的示意圖。
默認(rèn)情況下,精確度是優(yōu)化的核心,但其他核心可指定用于GridSearchCV構(gòu)造函數(shù)的score參數(shù)。
默認(rèn)情況下,網(wǎng)格搜索只使用一個(gè)線程。在GridSearchCV構(gòu)造函數(shù)中,通過將 n_jobs參數(shù)設(shè)置為-1,則進(jìn)程將使用計(jì)算機(jī)上的所有內(nèi)核。這取決于你的Keras后端,并可能干擾主神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程。
當(dāng)構(gòu)造并評(píng)估一個(gè)模型中各個(gè)參數(shù)的組合時(shí),GridSearchCV會(huì)起作用。使用交叉驗(yàn)證評(píng)估每個(gè)單個(gè)模型,且默認(rèn)使用3層交叉驗(yàn)證,盡管通過將cv參數(shù)指定給 GridSearchCV構(gòu)造函數(shù)時(shí),有可能將其覆蓋。
下面是定義一個(gè)簡(jiǎn)單的網(wǎng)格搜索示例:
param_grid = dict(nb_epochs=[10,20,30])grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)grid_result = grid.fit(X, Y)
一旦完成,你可以訪問網(wǎng)格搜索的輸出,該輸出來自結(jié)果對(duì)象,由grid.fit()返回。best_score_成員提供優(yōu)化過程期間觀察到的最好的評(píng)分, best_params_描述了已取得最佳結(jié)果的參數(shù)的組合。
您可以在scikit-learn API文檔中了解更多關(guān)于GridSearchCV類的知識(shí)。
問題描述
現(xiàn)在我們知道了如何使用scikit-learn 的Keras模型,如何使用scikit-learn 的網(wǎng)格搜索?,F(xiàn)在一起看看下面的例子。
所有的例子都將在一個(gè)小型的標(biāo)準(zhǔn)機(jī)器學(xué)習(xí)數(shù)據(jù)集上來演示,該數(shù)據(jù)集被稱為Pima Indians onset of diabetes 分類數(shù)據(jù)集。該小型數(shù)據(jù)集包括了所有容易工作的數(shù)值屬性。
下載數(shù)據(jù)集,并把它放置在你目前工作目錄下,命名為:pima-indians-diabetes.csv。
當(dāng)我們按照本文中的例子進(jìn)行,能夠獲得最佳參數(shù)。因?yàn)閰?shù)可相互影響,所以這不是網(wǎng)格搜索的最佳方法,但出于演示目的,它是很好的方法。
注意并行化網(wǎng)格搜索
所有示例的配置為了實(shí)現(xiàn)并行化(n_jobs=-1)。
如果顯示像下面這樣的錯(cuò)誤:
INFO (theano.gof.compilelock): Waiting forexisting lock by process '55614'(I am process '55613') INFO (theano.gof.compilelock): To manually release the lock, delete ...
結(jié)束進(jìn)程,并修改代碼,以便不并行地執(zhí)行網(wǎng)格搜索,設(shè)置n_jobs=1。
如何調(diào)優(yōu)批尺寸和訓(xùn)練epochs
在第一個(gè)簡(jiǎn)單的例子中,當(dāng)調(diào)整網(wǎng)絡(luò)時(shí),我們著眼于調(diào)整批尺寸和訓(xùn)練epochs。
迭代梯度下降的批尺寸大小是權(quán)重更新之前顯示給網(wǎng)絡(luò)的模式數(shù)量。它也是在網(wǎng)絡(luò)訓(xùn)練的優(yōu)選法,定義一次讀取的模式數(shù)并保持在內(nèi)存中。
訓(xùn)練epochs是訓(xùn)練期間整個(gè)訓(xùn)練數(shù)據(jù)集顯示給網(wǎng)絡(luò)的次數(shù)。有些網(wǎng)絡(luò)對(duì)批尺寸大小敏感,如LSTM復(fù)發(fā)性神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)。
在這里,我們將以20的步長(zhǎng),從10到100逐步評(píng)估不同的微型批尺寸。
完整代碼如下:
# Use scikit-learn to grid search the batch size and epochsimportnumpy fromsklearn.grid_search importGridSearchCV fromkeras.models importSequential fromkeras.layers importDense fromkeras.wrappers.scikit_learn importKerasClassifier # Function to create model, required for KerasClassifierdefcreate_model():# create modelmodel = Sequential() model.add(Dense(12, input_dim=8, activation='relu')) model.add(Dense(1, activation='sigmoid')) # Compile modelmodel.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) returnmodel # fix random seed for reproducibilityseed = 7numpy.random.seed(seed) # load datasetdataset = numpy.loadtxt("pima-indians-diabetes.csv", delimiter=",") # split into input (X) and output (Y) variablesX = dataset[:,0:8] Y = dataset[:,8] # create modelmodel = KerasClassifier(build_fn=create_model, verbose=0) # define the grid search parametersbatch_size = [10, 20, 40, 60, 80, 100] epochs = [10, 50, 100] param_grid = dict(batch_size=batch_size, nb_epoch=epochs) grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1) grid_result = grid.fit(X, Y) # summarize resultsprint("Best: %f using %s"% (grid_result.best_score_, grid_result.best_params_)) forparams, mean_score, scores ingrid_result.grid_scores_: print("%f (%f) with: %r"% (scores.mean(), scores.std(), params))
運(yùn)行之后輸出如下:
Best: 0.686198using{'nb_epoch': 100, 'batch_size': 20} 0.348958(0.024774) with: {'nb_epoch': 10, 'batch_size': 10} 0.348958(0.024774) with: {'nb_epoch': 50, 'batch_size': 10} 0.466146(0.149269) with: {'nb_epoch': 100, 'batch_size': 10} 0.647135(0.021236) with: {'nb_epoch': 10, 'batch_size': 20} 0.660156(0.014616) with: {'nb_epoch': 50, 'batch_size': 20} 0.686198(0.024774) with: {'nb_epoch': 100, 'batch_size': 20} 0.489583(0.075566) with: {'nb_epoch': 10, 'batch_size': 40} 0.652344(0.019918) with: {'nb_epoch': 50, 'batch_size': 40} 0.654948(0.027866) with: {'nb_epoch': 100, 'batch_size': 40} 0.518229(0.032264) with: {'nb_epoch': 10, 'batch_size': 60} 0.605469(0.052213) with: {'nb_epoch': 50, 'batch_size': 60} 0.665365(0.004872) with: {'nb_epoch': 100, 'batch_size': 60} 0.537760(0.143537) with: {'nb_epoch': 10, 'batch_size': 80} 0.591146(0.094954) with: {'nb_epoch': 50, 'batch_size': 80} 0.658854(0.054904) with: {'nb_epoch': 100, 'batch_size': 80} 0.402344(0.107735) with: {'nb_epoch': 10, 'batch_size': 100} 0.652344(0.033299) with: {'nb_epoch': 50, 'batch_size': 100} 0.542969(0.157934) with: {'nb_epoch': 100, 'batch_size': 100}
我們可以看到,批尺寸為20、100 epochs能夠獲得最好的結(jié)果,精確度約68%。
如何調(diào)優(yōu)訓(xùn)練優(yōu)化算法
Keras提供了一套最先進(jìn)的不同的優(yōu)化算法。
在這個(gè)例子中,我們調(diào)整用來訓(xùn)練網(wǎng)絡(luò)的優(yōu)化算法,每個(gè)都用默認(rèn)參數(shù)。
這個(gè)例子有點(diǎn)奇怪,因?yàn)橥銜?huì)先選擇一種方法,而不是將重點(diǎn)放在調(diào)整問題參數(shù)上(參見下一個(gè)示例)。
在這里,我們將評(píng)估Keras API支持的整套優(yōu)化算法。
完整代碼如下:

非常好我支持^.^

(0) 0%

不好我反對(duì)

(0) 0%

      發(fā)表評(píng)論

      用戶評(píng)論
      評(píng)價(jià):好評(píng)中評(píng)差評(píng)

      發(fā)表評(píng)論,獲取積分! 請(qǐng)遵守相關(guān)規(guī)定!

      ?