Umwelt Infogenerieren NaN wenn Gradient Berechnung
Betriebssystem: Red Hat Enterprise Linux Server Version 6.6
Tensorflow Version: 0.10.0rc0
Die installierte Version des CUDA und cuDNN: /usr/local/cuda/lib64/libcudart.so.7.5.23
Ich führe ein Modell mit temporaler Aufmerksamkeitsstrategie (https://arxiv.org/abs/1608.02927). Ich verwende tf.nn.seq2seq.sequence_loss_by_example()
, um den Verlust zu berechnen, und benutze den adam-Gradienten (lr: 0,001), um den Verlust zu minimieren. Der Verlust ist nicht NaN, aber Gradienten von einigen Gewichten wurden zu NaN-Werten. Wenn ich die Vanilla-Aufmerksamkeitsstrategie verwende, wird dieses NaN-Problem nicht auftreten.
Ich drucke sogar alle Hyperparameter aus, ihre Werte sind echte Werte, bis ihre Gradienten zu NaN werden.
Hoffe jemand kann mir helfen, dieses Problem zu beheben. Danke im Voraus.
Partial-Code
attn_vec = tf.reduce_sum(attention_states * y, [2]) # initial attention weights
if step > 0:
history = tf.pack(acc_sum)
max_hist = tf.reduce_max(attn_vec, 1, keep_dims=True)
cur_scores = tf.exp(attn_vec - max_hist)/tf.reduce_sum(tf.exp((history-max_hist)), 0) # reweight attention weights
else:
cur_scores = tf.exp(attn_vec - tf.reduce_max(attn_vec, 1, keep_dims=True))
m = cur_scores/tf.reduce_sum(cur_scores, 1, keep_dims=True)
acc_sum.append(attn_vec)
Wie initialisieren Sie die Gewichte? Wenn Sie etwas Code zur Verfügung stellen könnten, wäre es hilfreich – martianwars
Vielleicht eine noch kleinere Lernrate? –
Ich benutzte Xavier Initialisierer, und kleinere Lernrate hat nicht geholfen. – Zodiac