Der folgende Code der Tensorflow-Einheit GRUCell
zeigt typische Operationen, um einen aktualisierten versteckten Zustand zu erhalten, wenn der vorherige versteckte Zustand zusammen mit der aktuellen Eingabe in der Sequenz bereitgestellt wird.Erläuterung der GRU-Zelle im 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
Aber ich sehe keine weights
und biases
hier. z.B. Mein Verständnis war, dass r
und u
erfordern Gewichte und Voreingenommenheiten mit aktuellen Eingang und/oder versteckten Zustand multipliziert werden müssen, um einen aktualisierten versteckten Zustand zu erhalten.
Ich habe eine gru Einheit wie folgt geschrieben:
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
Hier habe ich ausdrücklich den Einsatz von Gewichten machen Wx, Wr, Wz, Wh
und Vorurteile br, bh, bz
usw., um versteckte Zustand aktualisiert. Diese Gewichte und Neigungen werden nach dem Training gelernt/abgestimmt.
Wie kann ich Tensorflow's eingebaute GRUCell
verwenden, um das gleiche Ergebnis wie oben zu erzielen?
Sie verketten die 'r' und' Z' Tor alles auf einmal zu tun, spart Berechnung. –