Как применить градиентный спуск с затуханием скорости обучения и правилом обновления одновременно?

Я делаю эксперимент, связанный с CNN.

Я хочу реализовать градиентный спуск с уменьшением скорости обучения и правилом обновления от AlexNet.

Алгоритм, который я хочу реализовать, приведен ниже (снимок из alexnet paper):

захваченное изображение из бумаги alexnet

Я думаю, что я правильно сделал снижение скорости обучения, и код ниже (я правильно проверил снижение скорости обучения в соответствии с global_step):

learning_rate = tf.train.exponential_decay(starter_learning_rate, global_step,
100000, 0.1, staircase=True)

Затем я должен реализовать правило обновления (уменьшение веса 0,005 и импульс 0,9). Я думаю, что правильно определил импульс, но не смог найти способ реализовать уменьшение веса, код также ниже:

cross_entropy = tf.reduce_mean(
    tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits = fc8))
train_step = tf.train.MomentumOptimizer(learning_rate, 0.9).minimize(cross_entropy,global_step=global_step)

Правильно ли я делаю "снижение скорости обучения" и "импульс"? и Как я могу правильно реализовать "уменьшение веса на 0,005"?

Я использовал tf.layers.conv2d как сверточный слой, чтобы туда были включены веса и смещения. Код ниже:

conv5 = tf.layers.conv2d(
  inputs=conv4,
  filters=256,
  strides=1,
  kernel_size=[3, 3],
  kernel_initializer= tf.constant_initializer(pre_trained_model["conv5"][0]),
  bias_initializer = tf.constant_initializer(pre_trained_model["conv5"][1]),
  padding="SAME",
  activation=tf.nn.relu,name='conv5')

person LKM    schedule 23.05.2017    source источник
comment
Пожалуйста, взгляните на stackoverflow.com/a/36573850/6824418.   -  person Allen Lavoie    schedule 24.05.2017
comment
@AllenLavoie, ты можешь помочь?   -  person LKM    schedule 24.05.2017
comment
В этом случае вам, вероятно, лучше использовать l2_regularizer. , хотя вы можете просто получить переменную веса, которую создает слой.   -  person Allen Lavoie    schedule 24.05.2017
comment
@AllenLavoie Я изучу l2_regularizer, который вы предложили, спасибо. но как получить переменные веса из слоев, как я могу получить переменные? Поскольку я инициализировал веса/смещения с помощью инициализатора в каждом слое, а не с помощью tf.Variable(..., name='weights'), я не смог найти способ получить переменные в слоях.   -  person LKM    schedule 24.05.2017
comment
Я бы обернул его в variable_scope, а затем извлек из него обучаемые переменные. Предположительно, у одного будет «вес» в названии, а у другого — «предвзятость» в названии.   -  person Allen Lavoie    schedule 24.05.2017