Использование градиентного приложения и адаптивной скорости обучения в Gradient Descent Optimizer в тензорном потоке. - PullRequest
0 голосов
/ 23 сентября 2018

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

Я могу получить доступ к градиентам и применить к ним свою функцию.вот так:

batch_size = 100
y_pred = tf.nn.softmax(layer_fc2)
y_pred_cls = tf.argmax(y_pred, axis=1)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, 
logits=layer_fc2)
cost = tf.reduce_mean(cross_entropy)
batch = tf.Variable(0)

optimizer = tf.train.GradientDescentOptimizer(learning_rate = 1e-5)


params2 = [weights_conv2,weights_conv1]

gradients = tf.gradients(cost, params2)

new_gradients = do_something(gradients, session)

gradients = optimizer.apply_gradients(zip(new_gradients, 
params2),global_step=batch)

Отдельно я могу использовать адаптивную скорость обучения с моим оптимизатором так:

batch_size = 100
y_pred = tf.nn.softmax(layer_fc2)
y_pred_cls = tf.argmax(y_pred, axis=1)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, 
logits=layer_fc2)
cost = tf.reduce_mean(cross_entropy)
batch = tf.Variable(0)


train_size = data.train.labels.shape[0]
learning_rate = tf.train.exponential_decay(
      1e-5,                # Base learning rate.
      batch * batch_size,  # Current index into the dataset.
      2000,          # Decay step.
      0.95,                # Decay rate.
      staircase=True) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost, 
global_step=batch) 

Они оба работают.Но если я хочу использовать их оба одновременно с моим оптимизатором градиентного спуска, адаптивная скорость обучения не работает, а оптимизатор использует только постоянную скорость обучения.Вот как я использую их обоих вместе:

def do_something(gradssss):

    gradssss = gradssss*2
    return gradssss


batch_size = 100
y_pred = tf.nn.softmax(layer_fc2)
y_pred_cls = tf.argmax(y_pred, axis=1)
cross_entropy = tf.nn.softmax_cross_entropy_with_logits(labels=y_true, 
logits=layer_fc2)
cost = tf.reduce_mean(cross_entropy)
batch = tf.Variable(0)

train_size = data.train.labels.shape[0]
learning_rate = tf.train.exponential_decay(
      1e-5,                # Base learning rate.
      batch * batch_size,  # Current index into the dataset.
      2000,          # Decay step.
      0.95,                # Decay rate.
      staircase=True)

optimizer = tf.train.GradientDescentOptimizer(learning_rate = learning_rate)


params2 = [weights_conv2,weights_conv1]

gradients = tf.gradients(cost, params2)

new_gradients = do_something(gradients, session)

gradients = optimizer.apply_gradients(zip(new_gradients, 
params2),global_step=batch)

Я что-то здесь упускаю?Любая рекомендация очень ценится.

...