البرمجة

حفظ حالة RNN بين الدفعات في TensorFlow

في TensorFlow، هناك طريقة أفضل لحفظ حالة RNNs بين الدفعات (batches) دون الحاجة إلى تقييم الحالة المحفوظة في كل تشغيل (run) ونسخ الحالة من الذاكرة GPU إلى الذاكرة الرئيسية (host memory). يمكنك استخدام tf.contrib.rnn.LSTMStateTuple لتمثيل حالة LSTM، وتحديث حالة الطبقة الأولى من RNN لتحمل الحالة المحفوظة من الدفعة السابقة.

الخطوات الرئيسية لحفظ الحالة بين الدفعات هي:

  1. إنشاء متغير TensorFlow لتمثيل الحالة المحفوظة saved_state.
  2. تحديث الحالة المحفوظة saved_state بعد كل دفعة باستخدام tf.assign.
  3. في كل دفعة، استخدام الحالة المحفوظة 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 لتحديد قيمة افتراضية للحالة المحفوظة في حال لم يتم تعيينها بعد. قد يكون هذا أكثر فائدة إذا كنت تريد تغيير الحالة المحفوظة في وقت لاحق في التدريب.

الخطوات الرئيسية لحفظ الحالة بين الدفعات هي:

  1. إنشاء متغير TensorFlow لتمثيل الحالة المحفوظة saved_state.
  2. تحديث الحالة المحفوظة saved_state بعد كل دفعة باستخدام tf.assign.
  3. في كل دفعة، استخدام الحالة المحفوظة 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)

باستخدام هذه الطريقة، لن تحتاج إلى تقييم الحالة المحفوظة في كل تشغيل، بل سيتم تحديثها تلقائيًا بعد كل دفعة.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!