2017-01-23 3 views
1

Я хотел бы рассчитать значение градиента (на пример или мини-пакет) и изменить вес непосредственно на любое значение (так что я могу управлять градиентом спуска любым способом, а не только с предоставленным расписанием sgd/learning rate). Я использую интерфейс python.Как получить доступ к градиентам и изменить вес (параметры) непосредственно во время обучения с помощью CNTK?

+0

Добро пожаловать в StackOverflow! Возможно, вы захотите проверить [Как спросить руководство] (http://stackoverflow.com/help/how-to-ask) на несколько советов по заданию вопроса, который может получить ответы: в частности, вы уже пытались и почему это не работает. –

ответ

0

Вот tutorial, что делает такие операции:

# Ожидать некоторые партии, чтобы закончить, чтобы уменьшить шум, если EPISODE_NUMBER% BATCH_SIZE_BASELINE == 0:

grads = {W1: gradBuffer['W1'].astype(np.float32), 
     W2: gradBuffer['W2'].astype(np.float32)} 
updated = sgd.update(grads, BATCH_SIZE_BASELINE) 

# reset the gradBuffer 
gradBuffer = dict((var.name, np.zeros(shape=var.shape)) 
     for var in loss.parameters if var.name in ['W1', 'W2', 'b1', 'b2']) 
1

Чтобы получить градиент см. метод gradin the docs. Для обновления веса на данный момент вы можете использовать .value свойства:

>>> w = C.Parameter((2,3), init=C.glorot_uniform()) 
>>> w.value 
array([[-0.80213612, -0.7965923 , -0.10688281], 
     [-1.0493834 , -0.32666588, 0.90124035]], dtype=float32) 
>>> w.value = w.value + 1 
>>> w.value 
array([[ 0.19786388, 0.2034077 , 0.89311719], 
     [-0.0493834 , 0.67333412, 1.90124035]], dtype=float32) 

CNTK имеет на своей дорожную карте поддержку для легкой спецификации определенного пользователя учащихся, которые позволят сократить количество шаблонного кода вы должны написать. Ожидайте, что это будет доступно в марте 2017 года.

Смежные вопросы