簡體   English   中英

如何在Theano中更改共享變量的值?

[英]How to change value of a shared variable in Theano?

我定義以下類:

class test:

    def __init__(self):
        self.X = theano.tensor.dmatrix('x')
        self.W = theano.shared(value=numpy.zeros((5, 2), dtype=theano.config.floatX), name='W', borrow=True)
        self.out = theano.dot(self.X, self.W)

    def eval(self, X):
        _eval = theano.function([self.X], self.out)
        return _eval(X)

之后,我嘗試更改W矩陣的值並使用新值進行計算。 我通過以下方式進行操作:

m = test()
W = np.transpose(np.array([[1.0, 2.0, 3.0, 4.0, 5.0], [2.0, 2.0, 3.0, 3.0, 3.0]]))
dn.W = theano.shared(value=W, name='W', borrow=True)
dn.eval(X)

我得到的結果對應於__init__設置的W值(所有元素均為零)。

為什么類沒有看到初始化后我顯式設置的W的新值?

您剛剛為python變量dn.W創建了一個新的共享變量,但是theano的內部計算圖仍鏈接到舊的共享變量。

要更改存儲在現有共享變量中的值:

W = np.transpose(np.array([[1.0, 2.0, 3.0, 4.0, 5.0], [2.0, 2.0, 3.0, 3.0, 3.0]]))
dn.W.set_value(W))

注意如果要使用函數調用的結果來更新共享變量,更好的方法是使用theano.function updates參數。 如果共享變量存儲在GPU中,則可以消除不必要的內存傳輸。

暫無
暫無

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

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