compile()
和 fit()
的用法优化器是编译 Keras 模型所需的两个参数之一
import keras
from keras import layers
model = keras.Sequential()
model.add(layers.Dense(64, kernel_initializer='uniform', input_shape=(10,)))
model.add(layers.Activation('softmax'))
opt = keras.optimizers.Adam(learning_rate=0.01)
model.compile(loss='categorical_crossentropy', optimizer=opt)
你可以先实例化一个优化器,然后再将其传递给 `model.compile()`,如上面的例子所示,或者你可以通过其字符串标识符传递它。在后一种情况下,将使用优化器的默认参数。
# pass optimizer by name: default parameters will be used
model.compile(loss='categorical_crossentropy', optimizer='adam')
你可以使用学习率调度来调整优化器的学习率随时间变化的方式
lr_schedule = keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=1e-2,
decay_steps=10000,
decay_rate=0.9)
optimizer = keras.optimizers.SGD(learning_rate=lr_schedule)
查看学习率调度 API 文档以获取可用调度的列表。
这些方法和属性是所有 Keras 优化器共有的。
Optimizer
类keras.optimizers.Optimizer()
抽象优化器基类。
如果你打算创建自己的优化算法,请继承此类并覆盖以下方法
build
: 创建与优化器相关的变量,例如 SGD 优化器中的动量变量。update_step
: 实现优化器的变量更新逻辑。get_config
: 优化器的序列化。示例
class SGD(Optimizer):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.momentum = 0.9
def build(self, variables):
super().build(variables)
self.momentums = []
for variable in variables:
self.momentums.append(
self.add_variable_from_reference(
reference_variable=variable, name="momentum"
)
)
def update_step(self, gradient, variable, learning_rate):
learning_rate = ops.cast(learning_rate, variable.dtype)
gradient = ops.cast(gradient, variable.dtype)
m = self.momentums[self._get_variable_index(variable)]
self.assign(
m,
ops.subtract(
ops.multiply(m, ops.cast(self.momentum, variable.dtype)),
ops.multiply(gradient, learning_rate),
),
)
self.assign_add(variable, m)
def get_config(self):
config = super().get_config()
config.update(
{
"momentum": self.momentum,
"nesterov": self.nesterov,
}
)
return config
apply_gradients
方法Optimizer.apply_gradients(grads_and_vars)
variables
属性keras.optimizers.Optimizer.variables