【发布时间】:2020-03-14 05:25:17
【问题描述】:
我正在借助包含超参数的 config.json 文件调整 keras 深度学习模型的超参数。
{ “opt: “Adam”,
“lr”: 0.01,
“grad_clip”: 0.5
}
Keras 允许通过两种方式指定优化器:
- 在调用函数时作为字符串参数,不带附加参数。
model.compile(loss='categorical_crossentropy’,
optimizer=’Adam’,
metrics=['mse'])
- 作为带有附加参数的同名函数。
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'
如何将字符串中的优化器解析为函数?
【问题讨论】:
-
您的最新编辑应该可以修复您在问题底部提出的错误。您现在遇到什么错误(如果有的话)?
-
我在重新运行代码后更新了错误。它与我在问题中提出的问题更直接相关:如何将字符串解析为属性?
标签: python optimization keras deep-learning parameter-passing