code ci-dessous de l'unité de GRUCell
tensorflow montre les opérations typiques pour obtenir un état caché mis à jour, lorsque l'état précédent caché est fourni en même temps que l'entrée de courant dans la séquence.Explication de la cellule GRU dans Tensorflow?
def __call__(self, inputs, state, scope=None):
"""Gated recurrent unit (GRU) with nunits cells."""
with vs.variable_scope(scope or type(self).__name__): # "GRUCell"
with vs.variable_scope("Gates"): # Reset gate and update gate.
# We start with bias of 1.0 to not reset and not update.
r, u = array_ops.split(1, 2, _linear([inputs, state],
2 * self._num_units, True, 1.0))
r, u = sigmoid(r), sigmoid(u)
with vs.variable_scope("Candidate"):
c = self._activation(_linear([inputs, r * state],
self._num_units, True))
new_h = u * state + (1 - u) * c
return new_h, new_h
Mais je ne vois pas weights
et biases
ici. par exemple. je crois comprendre que l'obtention r
et u
, il faudrait à multiplier les poids et les biais avec courant d'entrée et/ou de l'état caché pour obtenir un état caché mis à jour.
J'ai écrit une unité gru comme suit:
def gru_unit(previous_hidden_state, x):
r = tf.sigmoid(tf.matmul(x, Wr) + br)
z = tf.sigmoid(tf.matmul(x, Wz) + bz)
h_ = tf.tanh(tf.matmul(x, Wx) + tf.matmul(previous_hidden_state, Wh) * r)
current_hidden_state = tf.mul((1 - z), h_) + tf.mul(previous_hidden_state, z)
return current_hidden_state
Ici je fais explicitement l'utilisation des poids et des biais Wx, Wr, Wz, Wh
br, bh, bz
, etc. soient mis à jour l'état caché. Ces poids et biais sont ce qui est appris/réglé après l'entraînement.
Comment puis-je utiliser intégré dans tensorflow GRUCell
pour obtenir le même résultat que ci-dessus?
Ils concaténer la '' r' et porte Z' de le faire en une seule fois, sauve le calcul. –