Я делаю эксперимент, связанный с CNN.
Я хочу реализовать градиентный спуск с уменьшением скорости обучения и правилом обновления от AlexNet.
Алгоритм, который я хочу реализовать, приведен ниже (снимок из alexnet paper):
Я думаю, что я правильно сделал снижение скорости обучения, и код ниже (я правильно проверил снижение скорости обучения в соответствии с 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')