我想计算梯度值(每个示例或小批量),并将权重直接修改为任何值(因此我可以用任何方法控制梯度下降,而不仅仅是提供的 sgd / 学习率计划)。我正在使用python接口。
问问题
437 次
2 回答
1
要获得渐变,请参阅文档中grad
的方法。要暂时更新权重,您可以使用该属性:.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 月左右推出。
于 2017-01-24T20:21:23.593 回答
0
这是执行此类操作的教程:
# 如果 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'])
于 2017-01-23T21:36:54.923 回答