我想将一个预培训的千层面(Theano)模型转换为Keras(Tensorflow)模型,因此所有层都需要具有完全相同的配置。从这两份文件中,我不清楚参数是如何对应的。让我们假设一个千层面
BatchNormLayer
使用默认设置:
class lasagne.layers.BatchNormLayer(incoming, axes='auto', epsilon=1e-4, alpha=0.1, beta=lasagne.init.Constant(0), gamma=lasagne.init.Constant(1), mean=lasagne.init.Constant(0), inv_std=lasagne.init.Constant(1), **kwargs)
这是
Keras BatchNormalization
层API:
keras.layers.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros', gamma_initializer='ones', moving_mean_initializer='zeros', moving_variance_initializer='ones', beta_regularizer=None, gamma_regularizer=None, beta_constraint=None, gamma_constraint=None)
大部分都很清楚,因此我将在此处提供相应的参数,以供将来参考:
(Lasagne -> Keras)
incoming -> (not needed, automatic)
axes -> axis
epsilon -> epsilon
alpha -> ?
beta -> beta_initializer
gamma -> gamma_initializer
mean -> moving_mean_initializer
inv_std -> moving_variance_initializer
? -> momentum
? -> center
? -> scale
? -> beta_regularizer
? -> gamma_regularizer
? -> beta_constraint
? -> gamma_constraint
我假设千层面根本不支持beta\u正则化器、gamma\u正则化器、beta\u约束和gamma\u约束,因此Keras中的默认值None是正确的。我还假设在千层面中心和秤总是打开,不能关闭。
剩下的是烤宽面条alpha和Keras momentum。从
Lasagne documentation
对于alpha:
训练期间计算的批量平均值和标准偏差的指数移动平均值系数;越接近一个,就越取决于最后看到的批次
从
Keras documentation
对于动量:
移动平均值和移动方差的动量。
它们似乎是对应的——但用哪个公式呢?