我正在借助包含超参数的config.json
文件调整keras
深度学习模型的超参数。
{ “opt: “Adam”,
“lr”: 0.01,
“grad_clip”: 0.5
}
Keras允许以两种方式指定优化器:
1.作为对函数的调用中的字符串参数,不带其他参数。
model.compile(loss='categorical_crossentropy’,
optimizer=’Adam’,
metrics=['mse'])
1.作为具有附加参数的同名函数。
model.compile(loss='categorical_crossentropy',
optimizer=optimizers.Adam(lr=0.01, clipvalue=0.5),
metrics=['mse'])
我的问题是:如何将优化器(SGD、Adam等)作为配置文件中的参数与子参数一起传递,并像(2)中那样使用keras.optimizers.optimizer()
函数调用?
from keras.models import Sequential
from keras.layers import LSTM, Dense, TimeDistributed, Bidirectional
from keras import optimizers
def train(X,y, opt, lr, clip):
model = Sequential()
model.add(Bidirectional(LSTM(100, return_sequences=True), input_shape=(500, 300)))
model.add(TimeDistributed(Dense(5, activation='sigmoid')))
model.compile(loss='categorical_crossentropy',
optimizer=optimizers.opt(lr=lr, clipvalue=clip),
metrics=['mse'])
model.fit(X, y, epochs=100, batch_size=1, verbose=2)
return(model)
当我尝试将参数从配置文件传递到上面的train()
函数时,我得到了以下错误:
AttributeError: module 'keras.optimizers' has no attribute 'opt'
如何将字符串中的优化器作为函数进行解析?
4条答案
按热度按时间gg0vcinb1#
至少在tensorflow 2.11版本中,有一个函数可以通过名字获取优化器并传递参数。https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/get.
为了简短起见,下面是一个最小的用法示例:
bq9c1y662#
您可以使用一个类来构造优化器,如下所示:
那么你可以称之为
2w3rbyxf3#
您可以初始化包含优化器初始化的json配置文件:例如:
然后,您可以使用以下代码行从配置中解析它:
在数据结构中,您将找到优化器的参数设置:
毕竟,您可以访问所选优化器的所有参数:
另一种方法是仅使用配置文件访问优化程序的配置。使用Keras,您可以使用优化程序调度程序,使用从配置文件中选择的特定优化程序来编译神经网络:
请记住keras优化器的名称应该与配置文件中的名称相同。
cvxl0en24#
确保您的
csl
对象(配置对象)的键实际上与这些类的参数匹配,然后,下面的代码将创建优化器对象,从配置对象中搜索适当的参数,并将它们传递给它