You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过config.yaml文件配置Keras的优化器与学习率

问题根源

你的写法报错是两个核心原因:

  1. YAML配置语法错误:learning_rate : '1e-3 缺少右侧闭合单引号,读取后格式异常;同时字符串类型的1e-3不能直接传入优化器作为学习率参数,需要转为浮点型。
  2. 调用优化器的逻辑错误:tf.keras.optimizers.OPTIMIZER 是将OPTIMIZER作为固定属性名查找,并不会读取OPTIMIZER变量存储的字符串(如SGD)来匹配对应的优化器类。

解决步骤

第一步:修正config.yaml配置

先修复语法错误,不需要给learning_rate加引号,直接写数值即可,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

第二步:修改create_model中优化器调用逻辑

两种方案二选一即可:

方案1:使用getattr动态获取优化器类

通过反射机制,用变量存储的优化器名称字符串匹配对应的优化器类,同时修正原代码中compile方法缩进错误、函数无返回值的问题:

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(),
            tf.keras.layers.Dense(100, name="hiddenlayer2"),
            tf.keras.layers.LeakyReLU(),
            tf.keras.layers.Dense(10,activation="softmax", name="outputlayer")
    ]
    # 动态获取优化器类
    optimizer_cls = getattr(tf.keras.optimizers, OPTIMIZER)
    INPUT_OPTIMIZER = optimizer_cls(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])
    return model_clf

方案2:使用Keras自带的优化器解析接口(更简洁)

tf.keras.optimizers模块内置了get()方法,支持直接传入优化器名称和配置自动生成对应实例:

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(),
            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.get({
        "class_name": OPTIMIZER,
        "config": {"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])
    return model_clf

内容的提问来源于stack exchange,提问作者thangaraj1980

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:45:04