如何在CNTK培训期间直接访问渐变和修改权重(参数)?

时间:2017-01-23 20:19:27

标签: python deep-learning cntk

我想计算渐变值(每个示例或小批量),并直接将权重修改为任何值(因此我可以使用任何方法控制渐变下降,而不仅仅是提供的sgd /学习速率计划)。 我正在使用python接口。

2 个答案:

答案 0 :(得分:1)

要获得渐变,请参阅grad方法in 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年3月左右推出。

答案 1 :(得分: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'])