自動編碼器Gridsearch超引數調整Keras

lizz2276發表於2020-10-06

python   keras   grid-search  

溫馨提示:將滑鼠放在語句上可以顯示對應的英文。   或者   切換至中英文顯示

我的資料形狀是一樣的,我只是在這裡生成隨機數。 實際上,資料是從-6到6的浮點數,我也對它們進行了換算。 輸入層大小和編碼尺寸必須保持相同。 當我訓練時,損失開始並一直保持在0.631 。 我手動更改了學習率。 我是python的新手,不知道要實現對此程式碼的網格搜尋以找到正確的引數。 我還能做些什麼來調整我的網路?

import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
from keras import optimizers

#Train data
x_train=np.random.rand(2666000)
x_train = (train-min(train))/(max(train)-min(train))
x_train=x_train.reshape(-1,2000)

x_test=[]#empty testing later
#Enc Dimension 
encoding_dim=100
#Input shape
input_dim = Input(shape=(2000,))
#Encoding Layer
encoded = Dense(encoding_dim, activation='relu')(input_dim)
#Decoding Layer
decoded = Dense(2000, activation='sigmoid')(encoded)

#Model AE
autoencoder = Model(input_dim, decoded)
#Model Encoder 
encoder = Model(input_dim, encoded)
#Encoding
encoded_input = Input(shape=(encoding_dim,))
#Decoding 
decoder_layer = autoencoder.layers[-1]
#Model Decoder 
decoder = Model(encoded_input, decoder_layer(encoded_input))

optimizers.Adadelta(lr=0.1, rho=0.95, epsilon=None, decay=0.0)
autoencoder.compile(optimizer=optimizer, loss='binary_crossentropy', 
                metrics=['accuracy'])
#Train and test 
autoencoder_train= autoencoder.fit(x_train, x_train,
            epochs=epochs, shuffle=False, batch_size=2048)

python keras grid-search

1 個回覆

按投票數排序按時間排序

 

===============>>#1 票數:0 已採納

我建議新增更多隱藏層。 如果您的損失保持不變,則至少意味著以下兩種情況之一:

  • 您的資料或多或少是隨機的,沒有關係可以繪製

  • 您的模型不夠複雜,無法從資料中學習有意義的關係

我的經驗法則是,在進行足夠多的訓練迭代後,模型應該足夠強大以過度擬合資料。

不幸的是,在足夠複雜和過於複雜之間存在一條細線。 您必須計算隱藏層的數量,每一層中的單位數量以及訓練網路所需的時間。 由於您只有兩個Dense層,所以一個好的出發點是增加模型的複雜性。

 

如果您堅持使用網格搜尋,那麼keras有一個scikit_learn的包裝,而sklearn有一個網格搜尋模組。 一個玩具的例子:

from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import GridSearchCV

def create_model():
    <return a compiled but untrained keras model>

model = KerasClassifier(build_fn = create_model, batch_size=1000, epochs=10)
#now write out all the parameters you want to try out for the grid search
activation = ['relu', 'tanh', 'sigmoid'...]
learn_rate = [0.1, 0.2, ...]
init = ['unform', 'normal', 'zero', ...]
optimizer = ['SGD', 'Adam' ...]
param_grid = dict(activation=activation, learn_rate=learn_rate, init=init, optimizer=optimizer)
grid = GridSearchCV(estimator=model, param_grid=param_grid)
result = grid.fit(X, y)

相關文章