如何使用 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']))