多层自编码器的网格搜索

我的模型-

# define encodervisible = Input(shape=(n_inputs,))# encoder level 1e = Dense(400)(visible)e = Dropout(0.05)(e)e = ReLU()(e)# encoder level 2e = Dense(300)(visible)e = Dropout(0.05)(e)e = ReLU()(e)# encoder level 3e = Dense(200)(visible)e = Dropout(0.05)(e)e = ReLU()(e)# encoder level 4e = Dense(100)(visible)e = Dropout(0.05)(e)e = ReLU()(e)# encoder level 4e = Dense(50)(visible)e = Dropout(0.05)(e)e = ReLU()(e)# bottleneckn_bottleneck = n_inputsbottleneck = Dense(n_bottleneck)(e)# define decoder, level 1d = Dense(50)(bottleneck)d = Dropout(0.05)(d)d = ReLU()(d)# define decoder, level 2d = Dense(100)(bottleneck)d = Dropout(0.05)(d)d = ReLU()(d)# define decoder, level 3d = Dense(200)(bottleneck)d = Dropout(0.05)(d)d = ReLU()(d)# define decoder, level 4d = Dense(300)(bottleneck)d = Dropout(0.05)(d)d = ReLU()(d)# define decoder, level 4d = Dense(400)(bottleneck)d = Dropout(0.05)(d)d = ReLU()(d)# output layeroutput = Dense(n_inputs, activation='sigmoid')(d)# define autoencoder modelmodel = Model(inputs=visible, outputs=output)# compile autoencoder modelopt = keras.optimizers.Adam(lr=0.00001)model.compile(optimizer=opt, loss='binary_crossentropy')# plot the autoencoderplot_model(model, 'drive/MyDrive/autoencoder_no_compress.png', show_shapes=True)# fit the autoencoder model to reconstruct inputhistory = model.fit(X_train_norm, X_train_norm, epochs=500, batch_size=64, verbose=2, validation_split=0.1)

如何使用网格搜索来调整我的模型?

基本的网格搜索看起来像这样-

from keras.wrappers.scikit_learn import KerasClassifierfrom sklearn.model_selection import GridSearchCVdef 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 searchactivation = ['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)

如何调整这个方法以适应我的模型用例?


回答:

这是一个调整自编码器的神经元和dropout的示例

定义模型结构:

def create_model(neurons, n_bottleneck, drop_rate):  def create_blok(x, units, drop_rate=0.05):    x = Dense(units)(x)    x = Dropout(drop_rate)(x)    x = Activation("relu")(x)    return x    visible = Input(shape=(n_inputs,))  e = create_blok(visible, int(neurons), drop_rate)  e = create_blok(e, int(neurons*3/4), drop_rate)  e = create_blok(e, int(neurons*2/4), drop_rate)  e = create_blok(e, int(neurons*1/4), drop_rate)  e = create_blok(e, int(neurons*1/(4*2)), drop_rate)  bottleneck = Dense(n_bottleneck)(e)  d = create_blok(bottleneck, int(neurons*1/(4*2)), drop_rate)  d = create_blok(d, int(neurons*1/4), drop_rate)  d = create_blok(d, int(neurons*2/4), drop_rate)  d = create_blok(d, int(neurons*3/4), drop_rate)  d = create_blok(d, int(neurons), drop_rate)  output = Dense(n_inputs, activation='sigmoid')(d)  model = Model(inputs=visible, outputs=output)  model.compile(optimizer='Adam', loss='binary_crossentropy')  return model

定义参数:

n_bottleneck = [32, 64, 128]neurons = [400, 600]drop_rate = [0.05, 0.2]param_grid = dict(neurons=neurons, n_bottleneck=n_bottleneck, drop_rate=drop_rate)param_grid

调整参数:

model = KerasRegressor(build_fn = create_model, batch_size=128, epochs=10, verbose=0)grid = GridSearchCV(estimator=model, param_grid=param_grid)result = grid.fit(X, X)

这里是正在运行的笔记本

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注