J'ai écrit un code pour concevoir un réseau de mémoire à court terme dans Tensorflow. Le code a fonctionné après que j'ai fait beaucoup de changements et ai lu quelques commentaires dans ce site Web. Cette partie du code est important d'expliquer:Explication de la variable de réutilisation pour le réseau lstm dans tensorflow
tf.reset_default_graph()
with tf.variable_scope("conv1"):
cell= tf.contrib.rnn.LSTMCell(n_hidden_units, forget_bias=0.0, state_is_tuple=True,reuse=tf.get_variable_scope().reuse)
outputs, final_state = tf.nn.dynamic_rnn(cell, X_in, initial_state=init_state, time_major=False,scope="conv1")
La parcelle de fonction los est toujours comme ça: enter image description here.
Où, à un moment donné, la fonction de perte d'entraînement diminue et la fonction de perte de validation augmente. Je pense que ça ne doit pas être comme ça. Je voudrais demander si la réutilisation de la variable est juste dans mon code? et si vous avez une idée de ce qui ne va pas avec le graphique de la fonction de perte?
Merci d'avance.
Edit:
Je pensais que je devrais poster mon code, il sera donc plus facile à comprendre parce que je ne peux pas trouver une solution:
tf.reset_default_graph()
x = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.float32, [None, n_classes])
weights = {
# (147, 128),tf.random_normal_initializer(mean=0.0, stddev=0.1)
'in': tf.get_variable('W_in',shape=[n_inputs, n_hidden_units],initializer=tf.truncated_normal_initializer(stddev=0.5)),
# (128, 5)
'out': tf.get_variable('W_out',shape=[n_hidden_units, n_classes],initializer=tf.truncated_normal_initializer(stddev=0.5))}
biases = {
# (128,)
'in': tf.get_variable('b_in',shape=[n_hidden_units, ],initializer=tf.random_normal_initializer(stddev=0.5)),
# (5,)
'out': tf.get_variable('b_out', shape=[n_classes, ],initializer=tf.random_normal_initializer(stddev=0.5))}
def lstm_cell():
return tf.contrib.rnn.BasicLSTMCell(n_hidden_units, forget_bias=0.0, state_is_tuple=True,reuse=tf.get_variable_scope().reuse)
def RNN(X, weights, biases):
X = tf.reshape(X, [-1, n_inputs])
X_in = tf.nn.tanh(tf.matmul(X, weights['in']) + biases['in'])
X_in=tf.nn.dropout(X_in,keep_prob=0.5)
X_in = tf.reshape(X_in, [-1, n_steps, n_hidden_units])
with tf.variable_scope("conv1"):
cell = lstm_cell()
cell = tf.contrib.rnn.DropoutWrapper(cell, output_keep_prob=0.5)
init_state = cell.zero_state(tf.shape(X_in)[0], dtype=tf.float32)
outputs, final_state = tf.nn.dynamic_rnn(cell, X_in, initial_state=init_state, time_major=False,scope="conv1")
outputs = tf.unstack(tf.transpose(outputs, [1,0,2]))
results = tf.matmul(outputs[-1], weights['out']) + biases['out']
return results
pred = RNN(x, weights, biases)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred, labels=y))
train_op = tf.train.AdamOptimizer(0.0025).minimize(cost)
J'ai essayé différents nombres de neurones mais le tracé est le même. J'ai essayé l'abandon avec la propabilité égale à 0.5 et l'intrigue précédente est le résultat. – mahmood227