我想用keras Build 一个非线性回归模型来预测一个连续变量 . 对于以下模型,如何选择以下超参数?
-
隐藏层和神经元的数量
-
辍学率
-
是否使用BatchNormalization
-
激活函数超出线性,relu,tanh,sigmoid
-
在adam,rmsprog,sgd中使用的最佳优化器
Code
def dnn_reg():
model = Sequential()
#layer 1
model.add(Dense(40, input_dim=13, kernel_initializer='normal'))
model.add(Activation('tanh'))
model.add(Dropout(0.2))
#layer 2
model.add(Dense(30, kernel_initializer='normal'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
#layer 3
model.add(Dense(5, kernel_initializer='normal'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.4))
model.add(Dense(1, kernel_initializer='normal'))
model.add(Activation('relu'))
# Compile model
model.compile(loss='mean_squared_error', optimizer='adam')
return model
我考虑过随机网格搜索,但我想使用hyperopt,我相信会更快 . 我最初使用https://github.com/maxpumperla/hyperas实现了调优 . Hyperas不使用最新版本的keras . 我怀疑keras正在快速发展,维护者很难使其兼容 . 所以我认为直接使用hyperopt将是一个更好的选择 .
PS:我是超级参数调优和hyperopt的贝叶斯优化新手 .
2 回答
我在Hyperas上取得了很大的成功 . 以下是我学会使其发挥作用的事情 .
1)从终端(而不是从Ipython笔记本)运行它作为python脚本2)确保您的代码中没有任何注释(Hyperas不喜欢注释!)3)将数据和模型封装在一个功能如hyperas自述文件中所述 .
下面是一个适用于我的Hyperas脚本示例(按照上面的说明) .
它由不同的gc序列引起,如果先python收集会话,程序将退出成功,如果python首先收集swig内存(tf_session),程序退出失败 .
你可以通过以下方式强制python到del session:
或者如果您使用的是keras,则无法获取会话实例,您可以在代码末尾运行以下代码:
这也可以是另一种方法:
Source