У меня есть нейронная сеть с тремя скрытыми слоями, которую можно обучить «чистым» градиентным спуском или с помощью более сложных методов. Я также заметил, что в моей проблеме методы оптимизации на основе импульсов (адам, adadelta, импульс) работают намного лучше.Как отключить импульс в определенном слое в тензорном потоке?
Теперь интересная часть. По дизайну я хочу отключить импульс в первом слое NN. Это означает, что я хочу обновить весы Адамом во втором и третьем слоях, но использовать простой градиентный спуск в первом слое.
Конечно, я всегда могу написать собственный оптимизатор: рассчитать градиенты с помощью tf.gradients(loss, tf.trainable_variables())
, а затем просто сделать трюк. Но было бы неплохо иметь возможность использовать специальные параметры оптимизатора в каждом слое. Кто-нибудь слышал о том, как это сделать?
Как вы определяете слои в своей сети? – sygi
Ничего особенного, я думаю, что '' 'W_1 = tf.Variable ( tf.truncated_normal ([HIDDEN_0_SIZE, HIDDEN_1_SIZE], StdDev = 1/np.sqrt (HIDDEN_0_SIZE)), имя = 'W') b_1 = тс .Variable (tf.zeros ([HIDDEN_1_SIZE]), имя = 'б') hidden_1 = tf.matmul (activation_0_drop, W_1) + b_1 activation_1 = tf.nn.relu (hidden_1, имя = 'активации') activation_1_drop = tf.nn.dropout (activation_1, keep_prob) '' 'Не знаю, почему, markdown удаляет все новые строки :( – iezepov
Он просто не работает с комментариями, если вы редактируете сообщение, новые строки будут там :) – sygi