Как выполнить условные обновления для общих переменных в 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 распараллелить операцию на GPU (тестовый пример: numpy.bincount)
  • Как получить воспроизводимые результаты в керасе
  • Пользовательский Theano Op для численной интеграции
  • Передача математических операций с помощью PYMC3 / Theano
  • Ошибка импорта Keras Nadam
  • Установка Theano на EPD (Windows x64)
  • Теано с Keras на малине Pi
  • ПРЕДУПРЕЖДЕНИЕ (theano.sandbox.cuda): CUDA установлен, но устройство gpu недоступно (ошибка: cuda недоступна)
  • Использование PYMC3 в Windows 10 - theano не может импортировать имя 'floatX'
  • theano - значение печати TensorVariable
  • Python - лучший язык программирования в мире.