2016-12-01 2 views
0

я определяю следующий класс:Как изменить значение общей переменной в 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) 

Результаты, которые я получаю соответствует значению W, которое было установлено в __init__ (все элементы являются нулями).

Почему класс не видит новое значение W, которое я устанавливаю явно после инициализации?

ответ

1

Вы только что создали новую общую переменную переменной python dn.W, однако внутренний графический граф anano по-прежнему связан со старой общей переменной.

Чтобы изменить значение, сохраненное в существующей общей переменной:

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)) 

ПРИМЕЧАНИЕ Если вы хотите использовать результаты от вызова функции для обновления общей переменной, лучший способ заключается в использовании updates аргумент theano.function. Это устраняет ненужную передачу памяти, если разделяемая переменная хранится в графическом процессоре.

Смежные вопросы