簡體   English   中英

如何在使用 CNTK 訓練期間直接訪問梯度和修改權重(參數)?

[英]How to access gradients and modify weights (parameters) directly during training with CNTK?

我想計算梯度值(每個示例或小批量),並將權重直接修改為任何值(因此我可以使用任何方法控制梯度下降,而不僅僅是提供的 sgd/學習率計划)。 我正在使用 python 接口。

要獲得漸變,請參閱文檔中grad方法。 .value更新權重,您可以使用.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 月左右推出。

這是執行此類操作的教程

# 如果 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'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM