如何使用 config.yaml 文件配置 Keras 优化器和学习率?
How to configure the Keras Optimizer and Learning rate using config.yaml file?
我在 config.yaml 中定义了几个参数,如下所示。
params:
epochs: 10
batch_size: 128
num_classes: 10
loss_function: sparse_categorical_crossentropy
metrics: accuracy
optimizer: SGD
validation_datasize: 5000
learning_rate : '1e-3
现在我在我的 main 中调用相同的。 py如下。
config = read_config(config_path)
# Create the model
LOSS_FUNCTION = config["params"]["loss_function"]
OPTIMIZER = config["params"]["optimizer"]
LEARNING_RATE = config["params"]["learning_rate"]
METRICS = config["params"]["metrics"]
model = create_model(LOSS_FUNCTION, OPTIMIZER, METRICS,LEARNING_RATE)
在我的创建模型函数中,如果我使用以下方式代码失败。
def create_model(LOSS_FUNCTION, OPTIMIZER, METRICS,LEARNING_RATE):
LAYERS = [
tf.keras.layers.Flatten(input_shape=[28,28], name="inputlayer"),
tf.keras.layers.Dense(300, name="hiddenlayer1"),
tf.keras.layers.LeakyReLU(), ## alternative way
tf.keras.layers.Dense(100, name="hiddenlayer2"),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(10,activation="softmax", name="outputlayer")
]
INPUT_OPTIMIZER = tf.keras.optimizers.OPTIMIZER(learning_rate=LEARNING_RATE)
model_clf = tf.keras.models.Sequential(LAYERS)
model_clf.summary()
model_clf.compile(loss=LOSS_FUNCTION,
optimizer=INPUT_OPTIMIZER,
metrics=[METRICS])
'
所以必须再一次手动定义和替换。'
INPUT_OPTIMIZER = tf.keras.optimizers.SGD(learning_rate=1e-3)
model_clf = tf.keras.models.Sequential(LAYERS)
model_clf.summary()
model_clf.compile(loss=LOSS_FUNCTION,
optimizer=INPUT_OPTIMIZER,
metrics=[METRICS])
如何配置以采用 config.yaml 定义的优化器值?。谢谢
我想你可以用 optimizers.deserialize
你必须遵循这个格式。
{'class_name': 'RMSprop',
'config': {'name': 'RMSprop',
'learning_rate': 0.001,
'decay': 0.0,
'rho': 0.9,
'momentum': 0.0,
'epsilon': 1e-07,
'centered': False}}
我从 optimizers.serialize
得到这个输出
请注意 optimizers.serialize
输出 JSON,但您仍然可以使用 YAML
作为用例示例,您可以像这样在配置文件中为优化器创建一个对象
optimizer:
class_name: RMSprop
config:
learning_rate: 0.001
然后像这样在你的代码中使用它
model_train.compile(optimizer=optimizers.deserialize(config['optimizer']))
我在 config.yaml 中定义了几个参数,如下所示。
params:
epochs: 10
batch_size: 128
num_classes: 10
loss_function: sparse_categorical_crossentropy
metrics: accuracy
optimizer: SGD
validation_datasize: 5000
learning_rate : '1e-3
现在我在我的 main 中调用相同的。 py如下。
config = read_config(config_path)
# Create the model
LOSS_FUNCTION = config["params"]["loss_function"]
OPTIMIZER = config["params"]["optimizer"]
LEARNING_RATE = config["params"]["learning_rate"]
METRICS = config["params"]["metrics"]
model = create_model(LOSS_FUNCTION, OPTIMIZER, METRICS,LEARNING_RATE)
在我的创建模型函数中,如果我使用以下方式代码失败。
def create_model(LOSS_FUNCTION, OPTIMIZER, METRICS,LEARNING_RATE):
LAYERS = [
tf.keras.layers.Flatten(input_shape=[28,28], name="inputlayer"),
tf.keras.layers.Dense(300, name="hiddenlayer1"),
tf.keras.layers.LeakyReLU(), ## alternative way
tf.keras.layers.Dense(100, name="hiddenlayer2"),
tf.keras.layers.LeakyReLU(),
tf.keras.layers.Dense(10,activation="softmax", name="outputlayer")
]
INPUT_OPTIMIZER = tf.keras.optimizers.OPTIMIZER(learning_rate=LEARNING_RATE)
model_clf = tf.keras.models.Sequential(LAYERS)
model_clf.summary()
model_clf.compile(loss=LOSS_FUNCTION,
optimizer=INPUT_OPTIMIZER,
metrics=[METRICS])
' 所以必须再一次手动定义和替换。'
INPUT_OPTIMIZER = tf.keras.optimizers.SGD(learning_rate=1e-3)
model_clf = tf.keras.models.Sequential(LAYERS)
model_clf.summary()
model_clf.compile(loss=LOSS_FUNCTION,
optimizer=INPUT_OPTIMIZER,
metrics=[METRICS])
如何配置以采用 config.yaml 定义的优化器值?。谢谢
我想你可以用 optimizers.deserialize
你必须遵循这个格式。
{'class_name': 'RMSprop',
'config': {'name': 'RMSprop',
'learning_rate': 0.001,
'decay': 0.0,
'rho': 0.9,
'momentum': 0.0,
'epsilon': 1e-07,
'centered': False}}
我从 optimizers.serialize
请注意 optimizers.serialize
输出 JSON,但您仍然可以使用 YAML
作为用例示例,您可以像这样在配置文件中为优化器创建一个对象
optimizer:
class_name: RMSprop
config:
learning_rate: 0.001
然后像这样在你的代码中使用它
model_train.compile(optimizer=optimizers.deserialize(config['optimizer']))