我需要将TF的NN转换为Keras。 除了Tensorflow中的“动量”优化器之外,这种方法非常简单。
我最好的猜测是,TF中的“动量”在Keras中为SGD。 它是否正确?
如果是这样,我应该在Keras中设置默认的hyparparameters“ lr,动量,衰减,nesterov”以匹配TF中的默认调用“ optimizer = momentum”吗?
谢谢!
要翻译的行:
network = regression(
network,
optimizer='momentum',
loss='categorical_crossentropy'
)
答案 0 :(得分:1)
您正在尝试翻译的TensorFlow代码似乎正在使用高级API TF学习。
默认情况下,TF Learn的Momentum对象使用以下值初始化:
def __init__(self, learning_rate=0.001, momentum=0.9, lr_decay=0.,
decay_step=100, staircase=False, use_locking=False,
name="Momentum"):
它也不使用内斯特罗夫动量。有关更多信息,请参见github repo。
要在Keras中翻译它,我会使用:
#define all your layers in the network variable
momentum = keras.optimizers.SGD(lr=0.001, momentum=0.9, decay=0., nesterov=False)
network.compile(loss='categorical_crossentropy', optimizer=momentum)
答案 1 :(得分:0)
查看优化器上的Keras docs。
您有两个选择:要么在编译模型时通过名称定义优化器,在这种情况下,将应用默认选项:
model.compile(loss=..., optimizer='sgd')
或者您分别实例化一个Optimizer对象,并在将其传递给model.compile()
之前指定其他选项:
from keras import optimizers
optimizer = optimizers.SGD(lr=..., momentum=...) # specify options such as momentum here
model.compile(loss=..., optimizer=optimizer)