优化器(optimizer)是编译Keras模型的所需的两个参数之一:
from keras import optimizers
model = Sequential()
model.add(Dense(64, kernel_initializer='uniform', input_shape=(10,)))
model.add(Activation('tanh'))
model.add(Activation('softmax'))
# 你可以先实例化一个优化器对象,然后将它传入model.compile()
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer=sgd)
# 或者你可以通过名称来调用优化器。在后一种情况下,将使用优化器的默认参数。
# 传入优化器名称: 默认参数将被采用
model.compile(loss='mean_squared_error', optimizer='sgd')
参数clipnorm
和clipvalue
能在所有的优化器中使用,用于控制梯度裁剪(Gradient Clipping):
# Gradient Clipping可以理解为:gradient过大时把它降一点,比如取其一半;梯度过小时把它放大一点,比如取其1.5倍
from keras import optimizers
# 所有参数梯度将被裁剪,让其l2范数最大为1:g * 1 / max(1, l2_norm)
sgd = optimizers.SGD(lr=0.01, clipnorm=1.)
from keras import optimizers
# 所有参数d 梯度将被裁剪到数值范围内:
# 最大值0.5
# 最小值-0.5
sgd = optimizers.SGD(lr=0.01, clipvalue=0.5)
原文:https://www.cnblogs.com/LS1314/p/10380634.html