自动编码器Gridsearch超参数调整Keras

    科技2023-09-30  79

    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)
    Processed: 0.011, SQL: 8