في TensorFlow، هناك طريقة أفضل لحفظ حالة RNNs بين الدفعات (batches) دون الحاجة إلى تقييم الحالة المحفوظة في كل تشغيل (run) ونسخ الحالة من الذاكرة GPU إلى الذاكرة الرئيسية (host memory). يمكنك استخدام tf.contrib.rnn.LSTMStateTuple
لتمثيل حالة LSTM، وتحديث حالة الطبقة الأولى من RNN لتحمل الحالة المحفوظة من الدفعة السابقة.
الخطوات الرئيسية لحفظ الحالة بين الدفعات هي:
- إنشاء متغير TensorFlow لتمثيل الحالة المحفوظة
saved_state
. - تحديث الحالة المحفوظة
saved_state
بعد كل دفعة باستخدامtf.assign
. - في كل دفعة، استخدام الحالة المحفوظة
saved_state
لتحديث حالة RNN الحالية.
اليك كود مثالي لتحقيق هذا:
python# إنشاء متغير TensorFlow لتمثيل الحالة المحفوظة saved_state
saved_state = tf.Variable(tf.zeros((BATCH_SIZE, sz)), trainable=False)
# في كل دفعة، استخدام الحالة المحفوظة saved_state لتحديث حالة RNN الحالية
for r in range(RNNS):
with tf.variable_scope('recurent_%d' % r) as scope:
rnn_outputs[r], state = rnn_func(rnn_outputs[r - 1], saved_state)
# تحديث الحالة المحفوظة saved_state بعد كل دفعة
saved_state = tf.assign(saved_state, state)
باستخدام هذه الطريقة، لن تحتاج إلى تقييم الحالة المحفوظة في كل تشغيل، بل سيتم تحديثها تلقائيًا بعد كل دفعة.
المزيد من المعلومات
بالتأكيد، في TensorFlow، يمكنك استخدام tf.contrib.rnn.LSTMStateTuple
لتمثيل حالة LSTM، ويمكنك تحديث حالة الطبقة الأولى من RNN لتحمل الحالة المحفوظة من الدفعة السابقة. يمكنك أيضًا استخدام tf.placeholder_with_default
لتحديد قيمة افتراضية للحالة المحفوظة في حال لم يتم تعيينها بعد. قد يكون هذا أكثر فائدة إذا كنت تريد تغيير الحالة المحفوظة في وقت لاحق في التدريب.
الخطوات الرئيسية لحفظ الحالة بين الدفعات هي:
- إنشاء متغير TensorFlow لتمثيل الحالة المحفوظة
saved_state
. - تحديث الحالة المحفوظة
saved_state
بعد كل دفعة باستخدامtf.assign
. - في كل دفعة، استخدام الحالة المحفوظة
saved_state
لتحديث حالة RNN الحالية.
اليك كود مثالي لتحقيق هذا:
python# إنشاء متغير TensorFlow لتمثيل الحالة المحفوظة saved_state
saved_state = tf.Variable(tf.zeros((BATCH_SIZE, sz)), trainable=False)
# في كل دفعة، استخدام الحالة المحفوظة saved_state لتحديث حالة RNN الحالية
for r in range(RNNS):
with tf.variable_scope('recurent_%d' % r) as scope:
rnn_outputs[r], state = rnn_func(rnn_outputs[r - 1], saved_state)
# تحديث الحالة المحفوظة saved_state بعد كل دفعة
saved_state = tf.assign(saved_state, state)
باستخدام هذه الطريقة، لن تحتاج إلى تقييم الحالة المحفوظة في كل تشغيل، بل سيتم تحديثها تلقائيًا بعد كل دفعة.