Considérant l' exemple de code .
Je voudrais savoir comment appliquer l'écrêtage de gradient sur ce réseau sur le RNN où il y a une possibilité d'explosion de gradients.
tf.clip_by_value(t, clip_value_min, clip_value_max, name=None)
Ceci est un exemple qui pourrait être utilisé, mais où dois-je introduire cela? Dans la définition de RNN
lstm_cell = rnn_cell.BasicLSTMCell(n_hidden, forget_bias=1.0)
# Split data because rnn cell needs a list of inputs for the RNN inner loop
_X = tf.split(0, n_steps, _X) # n_steps
tf.clip_by_value(_X, -1, 1, name=None)
Mais cela n'a pas de sens car le tenseur _X est l'entrée et non le grad ce qui doit être écrêté?
Dois-je définir mon propre optimiseur pour cela ou existe-t-il une option plus simple?
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
et à mesure qu'une itération de l'optimiseur est effectuée,optimizer.run()
mais l'utilisationoptimizer.run()
ne semble pas fonctionner dans ce cas?