Как выполнить условные обновления для общих переменных в Theano?

Есть ли способ условно обновить общие переменные в зависимости от результата текущей функции. Например.

g_W = T.grad(cost=classifier.cost,wrt=classifier.W) updates=[(W,W-learning_rate*g_W)] model = theano.function([index],outputs=cost,updates=updates) 

В этой модели мне нужно обновить параметр веса, только если стоимость больше 0. В функции есть параметр no_default_updates, но он не применяется к параметру «updates».

One Solution collect form web for “Как выполнить условные обновления для общих переменных в Theano?”

Вы можете использовать условную условную операцию. У Теана есть два: switch и ifelse . switch выполняется по-разному, а ifelse работает скорее как условное условное. Дополнительную информацию см. В документации .

Вот пример, который обновляет параметры только тогда, когда стоимость положительная.

 import numpy import theano import theano.tensor as tt def compile(input_size, hidden_size, output_size, learning_rate): w_h = theano.shared(numpy.random.standard_normal((input_size, hidden_size)) .astype(theano.config.floatX), name='w_h') b_h = theano.shared(numpy.random.standard_normal((hidden_size,)) .astype(theano.config.floatX), name='b_h') w_y = theano.shared(numpy.random.standard_normal((hidden_size, output_size)) .astype(theano.config.floatX), name='w_y') b_y = theano.shared(numpy.random.standard_normal((output_size,)) .astype(theano.config.floatX), name='b_y') x = tt.matrix() z = tt.vector() h = tt.tanh(theano.dot(x, w_h) + b_h) y = theano.dot(h, w_y) + b_y c = tt.sum(y - z) updates = [(p, p - tt.switch(tt.gt(c, 0), learning_rate * tt.grad(cost=c, wrt=p), 0)) for p in (w_h, b_h, w_y, b_y)] return theano.function([x, z], outputs=c, updates=updates) def main(): f = compile(input_size=3, hidden_size=2, output_size=4, learning_rate=0.01) main() 

В этом случае можно использовать либо switch либо ifelse , но switch обычно предпочтительнее в таких случаях, потому что ifelse , по-видимому, не поддерживается так же в рамках Theano и требует специального импорта.

  • Решение системы реакции-диффузии с помощью Theano
  • Создайте общую строку в anano
  • Как назначить / обновить подмножество общей переменной тензора в Theano?
  • Theano: получить матричный размер и значение матрицы (SharedVariable)
  • pdist для тензора аана
  • theano - значение печати TensorVariable
  • Теано с Keras на малине Pi
  • Python theano.scan указывает аргумент
  • Python - лучший язык программирования в мире.