Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在CNTK训练期间直接访问梯度和修改权重(参数)?_Python_Deep Learning_Cntk - Fatal编程技术网

Python 如何在CNTK训练期间直接访问梯度和修改权重(参数)?

Python 如何在CNTK训练期间直接访问梯度和修改权重(参数)?,python,deep-learning,cntk,Python,Deep Learning,Cntk,我想计算梯度值(每个示例或小批量),并将权重直接修改为任何值(因此我可以使用任何方法控制梯度下降,而不仅仅是提供的sgd/学习速率计划)。 我正在使用python接口。以下是执行此类操作的方法: #如果事件编号%BATCH\u SIZE\u BASELINE==0,请等待某些批次完成以减少噪音: grads = {W1: gradBuffer['W1'].astype(np.float32), W2: gradBuffer['W2'].astype(np.float32)} u

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

以下是执行此类操作的方法:

#如果事件编号%BATCH\u SIZE\u 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'])

要获得梯度,请参见
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月左右提供。

欢迎使用StackOverflow!您可能想查看一下,了解一些关于提出可能得到答案的问题的技巧:特别是,了解您已经尝试过的内容以及为什么它不起作用是很重要的。