Tensorflow 七 超引數搜尋

2021-10-01 20:01:16 字數 3069 閱讀 6035

一 超引數

超引數就是每次訓練中提前設定好的值,在訓練過程不會隨著data的輸入而變化,並且會影響結果的引數。

比如:網路結構引數:層數,每層寬度,啟用函式等

訓練引數: batch_size, 學習率等

在深度學習中,超引數眾多,逐一除錯會很繁瑣,所以需要輔助可以迅速定位超引數。

二 超引數搜尋策略

超引數搜尋意思是調優超引數

1. 網格搜尋

把各種超引數離散化成幾個值,再將其組合起來。就像網格一樣,每個網格都是一種組合。

簡單的說就是暴力列舉。但是可以進行並行化計算提公升速度。

缺點是無法完全列舉所有可能解,有可能最優解在中間值。

2. 隨機搜尋

隨機生成超引數的組合,可搜尋的空間更大,但是相應的樣本規模會擴大很多。

3. 遺傳演算法搜尋

模擬自然選擇:

a) 初始化候選引數集合,訓練得到模型指標作為生存概率(準確率更高的指標會有更大的可能性被儲存下來)

b) 根據生存概率進行選擇組合

c)將組合進行變異(將某幾個值進行微調)

d)訓練得到生存概率,返回a進行迴圈

4. 啟發式搜尋(automl研究熱點)

神經網路結構搜尋。

主要思路:使用迴圈神經網路生成引數,使用強化學習進行反饋,使用模型來訓練生成引數。

5 實現隨機搜尋

手動實現:用for迴圈產生隨機,實現並行化複雜,需要重複執行多次。

可以借用sklearn庫randomizedsearchcv

1 轉化為sklearn的model

2 定義引數集合

3 搜尋引數

import matplotlib.pyplot as plt

import matplotlib as mpl

import numpy as np

import sklearn

import pandas as pd

import os

import sys

import time

import tensorflow as tf

from tensorflow import keras

from sklearn.datasets import fetch_california_housing

housing = fetch_california_housing()

from sklearn.model_selection import train_test_split

x_train_all, x_test, y_train_all, y_test = train_test_split(

housing.data, housing.target, random_state=7)

x_train, x_val, y_train, y_val = train_test_split(

x_train_all, y_train_all, random_state=11, test_size=0.25)

from sklearn.preprocessing import standardscaler

scaler = standardscaler()

x_train_scaled = scaler.fit_transform(x_train)

x_val_scaled = scaler.transform(x_val)

x_test_scaled = scaler.transform(x_test)

# 轉化為sklearn

def build_model(hidden_layers=1, layer_size=30, learning_rate=3e-3):

model = keras.models.sequential()

model.add(keras.layers.dense(30, activation='relu', input_shape=x_train.shape[1:]))

for _ in range(hidden_layers-1):

model.add(keras.layers.dense(30, activation='relu'))

model.add(keras.layers.dense(1))

optimizer = keras.optimizers.sgd(learning_rate)

model.compile(loss='mse', optimizer=optimizer)

return model

callbacks = [

keras.callbacks.earlystopping(patience=5, min_delta=1e-3)

]# 搜尋引數

from scipy.stats import reciprocal

# 根據build_model中傳入的引數進行 賦值

param_distribution =

from sklearn.model_selection import randomizedsearchcv

random_search_cv = randomizedsearchcv(sklearn_model,

param_distribution,

n_iter=10, # 從搜尋空間sample出來的組合數

n_jobs=1 # 並行處理

)random_search_cv.fit(x_train_scaled, y_train, epochs=50, validation_data=(x_val_scaled, y_val),

callbacks=callbacks)

print(random_search_cv.best_params_)

print(random_search_cv.best_score_)

print(random_search_cv.best_estimator_)

best_model = random_search_cv.best_estimator_.model

best_model.evaluate(x_test_scaled, y_test)

關於無法並行化計算的問題?

解決方案

TensorFlow筆記之常見七個引數

對tensorflow深度學習中常見引數的總結分析 神經網路中常見的引數有 初始學習率 學習率衰減率 隱藏層節點數量 迭代輪數 正則化係數 滑動平均衰減率 批訓練數量七個引數。對這七個引數,大部分情況下,神經網路的引數選優是通過實驗來調整的。乙個想法是,通過測試資料來評判引數的效果,但是這種方法會導...

引數與超引數

模型引數是模型內部的配置變數,可以用資料估計模型引數的值 模型超引數是模型外部的配置,必須手動設定引數的值。具體來講,模型引數有以下特徵 進行模型 時需要模型引數。模型引數值可以定義模型功能。模型引數用資料估計或資料學習得到。模型引數一般不由實踐者手動設定。模型引數通常作為學習模型的一部分儲存。通常...

引數與超引數

計算機學科裡有太多的術語,而且許多術語的使用並不一致。哪怕是相同的術語,不同學科的人理解一定有所不同。比如說 模型引數 model parameter 和 模型超引數 model hyperparameter 對於初學者來說,這些沒有明確定義的術語肯定很令人困惑。尤其是對於些來自統計學或經濟學領域的...