Tensorflow: ValueError: محاولة إعادة استخدام RNNCell بنطاق متغير مختلف عن أول استخدام لها.

تم إنشاؤها على ٨ مارس ٢٠١٧  ·  102تعليقات  ·  مصدر: tensorflow/tensorflow

لست متأكدًا مما إذا كنت أول من واجه الخطأ التالي:

ValueError: محاولة إعادة استخدام RNNCellبنطاق متغير مختلف عن استخدامه لأول مرة. كان أول استخدام للخلية مع النطاق "rnn / multi_rnn_cell / cell_0 / basic_lstm_cell" ، وكانت هذه المحاولة مع النطاق "rnn / multi_rnn_cell / cell_1 / basic_lstm_cell". الرجاء إنشاء مثيل جديد للخلية إذا كنت ترغب في استخدام مجموعة مختلفة من الأوزان. إذا كنت تستخدم من قبل: MultiRNNCell ([BasicLSTMCell (...)] * num_layers) ، قم بالتغيير إلى: MultiRNNCell ([BasicLSTMCell (...) لـ _ في النطاق (عدد_ طبقات)]). إذا كنت تستخدم نفس مثيل الخلية من قبل كخلية أمامية وخلفية للخلية RNN ثنائية الاتجاه ، فقم ببساطة بإنشاء مثيلين (أحدهما للأمام والآخر للخلف). في مايو 2017 ، سنبدأ في نقل سلوك هذه الخلية لاستخدام الأوزان المخزنة الموجودة ، إن وجدت ، عندما يتم استدعاؤها بالنطاق = لا شيء (مما قد يؤدي إلى تدهور النموذج الصامت ، لذلك سيبقى هذا الخطأ حتى ذلك الحين.)

مع جزء الكود:

  import tensorflow as tf
  from tensorflow.contrib import rnn

  hidden_size = 100
  batch_size  = 100
  num_steps   = 100
  num_layers  = 100
  is_training = True
  keep_prob   = 0.4

  input_data = tf.placeholder(tf.float32, [batch_size, num_steps])
  lstm_cell = rnn.BasicLSTMCell(hidden_size, forget_bias=0.0, state_is_tuple=True)

  if is_training and keep_prob < 1:
      lstm_cell = rnn.DropoutWrapper(lstm_cell)
  cell = rnn.MultiRNNCell([lstm_cell for _ in range(num_layers)], state_is_tuple=True)

  _initial_state = cell.zero_state(batch_size, tf.float32)

  iw = tf.get_variable("input_w", [1, hidden_size])
  ib = tf.get_variable("input_b", [hidden_size])
  inputs = [tf.nn.xw_plus_b(i_, iw, ib) for i_ in tf.split(input_data, num_steps, 1)]

  if is_training and keep_prob < 1:
      inputs = [tf.nn.dropout(input_, keep_prob) for input_ in inputs]

  outputs, states = rnn.static_rnn(cell, inputs, initial_state=_initial_state)

لقد بحثت في موقع Google بدون حظ ، فهل يمكن لأي شخص أن يوضح لي مخرجًا؟

awaiting tensorflower

التعليق الأكثر فائدة

لقد قابلت نفس المشكلة. إذا كنت تستخدم جميعًا إصدارًا مترجمًا في الفرع الرئيسي ، فأنا أعتقد أننا نفس المشكلة الناجمة عن الالتزام الأخير . كما تقول رسالة الالتزام:

اجعل جميع خلايا RNN في tf.contrib.rnn تتصرف مثل طبقات tf.layer ، ولكن مع دلالات أكثر صرامة لعدم
ث:

  1. عند أول استخدام لـ __المكالمة__ ، يتم تخزين النطاق المستخدم في الخلية. تحاول RNNCell إنشاء أوزان في هذا النطاق ولكن إذا تم تعيين بعضها بالفعل ، فسيظهر خطأ ما لم يتم إنشاء RNNCell باستخدام الوسيطة reuse = True.

  2. يجب أن يكون الاستخدام اللاحق لـ __call__ لنفس مثيل الخلية في نفس النطاق.
    إذا لم يكن كذلك ، يظهر خطأ.

من حالتي ، التي تقوم بتشغيل البرنامج التعليمي ptb ، فإن الحل هو فقط إضافة معلمة مسماة بـ reuse مثل هذا في السطر 112:

def lstm_cell():
  return tf.contrib.rnn.BasicLSTMCell(
      size, forget_bias=0.0, state_is_tuple=True, reuse=tf.get_variable_scope().reuse)

ثم يعمل.

ال 102 كومينتر

أتلقى نفس الخطأ عند محاولة تشغيل مثال الترجمة (حتى عند إجراء الاختبار الذاتي الصغير) والذي يمكن العثور عليه هنا: https://github.com/tensorflow/models/tree/master/tutorials/rnn/translate

لقد قابلت نفس المشكلة. إذا كنت تستخدم جميعًا إصدارًا مترجمًا في الفرع الرئيسي ، فأنا أعتقد أننا نفس المشكلة الناجمة عن الالتزام الأخير . كما تقول رسالة الالتزام:

اجعل جميع خلايا RNN في tf.contrib.rnn تتصرف مثل طبقات tf.layer ، ولكن مع دلالات أكثر صرامة لعدم
ث:

  1. عند أول استخدام لـ __المكالمة__ ، يتم تخزين النطاق المستخدم في الخلية. تحاول RNNCell إنشاء أوزان في هذا النطاق ولكن إذا تم تعيين بعضها بالفعل ، فسيظهر خطأ ما لم يتم إنشاء RNNCell باستخدام الوسيطة reuse = True.

  2. يجب أن يكون الاستخدام اللاحق لـ __call__ لنفس مثيل الخلية في نفس النطاق.
    إذا لم يكن كذلك ، يظهر خطأ.

من حالتي ، التي تقوم بتشغيل البرنامج التعليمي ptb ، فإن الحل هو فقط إضافة معلمة مسماة بـ reuse مثل هذا في السطر 112:

def lstm_cell():
  return tf.contrib.rnn.BasicLSTMCell(
      size, forget_bias=0.0, state_is_tuple=True, reuse=tf.get_variable_scope().reuse)

ثم يعمل.

ebrevdo هل يمكنك إلقاء نظرة على هذا من فضلك؟

تتكرر المشكلة بالنسبة لي عند استخدام Windows / GPU build 105 على شكسبير RNN Repo .

عند تشغيل الكود بإصدار Win 1.0.0 / GPU ، لا توجد مشكلة.

يبدو أن الريبو هذا يستهدف tf 1.0 ، وليس الإصدارات الوسيطة.

في 8 آذار (مارس) 2017 الساعة 3:56 مساءً ، كتب "Tom Wanzek" [email protected] :

تتكرر المشكلة بالنسبة لي عند استخدام Windows / GPU الإصدار 105 على شكسبير
RNN Repo https://github.com/martin-gorner/tensorflow-rnn-shakespeare .

عند تشغيل الكود بإصدار Win 1.0.0 / GPU ، لا توجد مشكلة.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285209555 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim5ansaL1KN51T4nCaqLnqw2QHN4Wks5rj0BBgaJpZM4MWl4f
.

tongda ، أنا أستخدم إصدار الإصدار من Tensorflow 1.0 ، الذي يعمل على نظام MacOS في وضع وحدة المعالجة المركزية. سأنتقل إلى الفرع الرئيسي لمعرفة ما إذا كان يعمل عن طريق إضافة معلمة "إعادة الاستخدام" ، شكرًا.

doncat99: إذا قمت بذلك ، فيرجى التأكد من أن الكود الخاص بك يستفسر عن إصدار tensorflow
ويرفع إشارة إذا كان الإصدار أقل من إصدار الفرع الرئيسي.
قد تحتاج إلى التحقق من:

من إصدارات الاستيراد tensorflow.core
الإصدارات

في الأربعاء 8 مارس 2017 الساعة 6:58 مساءً ، كتب doncat99 [email protected] :

tongda https://github.com/tongda ، أنا أستخدم نسخة الإصدار من
Tensorflow 1.0 ، يعمل على نظام MacOS في وضع وحدة المعالجة المركزية. سوف أتحول إلى السيد
فرع لمعرفة ما إذا كان يعمل عن طريق إضافة معامل "إعادة الاستخدام" ، شكرًا.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285240438 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim66cU9e16lgD-2D0QLGcQCiHbV0zks5rj2rbgaJpZM4MWl4f
.

ebrevdo إذن ما هي التغييرات المقترحة على Shakepeare RNN للسماح لها بالعمل مع الإصدار المستقر المتوسط؟

هذا هو القسم المعماري الرئيسي من الكود ، والذي فشل الآن في البناء # 105:

#
# the model (see FAQ in README.md)
#
lr = tf.placeholder(tf.float32, name='lr')  # learning rate
pkeep = tf.placeholder(tf.float32, name='pkeep')  # dropout parameter
batchsize = tf.placeholder(tf.int32, name='batchsize')

# inputs
X = tf.placeholder(tf.uint8, [None, None], name='X')    # [ BATCHSIZE, SEQLEN ]
Xo = tf.one_hot(X, ALPHASIZE, 1.0, 0.0)                 # [ BATCHSIZE, SEQLEN, ALPHASIZE ]
# expected outputs = same sequence shifted by 1 since we are trying to predict the next character
Y_ = tf.placeholder(tf.uint8, [None, None], name='Y_')  # [ BATCHSIZE, SEQLEN ]
Yo_ = tf.one_hot(Y_, ALPHASIZE, 1.0, 0.0)               # [ BATCHSIZE, SEQLEN, ALPHASIZE ]
# input state
Hin = tf.placeholder(tf.float32, [None, INTERNALSIZE*NLAYERS], name='Hin')  # [ BATCHSIZE, INTERNALSIZE * NLAYERS]

# using a NLAYERS=3 layers of GRU cells, unrolled SEQLEN=30 times
# dynamic_rnn infers SEQLEN from the size of the inputs Xo

onecell = rnn.GRUCell(INTERNALSIZE)
dropcell = rnn.DropoutWrapper(onecell, input_keep_prob=pkeep)
multicell = rnn.MultiRNNCell([dropcell for _ in range(NLAYERS)], state_is_tuple=False)
multicell = rnn.DropoutWrapper(multicell, output_keep_prob=pkeep)
Yr, H = tf.nn.dynamic_rnn(multicell, Xo, dtype=tf.float32, initial_state=Hin)
# Yr: [ BATCHSIZE, SEQLEN, INTERNALSIZE ]
# H:  [ BATCHSIZE, INTERNALSIZE*NLAYERS ] # this is the last state in the sequence

يبدو أنني لا أجد أي وثائق تتعلق بعلامة reuse ؟

شكرا لك مقدما.

يستخدم:

multicell = rnn.MultiRNNCell ([rnn.DropoutWrapper (rnn.GRUCell (حجم داخلي) ،
input_keep_prob = pkeep) لـ _ في النطاق (NLAYERS)] ، state_is_tuple = False)

مما يؤدي إلى إنشاء كائن grucell منفصل لكل طبقة.

في 10 آذار (مارس) 2017 الساعة 7:44 صباحًا ، كتب "توم وانزيك" [email protected] :

ebrevdo https://github.com/ebrevdo إذن ماذا سيكون المقترح
التغييرات على Shakepeare RNN للسماح لها بالعمل مع الوسيط
إصدارة مستقرة؟

هذا هو القسم المعماري الرئيسي من الكود ، والذي فشل الآن مع
بناء # 105:

النموذج (انظر التعليمات في README.md)

lr = tf.placeholder (tf.float32 ، الاسم = 'lr') # معدل التعلم
pkeep = tf.placeholder (tf.float32 ، الاسم = 'pkeep') # معلمة التسرب
batchsize = tf.placeholder (tf.int32، name = 'batchsize')

المدخلات

X = tf.placeholder (tf.uint8، [None، None]، name = 'X') # [BATCHSIZE، SEQLEN]
Xo = tf.one_hot (X، ALPHASIZE، 1.0، 0.0) # [BATCHSIZE، SEQLEN، ALPHASIZE] # المخرجات المتوقعة = تم إزاحة التسلسل نفسه بمقدار 1 نظرًا لأننا نحاول توقع الحرف التالي
Y_ = tf.placeholder (tf.uint8، [None، None]، name = 'Y_') # [BATCHSIZE، SEQLEN]
Yo_ = tf.one_hot (Y_، ALPHASIZE، 1.0، 0.0) # [BATCHSIZE، SEQLEN، ALPHASIZE] # حالة إدخال
Hin = tf.placeholder (tf.float32، [None، INTERNALSIZE * NLAYERS]، name = 'Hin') # [BATCHSIZE، INTERNALSIZE * NLAYERS]

باستخدام NLAYERS = 3 طبقات من خلايا GRU ، SEQLEN غير الملتحق = 30 مرة # dynamic_rnn يستنتج SEQLEN من حجم المدخلات Xo

onecell = rnn.GRUCell (حجم داخلي)
Dropcell = rnn.DropoutWrapper (onecell، input_keep_prob = pkeep)
multicell = rnn.MultiRNNCell ([dropcell for _ in range (NLAYERS)]، state_is_tuple = False)
multicell = rnn.DropoutWrapper (multicell، output_keep_prob = pkeep)
Yr، H = tf.nn.dynamic_rnn (multicell، Xo، dtype = tf.float32، initial_state = Hin) # سنة: [BATCHSIZE، SEQLEN، INTERNALSIZE] # H: [BATCHSIZE، INTERNALSIZE * NLAYERS] # هذه هي الحالة الأخيرة في التسلسل

لا يبدو أنني أجد أي وثائق تتعلق بعلامة إعادة الاستخدام؟

شكرا لك مقدما.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285702372 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim6MOOCbx3RJEJe8PQBDXGVIXTGPmks5rkW_jgaJpZM4MWl4f
.

لا أفهم سبب ظهور هذا الخطأ في النموذج التعليمي seq2seq :

cell = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])

مصدر

حيث يتم إنشاء الخلية باستخدام

def single_cell():
    return tf.contrib.rnn.GRUCell(size)

ebrevdo شكرًا على العودة إلى هذه المشكلة. لسوء الحظ ، فإن التغيير المقترح يترك الأمور كما هي ، مع الخطأ المذكور أعلاه. بالنظر إلى التعليق أعلاه بخصوص البرنامج التعليمي seq2seq ، أظن أننا جميعًا في نفس القارب؟

هل أنت متأكد من أنه نفس الخطأ بالضبط؟ يرجى نسخها ولصقها هنا.

سيئتي ، لقد مررت للتو بعملية التغيير إلى الكود ذي الصلة مرة أخرى (من البداية) وأعدت تشغيله على النحو المقترح. لقد تمت إزالة الخطأ بالفعل وأصبح الشاعر القديم يهلوس على ما يرام الآن 👍

لذا ، شكراً لك ، لست متأكداً من أين أخطأت بالأمس ، لكن من الواضح أنها كانت عليّ.

واجهت نفس المشكلة عند استخدام إصدار Tensorflow 1.0 والعمل على MacOS في وضع وحدة المعالجة المركزية ، حتى في حالة إضافة معلمة "إعادة الاستخدام"

def cell():
    return tf.contrib.rnn.BasicLSTMCell(rnn_size,state_is_tuple=True,reuse=tf.get_variable_scope().reuse)

muticell = tf.contrib.rnn.MultiRNNCell([cell for _ in range(num_layers)], state_is_tuple=True)

تبدو الخلية المتعددة خاطئة ... يجب أن تستخدم "الخلية () لـ _ في
نطاق(...)"

في الخميس ، 16 مارس 2017 الساعة 8:29 مساءً ، كتب cuiming [email protected] :

واجهت نفس المشكلة عند استخدام إصدار الإصدار من Tensorflow 1.0
والعمل على نظام التشغيل MacOS في وضع وحدة المعالجة المركزية. حتى لو أضف معلمة "إعادة الاستخدام"

خلية def ():
إرجاع tf.contrib.rnn.BasicLSTMCell (rnn_size، state_is_tuple = True، reuse = tf.get_variable_scope (). reuse)

muticell = tf.contrib.rnn.MultiRNNCell ([خلية لـ _ في النطاق (عدد_ طبقات)] ، state_is_tuple = صحيح)

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-287257629 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim3A6JQr8ptRKrdiDW_kgNRIFkHGlks5rmf4WgaJpZM4MWl4f
.

كنت أحاول تشغيل مثال الترجمة: python2.7 translate.py --data_dir data / --train_dir train / --size = 256 --num_layers = 2 --steps_per_checkpoint = 50

يبدو أن طريقة استخدام MultiRNNCell صحيحة:
cell = tf.contrib.rnn.MultiRNNCell ([single_cell () لـ _ في النطاق (عدد_ طبقات)])

لكنني حصلت على نفس الخطأ:
ValueError: محاولة إعادة استخدام RNNCellبنطاق متغير مختلف عن استخدامه لأول مرة. كان أول استخدام للخلية مع النطاق "embedding_attention_seq2seq / embedding_attention_decoder / calling_decoder / multi_rnn_cell / cell_0 / gru_cell" ، وهذه المحاولة ذات النطاق "embedding_attention_seq2seq / rnn / multi_rnn_cell / cell_0 / gru_cell". الرجاء إنشاء مثيل جديد للخلية إذا كنت ترغب في استخدام مجموعة مختلفة من الأوزان. إذا كنت تستخدم من قبل: MultiRNNCell ([GRUCell (...)] * عدد_الطبقات) ، غيّر إلى: MultiRNNCell ([GRUCell (...) لـ _ في النطاق (عدد_ طبقات)]). إذا كنت تستخدم نفس مثيل الخلية من قبل كخلية أمامية وخلفية للخلية RNN ثنائية الاتجاه ، فقم ببساطة بإنشاء مثيلين (أحدهما للأمام والآخر للخلف). في مايو 2017 ، سنبدأ في نقل سلوك هذه الخلية لاستخدام الأوزان المخزنة الموجودة ، إن وجدت ، عندما يتم استدعاؤها بالنطاق = لا شيء (مما قد يؤدي إلى تدهور النموذج الصامت ، لذلك سيبقى هذا الخطأ حتى ذلك الحين.)

bowu - هل لديك أي حظ في هذا؟ إذا لم تكن قد جربته بعد ، فأعد تثبيت Tensorflow من أحدث مصدر. كانت هناك بعض التغييرات على بعض ملفات core_rnn ، من بين بعض الملفات الأخرى. يعمل معي الآن.

robmsylvester أعد تثبيت tensorflow من أحدث مصدر ، ولا يزال نفس الخطأ. كنت في رئيس فرع وكان آخر التزام هو commit 2a4811054a9e6b83e1f5a2705a92aab50e151b13 . ما هو آخر التزام عند إنشاء الريبو الخاص بك؟

مرحبًا ، أنا أستخدم Tensorflow r1.0 باستخدام GPU المبني باستخدام المصدر. أحاول اتباع البرنامج التعليمي للترجمة غير المعدلة Seq2Seq ، ولكني أحصل على نفس الخطأ. بمعنى آخر

ValueError: محاولة إعادة استخدام RNNCellبنطاق متغير مختلف عن استخدامه لأول مرة. كان أول استخدام للخلية مع النطاق "embedding_attention_seq2seq / embedding_attention_decoder / calling_decoder / multi_rnn_cell / cell_0 / gru_cell" ، هذه المحاولة ذات النطاق "embedding_attention_seq2seq / rnn / multi_rnn_cell / cell_0 / gru_cell" .....

الجزء ذي الصلة من الكود في seq2seq_model.py الخاص بي هو:

 # Create the internal multi-layer cell for our RNN.
    def single_cell():
      return tf.contrib.rnn.GRUCell(size)
    if use_lstm:
      def single_cell():
        return tf.contrib.rnn.BasicLSTMCell(size)
    cell = single_cell()
    if num_layers > 1:
      cell = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])

ما الذي يمكنني فعله لحل المشكلة؟

إضافة "reuse = tf.get_variable_scope (). reuse" إلى المكالمة حيث تم إنشاء GRUCell لا يساعد.

شكرا جزيلا!

prashantserai - شاهد ما سيحدث إذا قمت بإزالة خط MultiRNNCell من الأعلى ، مما يجعل شبكتك طبقة واحدة فقط بشكل فعال. هل تعمل بعد ذلك؟ قد يكون خطأ في مكان ما في MultiRNNCell. لقد قرأت عن ذلك في مكان ما مؤخرًا ، ربما على تجاوز سعة المكدس.

إذا قمت بتنفيذ lstm / gru المكدس بنفسك ، فلن تحصل على هذا الخطأ ، ويمكنك تنفيذ نفس الوظيفة (في الواقع أكثر ، لأنك حر في فعل ما تريد باستخدام البنى ثنائية الاتجاه ، والمتبقيات الغريبة وتخطي الاتصالات ، إلخ. .)

robmsylvester استمر الخطأ نفسه حتى عندما حاولت استخدام num_layers = 1 والذي يجب أن يتخطى هذا السطر بشكل فعال. أي أفكار أخرى؟ شكرا على الادخال.

أمم. الشيء الوحيد الذي يبرز بالنسبة لي هو في ملف seq2seq الموروث المشار إليه:

encoder_cell = copy.deepcopy(cell)

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

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

robmsylvester لا ينبغي إجراء تغييرات في نطاقات عمل الخلايا؟ إنه يعمل مع المثالين الآخرين أيضًا. في رأيي ، سيكون هذا حلًا سيئًا للغاية ؛ يجب أن يوجد حل أنظف ؛ ربما نفتقد شيئا؟ (حصلت على نفس الخطأ في البرنامج التعليمي seq2seq أيضًا ، جربت جميع الحلول المذكورة أعلاه).

@ iamgroot42 - نعم ، من المسلم به أن هذا "الحل" قبيح للغاية ، ولكنه أكثر من مجرد محاولة البحث عن مكان المشكلة. سوف ألعب بها في غضون ساعات قليلة وأرى ما إذا كان بإمكاني تعقب شيء ما.

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

يوم الثلاثاء 4 أبريل 2017 الساعة 11:38 صباحًا ، Rob Sylvester [email protected]
كتب:

@ iamgroot42 https://github.com/iamgroot42 - نعم ، هذا "الحل" هو
من المسلم به أنه قبيح للغاية ، ولكن أكثر من مجرد محاولة تعقب مكان المشكلة
قد يكون. سوف ألعب بها في غضون ساعات قليلة وأرى ما إذا كان بإمكاني تتبع شيء ما
تحت.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-291593289 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim1QHTDhOC_zT6cKtmUFPOit5Yjn7ks5rso5CgaJpZM4MWl4f
.

ebrevdo - سأفكر في الأمر. لدي مترجم يعمل بشكل مشابه جدًا لهذا المترجم ولكنه ينشئ خلايا من خلال فئة منفصلة تسمح بإدخال طبقات ثنائية الاتجاه حيث تريد ، والمخلفات حيثما تريد ، ودمج المدخلات مع concat مقابل sum ، وبعض الأشياء الأخرى. أعتقد أنه يمكنني ترحيل صفي إلى هذا البرنامج التعليمي بسهولة تامة باستخدام RNN ثابت. سأخبرك.

ebrevdo أنا أقوم بتشغيل Tensorflow r1.0 (tensorflow-1.0.1-cp36-cp36m-linux_x86_64) على Red Hat ولديك أحدث إصدار من دروس الترجمة من Github .. هل هناك طريقة تعرفها لإنجاز هذا العمل حاليًا؟

من المؤسف أن دروس الترجمة لا تعمل مع TF 1.0. يجب أن نصلح ذلك. lukaszkaiser هل يمكنك إلقاء نظرة؟ نحن نعمل على برنامج تعليمي جديد ولكن لا يزال أمامنا بضعة أسابيع وسيتطلب إصدارًا ليليًا من TensorFlow (أو TF 1.1 أو 1.2) للعمل.

(lukasz ؛ من الصعب بالنسبة لي أن أحدد من التعليقات المختلفة أي جزء من البرنامج التعليمي خاطئ في TF 1.0. هل هناك فرصة للتعرف على الخط ويمكنني المساعدة في تشغيله؟)

ebrevdo إنه هذا البرنامج التعليمي. الخطأ موجود في هذه المجموعة من الخطوط. تُستخدم الخلايا التي تم تمريرها هنا لكل من المرحلة السابقة والأمامية لنموذج seq2seq القديم ، والذي يتسبب في حدوث خطأ بسبب استخدام نفس الخلايا مع نطاقات مختلفة.

@ iamgroot42 هل تريد إجراء علاقات عامة بالتغييرات المطلوبة؟ سيكون ذلك رائعًا ، فأنا حاليًا لا أمتلك الدورات للقيام بذلك بنفسي. شكرا!

لقد لاحظت أن TF 1.0 يعمل بشكل جيد مع أحدث إصدار من دروس الترجمة إذا تم تجميعه من المصدر على أجهزة التحكم عن بعد / الأصل / r1.0

$ git clone https://github.com/tensorflow/tensorflow
$ cd tensorflow
$ git checkout remotes/origin/r1.0

ثم بناء وتثبيت TensorFlow ، فهو يعمل بشكل جيد.

على أجهزة التحكم عن بعد / الأصل / r1.1 يوجد بها خطأ "نطاق متغير مختلف".
لقد قمت بتعديل الكود كما اقترح robmsylvester

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

وهو يعمل معي الآن.

oxwsds ، Tensorflow الذي أستخدمه هو 1.0.1 لذا ربما يكون هناك خطأ ..

لقد جربت ما اقترحه robmsylvester في الواقع .. وبدأ التدريب (انتهى يومان و 13 ساعة الآن) .. فشل أثناء فك التشفير على الرغم من الخطأ:

  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 883, in embedding_attention_seq2seq
    initial_state_attention=initial_state_attention)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 787, in embedding_attention_decoder
    initial_state_attention=initial_state_attention)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 686, in attention_decoder
    cell_output, state = cell(x, state)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py", line 796, in __call__
    % (len(self.state_size), state))
ValueError: Expected state to be a tuple of length 3, but received: Tensor("model_with_buckets/embedding_attention_seq2seq/rnn/gru_cell_4/add:0", shape=(?, 1024), dtype=float32)

هل جربت فك التشفير؟

prashantserai لا أعرف بالضبط ، ولكن يبدو أن ما قابلته يمثل مشكلة أخرى.

prashantserai إذا فشل فقط عند فك التشفير ، فربما يكون له علاقة باستخدام حجم دفعة واحدة؟ هل لا يزال النموذج يتدرب إذا خفضت حجم الدُفعة إلى حجم واحد أثناء التدريب؟

bowu نفس الخطأ هنا. Mac OX Sierra و TensorFlow 1.1.0-rc1 و Python 2.7.10 و Python 3.6.1.

robmsylvester لقد تدربت بنجاح مع حجم دفعة واحدة أيضًا ، لكنها فشلت أثناء فك التشفير بنفس الطريقة أو بطريقة مماثلة .. إليك تتبع كامل .. السبب الذي جعلني أفكر في هذا على أنه خطأ متصل كان بسبب الإشارة إلى seq2seq_f (التي كانت إحدى الوظائف المعدلة) (التعليق #prashant من الكود الخاص بي للدلالة على سطر معدل هو جزء من التتبع)

2017-04-10 11:32:27.447042: I tensorflow/core/common_runtime/gpu/gpu_device.cc:887] Found device 0 with properties: 
name: GeForce GTX 780 Ti
major: 3 minor: 5 memoryClockRate (GHz) 0.928
pciBusID 0000:42:00.0
Total memory: 2.95GiB
Free memory: 2.88GiB
2017-04-10 11:32:27.447094: I tensorflow/core/common_runtime/gpu/gpu_device.cc:908] DMA: 0 
2017-04-10 11:32:27.447102: I tensorflow/core/common_runtime/gpu/gpu_device.cc:918] 0:   Y 
2017-04-10 11:32:27.447118: I tensorflow/core/common_runtime/gpu/gpu_device.cc:977] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 780 Ti, pci bus id: 0000:42:00.0)
Traceback (most recent call last):
  File "translate.py", line 322, in <module>
    tf.app.run()
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/python/platform/app.py", line 48, in run
    _sys.exit(main(_sys.argv[:1] + flags_passthrough))
  File "translate.py", line 317, in main
    decode()
  File "translate.py", line 248, in decode
    model = create_model(sess, True)
  File "translate.py", line 136, in create_model
    dtype=dtype)
  File "/data/data6/scratch/serai/models/tutorials/rnn/translate/seq2seq_model.py", line 168, in __init__
    softmax_loss_function=softmax_loss_function)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 1203, in model_with_buckets
    decoder_inputs[:bucket[1]])
  File "/data/data6/scratch/serai/models/tutorials/rnn/translate/seq2seq_model.py", line 167, in <lambda>
    self.target_weights, buckets, lambda x, y: seq2seq_f(x, y, True),
  File "/data/data6/scratch/serai/models/tutorials/rnn/translate/seq2seq_model.py", line 144, in seq2seq_f
    dtype=dtype) #prashant
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 883, in embedding_attention_seq2seq
    initial_state_attention=initial_state_attention)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 787, in embedding_attention_decoder
    initial_state_attention=initial_state_attention)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 686, in attention_decoder
    cell_output, state = cell(x, state)
  File "/homes/3/serai/.conda/envs/tensorflow_r1.0_gpu/lib/python3.6/site-packages/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py", line 796, in __call__
    % (len(self.state_size), state))
ValueError: Expected state to be a tuple of length 3, but received: Tensor("model_with_buckets/embedding_attention_seq2seq/rnn/gru_cell_4/add:0", shape=(?, 1024), dtype=float32)

oxwsds هل يتغير رأيك على أساس التتبع الكامل أعلاه؟

prashantserai حاولت فك التشفير وهو يعمل بشكل جيد. أقوم ببساطة بإضافة encoder_cell arg للدالة tf.contrib.legacy_seq2seq.embedding_attention_seq2seq وفي translate/seq2seq_model.py أنشئ الخلية ومررها إلى الوظيفة ، والتي كانت تسمى في الوظيفة seq2seq_f . كيف قمت بتغيير الرمز الخاص بك؟

تضمين التغريدة
لدي أخيرًا شيء يعمل الآن (أعني ، نتائج شبكة الطبقة المفردة المكونة من 256 وحدة هي نوعًا ما مروعة ، ولكن ربما يكون هذا فقط لأن الشبكة خفيفة الوزن للغاية ولم أقم بضبط المعلمات على الإطلاق)
شكرا جزيلا جميعا...!!!!!

_ها هي أفكاري في نهاية هذا: _

علّق oxwsds على أن البرنامج التعليمي (في شكله الحالي) يعمل دون الحاجة إلى تعديل عندما يتم تجميع Tensorflow من أجهزة التحكم عن بُعد / الأصل / r1.0 للفرع كان TRUE . على الرغم من أن الشيء المحزن هو أن إصدار Tensorflow الذي أجريته والذي كان يلزم إجراء تعديلات عليه داخل رمز Tensorflow ، وكان الإصدار الموجود في أجهزة التحكم عن بُعد / origin / r1.0 متطابقًا.

إصلاح robmsylvester في التعليق (منسوخ أدناه) DID WORK لإصداري من Tensorflow حيث لم يعمل البرنامج التعليمي خارج الصندوق (ويجب أن يعمل مع TF 1.1 أيضًا على ما أعتقد). إنه فوضوي بعض الشيء في التنفيذ ، لكن يمكنني القيام بذلك ، وهو ما يقول :-P
كان الخطأ في تعليقي الأخيرين قبل ذلك بسبب خطأي. مثل الدمية ، كنت أحدد الطبقات ومعلمات الوحدات المخفية فقط أثناء التدريب ، كنت أترك الكود لاستخدام الإعدادات الافتراضية أثناء فك التشفير. (يمكن أن يكون هذا الجزء من البرنامج التعليمي دليلًا زائفًا أكثر بقليل: https://www.tensorflow.org/tutorials/seq2seq#lets_run_it)

أمم. الشيء الوحيد الذي يبرز بالنسبة لي هو في ملف seq2seq الموروث المشار إليه:

encoder_cell = copy.deepcopy (خلية)

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

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

شكرا على ملاحظاتك! يبدو أن هناك شيئًا مختلفًا بين فريق العمل
على pypi وفي تلك العلامة؟ جونهان ، هل هذا ممكن؟

يوم الاثنين 10 أبريل 2017 الساعة 9:05 مساءً ، prashantserai [email protected]
كتب:

oxwsds https://github.com/oxwsdsrobmsylvester
https://github.com/robmsylvesterebrevdo https://github.com/ebrevdo _
أخيرًا لدي شيء يعمل الآن (أعني ، نتائج فردية
تعد شبكة طبقة 256 وحدة مروعة نوعًا ما ، ولكن هذا على الأرجح مجرد
لأن الشبكة خفيفة الوزن للغاية ولم أقم بضبط المعلمات على الإطلاق)

هذا هو الحد الأدنى الخاص بي:

oxwsds https://github.com/oxwsds علق بأن البرنامج التعليمي (بهالنموذج الحالي) يعمل دون الحاجة إلى تعديل عندما يكون Tensorflowتم تجميعها من أجهزة التحكم عن بعد / الأصل / r1.0 كانت TRUE . بت حزين
على الرغم من كونها نسخة Tensorflow التي أجريت عليها التعديلات
داخل كود Tensorflow كانت هناك حاجة ، والإصدار في أجهزة التحكم عن بعد / الأصل / r1.0
كلاهما متطابق المسمى.

robmsylvester https://github.com/robmsylvester 'الإصلاح في التعليق
(تم نسخه أدناه) DID WORK لإصدار Tensorflow الخاص بي حيث البرنامج التعليمي
لم ينجح خارج الصندوق (ويجب أن يعمل مع TF 1.1 أيضًا على ما أعتقد). أنه
فوضوي قليلاً في التنفيذ ، لكن يمكنني فعل ذلك ، وهو قول شيء ما
:-P
كان الخطأ في تعليقي الأخيرين قبل ذلك بسبب خطأي. مثل
دمية ، كنت أحدد الطبقات ومعلمات الوحدات المخفية فقط
أثناء التدريب ، كنت أترك الكود لاستخدام الإعدادات الافتراضية أثناء فك التشفير. (هذهجزء من البرنامج التعليمي يمكن أن يكون دليلًا وهميًا أكثر بقليل:https://www.tensorflow.org/tutorials/seq2seq#lets_run_ithttps://www.tensorflow.org/tutorials/seq2seq#lets_run_it )

أمم. الشيء الوحيد الذي يبرز بالنسبة لي هو في seq2seq الموروث المشار إليه
ملف:

encoder_cell = copy.deepcopy (خلية)

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

ماذا يحدث إذا قمت بإنشاء خلية التشفير ووحدة فك التشفير بشكل صريح
cell في ملف النموذج seq2seq الخاص بك ومررهما إلى المكتبة القديمة
ملف ، وإجراء تعديلات صغيرة على الوظائف وحججها؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-293143828 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtimxvcfFnbWbpj7aUs3BUjwGEFj6p5ks5ruvvygaJpZM4MWl4f
.

للحصول على معلومات ، واجهت هذه المشكلة أثناء محاولة تكديس خلايا LSTM:
كان الكود الأصلي الخاص بي:

    lstm_cell = tf.nn.rnn_cell.BasicLSTMCell(hidden_size, forget_bias=0.0, state_is_tuple=True)
    if is_training and keep_prob < 1:
      lstm_cell = tf.nn.rnn_cell.DropoutWrapper(
          lstm_cell, output_keep_prob=keep_prob)
    cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * num_layers, state_is_tuple=True)

بعد ذلك ، باستخدام الكود التالي ، كان إنشاء النموذج جيدًا ، لكن لم أتمكن من مشاركة المتغير مع نموذج آخر. (على سبيل المثال ، إذا قمت بإنشاء train_model ونموذج valid_model من المفترض أن يشارك الموترات ، فسوف يفشل)

    lstm_creator = lambda: tf.contrib.rnn.BasicLSTMCell(
                                        hidden_size, 
                                        forget_bias=0.0, state_is_tuple=True)
    if is_training and keep_prob < 1:
      cell_creator = lambda:tf.contrib.rnn.DropoutWrapper(
          lstm_creator(), output_keep_prob=keep_prob)
    else:
      cell_creator = lstm_creator

    cell = tf.contrib.rnn.MultiRNNCell([cell_creator() for _ in range(num_layers)], state_is_tuple=True)

لذا أخيرًا استخدمت lstm_creator $ لأكون دالة مثل lstm_cell في tensorflow / Models / tutorials / rnn / ptb / ptb_word_lm.py # L112 . انا اعلم هذا:

def lstm_cell():
      # With the latest TensorFlow source code (as of Mar 27, 2017),
      # the BasicLSTMCell will need a reuse parameter which is unfortunately not
      # defined in TensorFlow 1.0. To maintain backwards compatibility, we add
      # an argument check here:
      if 'reuse' in inspect.getargspec(
          tf.contrib.rnn.BasicLSTMCell.__init__).args:
        return tf.contrib.rnn.BasicLSTMCell(
            size, forget_bias=0.0, state_is_tuple=True,
            reuse=tf.get_variable_scope().reuse)
      else:
        return tf.contrib.rnn.BasicLSTMCell(
            size, forget_bias=0.0, state_is_tuple=True)
    attn_cell = lstm_cell

    lstm_creator = lstm_cell
    if is_training and keep_prob < 1:
      cell_creator = lambda:tf.contrib.rnn.DropoutWrapper(
          lstm_creator(), output_keep_prob=keep_prob)
    else:
      cell_creator = lstm_creator

    cell = tf.contrib.rnn.MultiRNNCell([cell_creator() for _ in range(num_layers)], state_is_tuple=True)

انها تعمل الآن بشكل كامل

محاولة تشغيل هذا الشيء الذي ينتج عنه نفس الخطأ:

https://gist.github.com/danijar/c7ec9a30052127c7a1ad169eeb83f159#file -blog_tensorflow_sequence_classification-py-L38

حل pltrdy لم يفعل ذلك بالنسبة لي بشكل غريب. انا احصل

ValueError: Variable rnn/multi_rnn_cell/cell_0/basic_lstm_cell/weights does not exist, or was not created with tf.get_variable(). Did you mean to set reuse=None in VarScope?

aep هل استخدمت وظيفة https://github.com/tensorflow/models/blob/master/tutorials/rnn/ptb/ptb_word_lm.py#L112 التي أذكرها في نهاية رسالتي (تم تعديلها الآن لتكون أكثر وضوحًا )

cells=[]
for _ in range(15):
    cell = create_lstm_cell(config)
    cells.append(cell)
lsmt_layers = rnn.MultiRNNCell(cells)

لقد حلت مشكلتي

تمكنت من إصلاح هذه المشكلة عن طريق تثبيت الإصدار الأقدم من Tensorflow:
pip install -Iv tensorflow==1.0

كنت أتلقى الخطأ عند تنفيذ البرنامج التعليمي seq2seq

فيما يتعلق بما قاله ebrevdo ، أعتقد أن الحل ليس إصلاح رمز seq2seq القديم ، ولكن لتحديث البرنامج التعليمي لاستخدام الحزمة contrib.seq2seq بدلاً من ذلك ، والتي يتم صيانتها بنشاط. إنه أمر محبط للغاية عندما يقوم أول برنامج Tensorflow قمت بتشغيله على الإطلاق بإخراج مجموعة من الأخطاء. إذا كان لدي بعض الوقت هذا الأسبوع ، فسأرسل PR.

نحن نعمل على برنامج تعليمي جديد لـ seq2seq. كنا نأمل في الإفراج بنهاية
الشهر الماضي لكنها تتأخر. سيستخدم API الجديد.

في 1 مايو 2017 الساعة 8:07 صباحًا ، كتب "Kyle Teague" [email protected] :

فيما يتعلق بما قاله ebrevdo https://github.com/ebrevdo ، على ما أعتقد
لا يكمن الحل في إصلاح كود seq2seq القديم ، ولكن في تحديث
البرنامج التعليمي لاستخدام الحزمة Contrib.seq2seq بدلاً من ذلك ، وهي نشطة
مصانة. إنه أمر محبط للغاية عند أول برنامج tensorflow لك
من أي وقت مضى تشغيل يبصق مجموعة من الأخطاء. إذا كان لدي بعض الوقت هذا الأسبوع ، فسأفعل ذلك
تقديم العلاقات العامة.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-298350307 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim587xZx9Gi4-yXmwccSum8_Trc1oks5r1fUogaJpZM4MWl4f
.

ebrevdo واجهت نفس الخطأ عند تشغيل نموذج التسلسل التسلسلي على موقع tensorflow1.1. وقد حاولت استخدام معلمة "إعادة الاستخدام" لكنها فشلت. هل يمكن أن تخبرني متى سيصدر البرنامج التعليمي seq2seq الجديد؟

يبدو في نفس الوقت مثل tf 1.2 ، لأننا سنعتمد على بعض الميزات الجديدة
ميزات هذا الإصدار.

في 4 مايو 2017 الساعة 9:16 مساءً ، كتب "njuzrs" [email protected] :

ebrevdo https://github.com/ebrevdo أواجه نفس الخطأ عند التشغيل
نموذج التسلسل إلى التسلسل على موقع Tensorflow1.1. وقد حاولت
لاستخدام معلمة "إعادة استخدام" لكنها فشلت. هل يمكن أن تخبرني عند ظهور seq2seq الجديد
سيتم الافراج عن البرنامج التعليمي؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-299366774 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim8_kFTM7-SsXQAA-Ar0dfhHMGT0Zks5r2qKngaJpZM4MWl4f
.

ebrevdo أنا أيضًا أواجه نفس المشكلة وغير قادر على التقدم مع seq2seq. سيكون من المفيد حقًا أن تخبرني / تخبرني ما هو التاريخ المحتمل لبرنامج تعليمي جديد.
شكرا جزيلا لمساعدتكم.

التثبيت باستخدام pip install tensorflow==1.0 (Tensorflow 1.0) يعمل بالنسبة لي (ترجمة البرنامج التعليمي).

لدي الإصدار 1.1.0-rc2.

سوف TF1.2 حل هذه المشكلة؟ الرجاء مساعدتي في كيفية مواصلة تدريب النموذج. يعمل TF 1.0 ولكن لا يحتوي على واجهة برمجة تطبيقات للجهاز لوحدات معالجة رسومات متعددة.

وجود نفس المشكلة مع تدفق الموتر 1.1. ما زلت أعمل على حل

لقد جربت عدة أشياء ، في النهاية تمكنت من استخدام tensorflow 1.1 ولكن كان علي إجراء هذه التغييرات: (بناءً على Tshzzz أعلاه)

احذف هذا:
multicell = rnn.MultiRNNCell([dropcell]*NLAYERS, state_is_tuple=False)

وأضف هذا:
الخلايا = []
لـ _ في النطاق (NLAYERS):
خلية = rnn.DropoutWrapper (tf.contrib.rnn.GRUCell (INTERNALSIZE) ، input_keep_prob = pkeep)
cell.append (خلية)
multicell = rnn.MultiRNNCell (الخلايا ، state_is_tuple = False)

ebrevdo تهانينا ، تم إصدار TF 1.2 للتو - هل تم إصدار البرنامج التعليمي الجديد أيضًا في مكان ما أم سيتم إصداره في أي وقت قريبًا؟

شكرا

سنخطط للحصول على إعلان عند إصداره. أعمل عليه.

في 19 مايو 2017 ، الساعة 7:02 مساءً ، كتب "prashantserai" [email protected] :

ebrevdo https://github.com/ebrevdo تهانينا ، حصلت TF 1.2 للتو
تم إصداره - هل تم إصدار البرنامج التعليمي الجديد أيضًا في مكان ما أو يتم إصداره
صدر في أي وقت قريب؟

شكرا

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-302844002 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim0RWDzNCXk-bIjKSyHLvgFxUvq2lks5r7km7gaJpZM4MWl4f
.

بالنسبة لأي شخص يستخدم tensorflow-gpu == 1.1.0 ويحصل على هذا الخطأ ، فإن التبديل إلى 1.0.0 عبر تثبيت Pip tensorflow-gpu == 1.0.0 لن يصلح المشكلة ، على الأقل لم ينجح معي.

واجهت هذه المشكلة على كل من mac و ubuntu وعمل التجميع من المصدر في المرتين. لذا:
تثبيت Pip https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0-cp34-cp34m-linux_x86_64.whl

ajaanbaahu ما زلت تنتظر البرنامج التعليمي الجديد tf1.2 seq2seq.

لقد نجحت معي باستخدام pip install tensorflow==1.0 .

بالنسبة إلى tf r1.2 ، حدث خطأ في النسخ العميق. كما هو مدرج في تسلسل خطأ النموذج رقم 1050

بصفتي مبتدئًا ، أثير بعضًا من رأيي.
الكود التالي سيجعل هذا الخطأ مشابهًا:
(قطعة من الكود الخاص بي)

lstm_cell = self.LSTMCell(self.num_hidden)
lstm_entity = tf.contrib.rnn.DropoutWrapper(lstm_cell, output_keep_prob=0.5)
layer = tf.contrib.rnn.MultiRNNCell([lstm_entity] * self.num_layer)
__, _ = tf.nn.dynamic_rnn(layer, self.data, dtype=tf.float64)

تفريغ الخطأ على النحو التالي:

Traceback (most recent call last):
  File "IntentNet.py", line 71, in <module>
    net = Net(data, target, 5, 1)
  File "IntentNet.py", line 45, in __init__
    __, _ = tf.nn.dynamic_rnn(layer, self.data, dtype=tf.float64)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py", line 553, in dynamic_rnn
    dtype=dtype)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py", line 720, in _dynamic_rnn_loop
    swap_memory=swap_memory)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2623, in while_loop
    result = context.BuildLoop(cond, body, loop_vars, shape_invariants)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2456, in BuildLoop
    pred, body, original_loop_vars, loop_vars, shape_invariants)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/control_flow_ops.py", line 2406, in _BuildLoop
    body_result = body(*packed_vars_for_body)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py", line 705, in _time_step
    (output, new_state) = call_cell()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/rnn.py", line 691, in <lambda>
    call_cell = lambda: cell(input_t, state)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py", line 953, in __call__
    cur_inp, new_state = cell(cur_inp, cur_state)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py", line 713, in __call__
    output, new_state = self._cell(inputs, state, scope)
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py", line 235, in __call__
    with _checked_scope(self, scope or "basic_lstm_cell", reuse=self._reuse):
  File "/usr/lib/python2.7/contextlib.py", line 17, in __enter__
    return self.gen.next()
  File "/usr/local/lib/python2.7/dist-packages/tensorflow/contrib/rnn/python/ops/core_rnn_cell_impl.py", line 77, in _checked_scope
    type(cell).__name__))
ValueError: Attempt to reuse RNNCell <tensorflow.contrib.rnn.python.ops.core_rnn_cell_impl.BasicLSTMCell object at 0x7fe4fc7bd150> with a different variable scope than its first use.  First use of cell was with scope 'rnn/multi_rnn_cell/cell_0/basic_lstm_cell', this attempt is with scope 'rnn/multi_rnn_cell/cell_1/basic_lstm_cell'.  Please create a new instance of the cell if you would like it to use a different set of weights.  If before you were using: MultiRNNCell([BasicLSTMCell(...)] * num_layers), change to: MultiRNNCell([BasicLSTMCell(...) for _ in range(num_layers)]).  If before you were using the same cell instance as both the forward and reverse cell of a bidirectional RNN, simply create two instances (one for forward, one for reverse).  In May 2017, we will start transitioning this cell's behavior to use existing stored weights, if any, when it is called with scope=None (which can lead to silent model degradation, so this error will remain until then.)

ولكن بعد إجراء المراجعة ، يمكن أن تنجح.

"""
lstm_cell = self.LSTMCell(self.num_hidden)
lstm_entity = tf.contrib.rnn.DropoutWrapper(lstm_cell, output_keep_prob=0.5)
layer = tf.contrib.rnn.MultiRNNCell([lstm_entity] * self.num_layer)
"""
layer = []
for i in range(self.num_layer):
    lstm_cell = self.LSTMCell(self.num_hidden)
    lstm_entity = tf.contrib.rnn.DropoutWrapper(lstm_cell, output_keep_prob=0.5)
    layer.append(lstm_entity)
layer = tf.contrib.rnn.MultiRNNCell(layer)
__, _ = tf.nn.dynamic_rnn(layer, self.data, dtype=tf.float64)

لم تنجح أي من هذه الحلول بالنسبة لي مع Tensorflow 1.1

أنا أستخدم نموذج seq2seq مع خلايا MultiRNNCell .

اضطررت للعودة إلى 1.0.1: pip3 install tensorflow==1.0

هل يواجه أي شخص هذه المشكلات عند العمل مع legacy_seq2seq.rnn_decoder ()؟

oxwsds كما قلت ، قمت بتغيير خلية أرغس الإدخال من tf.contrib.legacy_seq2seq.embedding_attention_seq2seq إلى خليتين مختلفتين {encoder_cells، decoder_cells}. أخيرًا ، أحصل على نموذج seq2seq يعمل. بعد 73200 setps ، أصاب بالحيرة 5.54.
ثم أقوم بتشغيل جزء فك التشفير ،

من هو رئيس الولايات المتحدة؟
Qui est le président des États-Unis؟

تم حل المشكلة. شكرا.

ههههههههههه
يبدو أن copy.deepcopy(cell) في seq2seq.py ليس له أي تأثير.
لذلك قمت بتغيير الجزء ذي الصلة في seq2seq_model.py إلى

if num_layers > 1:
      cell_enc = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])
      cell_dec = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])

    # The seq2seq function: we use embedding for the input and attention.
    def seq2seq_f(encoder_inputs, decoder_inputs, do_decode):
      return seq2seq.embedding_attention_seq2seq(
          encoder_inputs,
          decoder_inputs,
          cell_enc,
          cell_dec,
          num_encoder_symbols=source_vocab_size,
          num_decoder_symbols=target_vocab_size,
          embedding_size=size,
          output_projection=output_projection,
          feed_previous=do_decode,
          dtype=dtype)

@ supermeatboy82 ، هل يمكنك مشاركة الكود الخاص بك؟

الترقية إلى Tensorflow 1.2.0 وإنشاء الخلايا في حلقة بدلاً من قائمة الضرب ، تم إصلاح هذا بالنسبة لي.

حصلت على الخطأ مع TF1.2 عند تشغيل translate.py ، التفاصيل:
الاسم: GeForce GTX 1080 Ti
رئيسي: 6 ثانوي: 1 MemoryClockRate (جيجاهرتز) 1.582
معرف PCiBus 0000: 02: 00.0
إجمالي الذاكرة: 10.91 جيجا بايت
الذاكرة المجانية: 10.76 جيجا بايت
22-06-2017 09: 15: 04.485252: I tensorflow / core / common_runtime / gpu / gpu_device.cc: 961] DMA: 0
22-06-2017 09: 15: 04.485256: I tensorflow / core / common_runtime / gpu / gpu_device.cc: 971] 0: Y
2017-06-22 09: 15: 04.485265: I tensorflow / core / common_runtime / gpu / gpu_device.cc: 1030] إنشاء جهاز TensorFlow (/ gpu: 0) -> (الجهاز: 0 ، الاسم: GeForce GTX 1080 Ti ، PCI رقم الحافلة: 0000: 02: 00.0)
إنشاء 3 طبقات من 1024 وحدة.
Traceback (آخر مكالمة أخيرة):
ملف "translate.py" ، السطر 322 ، بتنسيق
tf.app.run ()
ملف "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/platform/app.py" ، السطر 48 ، قيد التشغيل
_sys.exit (main (_sys.argv [: 1] + flags_passthrough))
ملف "translate.py" ، السطر 319 ، بشكل رئيسي
يدرب()
ملف "translate.py" ، السطر 178 ، في القطار
النموذج = create_model (sess، False)
ملف "translate.py" ، السطر 136 ، في create_model
نوع dtype = نوع dtype)
ملف "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py" ، السطر 179 ، في __init__
softmax_loss_function = softmax_loss_function)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py" ، السطر 1206 ، في model_with_buckets
decoder_inputs [: دلو [1]])
ملف "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py" ، السطر 178 ، في
lambda x ، y: seq2seq_f (x ، y ، False) ،
ملف "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py" ، السطر 142 ، في seq2seq_f
نوع dtype = نوع dtype)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py" ، السطر 848 ، في embedding_attention_seq2seq
encoder_cell = copy.deepcopy (خلية)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 174 ، في النسخ العميق
y = ناسخة (مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py" ، السطر 476 ، في __deepcopy__
setattr (نتيجة، k، copy.deepcopy (v، memo))
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 230 ، في _deepcopy_list
y.append (نسخة عميقة (أ ، مذكرة))
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 230 ، في _deepcopy_list
y.append (نسخة عميقة (أ ، مذكرة))
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 230 ، في _deepcopy_list
y.append (نسخة عميقة (أ ، مذكرة))
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 237 ، في _deepcopy_tuple
y.append (نسخة عميقة (أ ، مذكرة))
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 334 ، في _reconstruct
الدولة = نسخة عميقة (حالة ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 163 ، في النسخ العميق
ص = ناسخة (س ، مذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 257 ، في _deepcopy_dict
y [deepcopy (key، memo)] = deepcopy (القيمة ، المذكرة)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 190 ، في النسخ العميق
y = _reconstruct (x، rv، 1، memo)
ملف "/home/lscm/opt/anaconda2/lib/python2.7/copy.py" ، السطر 343 ، في _reconstruct
y .__dict __. تحديث (حالة)
AttributeError: الكائن "NoneType" ليس له سمة "تحديث"

لقد واجهت أيضًا الخطأ الناتج عن copy.deepcopy(cell) في embedding_attention_seq2seq() عند تشغيل self_test() في نموذج الترجمة في البرنامج التعليمي.
حاولت تغيير الرموز في seq2seq_f() في Seq2SeqModel على النحو التالي:

    def seq2seq_f(encoder_inputs, decoder_inputs, do_decode=False):
        tmp_cell = copy.deepcopy(cell) #new
        return tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(
            encoder_inputs,
            decoder_inputs,
            tmp_cell, #new
            num_encoder_symbols=source_vocab_size,
            num_decoder_symbols=target_vocab_size,
            embedding_size=size,
            output_projection=output_projection,
            feed_previous=do_decode,
            dtype=dtype)

ثم ليس هناك خطأ الآن.
لكن بصفتي مبتدئًا ، لا أعرف ما إذا كانت الرموز هنا تعمل كما كان من قبل ويبدو أن التغييرات تجعل النموذج يعمل بشكل أبطأ.

أرغب في تحديث الجميع بأنني قمت بخفض مستوى تدفق التنسور إلى 1.0.0 (tensorflow-GPU) وهو يعمل بالنسبة لي. النماذج تعمل كما هو متوقع. أفترض أن إصدار وحدة المعالجة المركزية 1.0.0 يجب أن يعمل كما هو متوقع؟ أو؟.
شكرا :)

مرحبًا يا رفاق ، لا أعرف ما إذا كنت لا تزال مهتمًا بها ، لكنني وجدت أن المشكلة تتعلق بعملية نسخ الخلية التي تم تمريرها كمعلمات إلى الوظيفة embedding_attention_seq2seq . هذا بسبب استخدام نفس تعريف الخلية لكل من وحدة التشفير ووحدة فك التشفير. أعتقد أن البرنامج التعليمي مهمل لأنه يستخدم نموذج seq2seq مع الجرافات على عكس seq2seq الديناميكي. لكني ألصق وظيفة معدلة تعمل. يتم تحديث الوظيفة في الملف tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py .

شكرا،
فابيو

بيثون
def embedding_attention_seq2seq (encoder_inputs،
مدخلات فك التشفير ،
enc_cell ،
dec_cell ،
num_encoder_symbols ،
num_decoder_symbols ،
التضمين الحجم ،
عدد_الرؤوس = 1 ،
output_project = لا شيء ،
feed_previous = False،
نوع dtype = لا شيء ،
النطاق = لا شيء ،
initial_state_attention = خطأ):
"" تضمين نموذج التسلسل إلى التسلسل مع الانتباه.

يقوم هذا النموذج أولاً بتضمين مدخلات encoder عن طريق التضمين الذي تم إنشاؤه حديثًا (للشكل
[عدد_رموز_التشفير x حجم_المدخلات]). ثم يقوم بتشغيل RNN للتشفير
encoder_inputs المضمنة في متجه الحالة. إنها تحافظ على مخرجات هذا
RNN في كل خطوة لاستخدامها للفت الانتباه لاحقًا. بعد ذلك ، يقوم بتضمين مدخلات فك التشفير
بواسطة دمج آخر تم إنشاؤه حديثًا (للشكل [عدد_فكودر_رموز x
حجم_المدخلات]). ثم يتم تشغيل وحدة فك ترميز الانتباه ، تمت تهيئتها مع الأخير
حالة المشفر ، على مدخلات وحدة فك التشفير المضمنة والاهتمام بمخرجات المشفر.

تحذير: عندما يكون output_project لا شيء ، فإن حجم موجهات الانتباه
والمتغيرات ستكون متناسبة مع num_decoder_symbols ، يمكن أن تكون كبيرة.

أرغس:
encoder_inputs: قائمة 1D int32 Tensors من الشكل [batch_size].
decoder_inputs: قائمة موتر 1D int32 الشكل [حجم_دفعة].
الخلية: tf.nn.rnn_cell.RNNCell تحدد وظيفة الخلية وحجمها.
num_encoder_symbols: عدد صحيح ؛ عدد الرموز على جانب المشفر.
num_decoder_symbols: عدد صحيح ؛ عدد الرموز على جانب وحدة فك التشفير.
embedding_size: عدد صحيح ، طول متجه التضمين لكل رمز.
num_heads: عدد رؤوس الانتباه التي تقرأ من حالة_الاهتمام.
output_project: لا شيء أو زوج (W ، B) من أوزان الإسقاط الناتج و
التحيزات. W له شكل [output_size x num_decoder_symbols] و B. له شكل
الشكل [num_decoder_symbols] ؛ إذا تم توفيره و feed_previous = True ، لكل منهما
سيتم ضرب الناتج السابق الذي يتم تغذيته أولاً بـ W وإضافة B.
feed_previous: تنسور منطقي أو منطقي عددي ؛ إذا كان هذا صحيحًا ، فالأول فقط
of decoder_inputs سيتم استخدامها (رمز "GO") ، وجميع وحدات فك التشفير الأخرى
سيتم أخذ المدخلات من المخرجات السابقة (كما في embedding_rnn_decoder).
إذا كان خطأ ، يتم استخدام decoder_inputs على النحو الوارد (حالة وحدة فك التشفير القياسية).
dtype: نوع dtype لحالة RNN الأولية (الافتراضي: tf.float32).
النطاق: VariableScope للرسم البياني الفرعي المُنشأ ؛ التخلف عن السداد
"embedding_attention_seq2seq".
initial_state_attention: إذا كانت False (افتراضيًا) ، فإن الانتباه الأولي يساوي صفرًا.
إذا كان هذا صحيحًا ، فقم بتهيئة الانتباه من الحالة الأولية والانتباه
تنص على.

عائدات:
مجموعة النموذج (المخرجات ، الحالة) ، حيث:
المخرجات: قائمة بنفس الطول مثل decoder_inputs of 2D Tensors with
الشكل [batch_size x num_decoder_symbols] يحتوي على الناتج
النواتج.
الحالة: حالة كل خلية مفكك تشفير في الخطوة الزمنية النهائية.
وهو موتر ثنائي الأبعاد للشكل [حجم_الدفعة x خلية.حالة_حجم].
""
مع Variable_scope.variable_scope (
النطاق أو "embedding_attention_seq2seq" ، dtype = dtype) كنطاق:
dtype = النطاق
# التشفير.

encoder_cell = enc_cell

encoder_cell = core_rnn_cell.EmbeddingWrapper(
    encoder_cell,
    embedding_classes=num_encoder_symbols,
    embedding_size=embedding_size)
encoder_outputs, encoder_state = rnn.static_rnn(
    encoder_cell, encoder_inputs, dtype=dtype)

# First calculate a concatenation of encoder outputs to put attention on.
top_states = [
    array_ops.reshape(e, [-1, 1, encoder_cell.output_size]) for e in encoder_outputs
]
attention_states = array_ops.concat(top_states, 1)

# Decoder.
output_size = None
if output_projection is None:
  dec_cell = core_rnn_cell.OutputProjectionWrapper(dec_cell, num_decoder_symbols)
  output_size = num_decoder_symbols

if isinstance(feed_previous, bool):
  return embedding_attention_decoder(
      decoder_inputs,
      encoder_state,
      attention_states,
      dec_cell,
      num_decoder_symbols,
      embedding_size,
      num_heads=num_heads,
      output_size=output_size,
      output_projection=output_projection,
      feed_previous=feed_previous,
      initial_state_attention=initial_state_attention)

# If feed_previous is a Tensor, we construct 2 graphs and use cond.
def decoder(feed_previous_bool):
  reuse = None if feed_previous_bool else True
  with variable_scope.variable_scope(
      variable_scope.get_variable_scope(), reuse=reuse):
    outputs, state = embedding_attention_decoder(
        decoder_inputs,
        encoder_state,
        attention_states,
        dec_cell,
        num_decoder_symbols,
        embedding_size,
        num_heads=num_heads,
        output_size=output_size,
        output_projection=output_projection,
        feed_previous=feed_previous_bool,
        update_embedding_for_previous=False,
        initial_state_attention=initial_state_attention)
    state_list = [state]
    if nest.is_sequence(state):
      state_list = nest.flatten(state)
    return outputs + state_list

outputs_and_state = control_flow_ops.cond(feed_previous,
                                          lambda: decoder(True),
                                          lambda: decoder(False))
outputs_len = len(decoder_inputs)  # Outputs length same as decoder inputs.
state_list = outputs_and_state[outputs_len:]
state = state_list[0]
if nest.is_sequence(encoder_state):
  state = nest.pack_sequence_as(
      structure=encoder_state, flat_sequence=state_list)
return outputs_and_state[:outputs_len], state

""

fabiofumarola شكرًا لك على الوظيفة. تبدو مفيدة حقًا. رأيت أيضًا أنه تم إيقاف البرنامج التعليمي. ما زلت في انتظار إصدار تعليمي رسمي. يبدو أنك استخدمت واجهة برمجة التطبيقات الجديدة. هل لديك أي كود يمكن البحث عنه لبدء الترميز على واجهة برمجة التطبيقات الجديدة؟
أي مساعدة هي موضع تقدير. شكرا مرة اخرى :)

@ syw2014 هل أصلحت مشكلتك؟

@ w268wang ليس بعد ، ما زلت في انتظار حلول أخرى ، لكن تعليقات Miopas قد تكون محاولة ، وأنا أحاول حل fabiofumarola @

تقول TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'
بعد استخدام التحديث الذي نشره fabiofumarola . هل يمكنكم مساعدتي يا رفاق؟

نعم لأن التحديث الذي اقترحته يتطلب منك تغيير
الدالة embedding_attention_seq2seq. إذا ذهبت إلى الملف المصدر بداخلك
إصدار tensorflow يمكنك تغيير تعريف الطريقة التي تعيدها بنفسك.

يوم الأحد ، 2 يوليو 2017 الساعة 18:15 ، sachinh35 [email protected] trote

تقول TypeError: embedding_attention_seq2seq () مفقود 1 مطلوب
الحجة الموضعية: 'dec_cell'

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312500996 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABepUEc3W8m5CVDQGnCLu4dcJVFwwLDZks5sJ8IOgaJpZM4MWl4f
.

>

مرسلة من Gmail Mobile

نعم فعلت نفس الشيء. لقد غيرت الوظيفة في ملف seq2seq.py في إصدار tensorflow. ما زلت أتلقى نفس الخطأ. هل هناك حجة أخرى للدالة؟

نعم ، الآن في رمزك تحتاج إلى تحديد لـ rnn_cells. واحد لبرنامج التشفير
وآخر لوحدة فك الترميز.

في يوم الأحد ، 2 يوليو 2017 الساعة 20:54 ، كتب fabio fumarola [email protected] :

نعم

في يوم الأحد ، 2 يوليو 2017 الساعة 18:50 ، كتب sachinh35 [email protected] :

نعم فعلت نفس الشيء. لقد غيرت الوظيفة في ملف seq2seq.py بتنسيق
الافراج عن tensorflow. ما زلت أتلقى نفس الخطأ. هناك واحد
المزيد من الحجة للدالة؟

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312503106 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABepUOXTQC_mzLuhcwW0iZRVkLmmr8yIks5sJ8pugaJpZM4MWl4f
.

>

مرسلة من Gmail Mobile

أنا جديد تمامًا على هذا. ربما يكون هذا سؤالًا أساسيًا جدًا ولكن هل يمكنك تحديد الحجة التي سيتم تمريرها كخلية وحدة فك التشفير في هذا الرمز؟ أحاول تطوير seq2seq كما هو موضح في البرنامج التعليمي tensorflow باستخدام مجموعة البيانات الخاصة.

"
من __future__ استيراد مطلق_استيراد
من قسم الاستيراد __future__
من __future__ استيراد print_function

استيراد عشوائي

استيراد numpy كـ np
من six.moves استيراد xrange # pylint: تعطيل = تم إعادة تعريفه
استيراد tensorflow مثل tf

استيراد data_utils

فئة Seq2SeqModel (كائن):
def __init __ (ذاتي ،
source_vocab_size ،
target_vocab_size ،
دلاء
بحجم،
عدد_الطبقات
max_gradient_norm ،
حجم الدفعة،
معدل التعليم،
Learning_rate_decay_factor ،
use_lstm = خطأ ،
عدد_العينات = 512 ،
forward_only = خطأ ،
نوع dtype = tf.float32):

self.source_vocab_size = source_vocab_size
self.target_vocab_size = target_vocab_size
self.buckets = buckets
self.batch_size = batch_size
self.learning_rate = tf.Variable(
    float(learning_rate), trainable=False, dtype=dtype)
self.learning_rate_decay_op = self.learning_rate.assign(
    self.learning_rate * learning_rate_decay_factor)
self.global_step = tf.Variable(0, trainable=False)


output_projection = None
softmax_loss_function = None

if num_samples > 0 and num_samples < self.target_vocab_size:
  w_t = tf.get_variable("proj_w", [self.target_vocab_size, size], dtype=dtype)
  w = tf.transpose(w_t)
  b = tf.get_variable("proj_b", [self.target_vocab_size], dtype=dtype)
  output_projection = (w, b)

  def sampled_loss(labels, inputs):
    labels = tf.reshape(labels, [-1, 1])

    local_w_t = tf.cast(w_t, tf.float32)
    local_b = tf.cast(b, tf.float32)
    local_inputs = tf.cast(inputs, tf.float32)
    return tf.cast(
        tf.nn.sampled_softmax_loss(local_w_t, local_b, local_inputs, labels,
                                   num_samples, self.target_vocab_size),
        dtype)
  softmax_loss_function = sampled_loss


def single_cell():
  return tf.nn.rnn_cell.GRUCell(size)
if use_lstm:
  def single_cell():
    return tf.nn.rnn_cell.BasicLSTMCell(size)
cell = single_cell()
if num_layers > 1:
  cell = tf.nn.rnn_cell.MultiRNNCell([single_cell() for _ in range(num_layers)])


def seq2seq_f(encoder_inputs, decoder_inputs, do_decode):
  return tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(
      encoder_inputs,
      decoder_inputs,
      cell,
      num_encoder_symbols=source_vocab_size,
      num_decoder_symbols=target_vocab_size,
      embedding_size=size,
      output_projection=output_projection,
      feed_previous=do_decode,
      dtype=dtype)


self.encoder_inputs = []
self.decoder_inputs = []
self.target_weights = []
for i in xrange(buckets[-1][0]):  # Last bucket is the biggest one.
  self.encoder_inputs.append(tf.placeholder(tf.int32, shape=[None],
                                            name="encoder{0}".format(i)))
for i in xrange(buckets[-1][1] + 1):
  self.decoder_inputs.append(tf.placeholder(tf.int32, shape=[None],
                                            name="decoder{0}".format(i)))
  self.target_weights.append(tf.placeholder(dtype, shape=[None],
                                            name="weight{0}".format(i)))

# Our targets are decoder inputs shifted by one.
targets = [self.decoder_inputs[i + 1]
           for i in xrange(len(self.decoder_inputs) - 1)]

# Training outputs and losses.
if forward_only:
  self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
      self.encoder_inputs, self.decoder_inputs, targets,
      self.target_weights, buckets, lambda x, y: seq2seq_f(x, y, True),
      softmax_loss_function=softmax_loss_function)
  # If we use output projection, we need to project outputs for decoding.
  if output_projection is not None:
    for b in xrange(len(buckets)):
      self.outputs[b] = [
          tf.matmul(output, output_projection[0]) + output_projection[1]
          for output in self.outputs[b]
      ]
else:
  self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
      self.encoder_inputs, self.decoder_inputs, targets,
      self.target_weights, buckets,
      lambda x, y: seq2seq_f(x, y, False),
      softmax_loss_function=softmax_loss_function)

# Gradients and SGD update operation for training the model.
params = tf.trainable_variables()
if not forward_only:
  self.gradient_norms = []
  self.updates = []
  opt = tf.train.GradientDescentOptimizer(self.learning_rate)
  for b in xrange(len(buckets)):
    gradients = tf.gradients(self.losses[b], params)
    clipped_gradients, norm = tf.clip_by_global_norm(gradients,
                                                     max_gradient_norm)
    self.gradient_norms.append(norm)
    self.updates.append(opt.apply_gradients(
        zip(clipped_gradients, params), global_step=self.global_step))

self.saver = tf.train.Saver(tf.global_variables())

خطوة def (self، session، encoder_inputs، decoder_inputs، target_weights،
bucket_id ، forward_only):

# Check if the sizes match.
encoder_size, decoder_size = self.buckets[bucket_id]
if len(encoder_inputs) != encoder_size:
  raise ValueError("Encoder length must be equal to the one in bucket,"
                   " %d != %d." % (len(encoder_inputs), encoder_size))
if len(decoder_inputs) != decoder_size:
  raise ValueError("Decoder length must be equal to the one in bucket,"
                   " %d != %d." % (len(decoder_inputs), decoder_size))
if len(target_weights) != decoder_size:
  raise ValueError("Weights length must be equal to the one in bucket,"
                   " %d != %d." % (len(target_weights), decoder_size))

# Input feed: encoder inputs, decoder inputs, target_weights, as provided.
input_feed = {}
for l in xrange(encoder_size):
  input_feed[self.encoder_inputs[l].name] = encoder_inputs[l]
for l in xrange(decoder_size):
  input_feed[self.decoder_inputs[l].name] = decoder_inputs[l]
  input_feed[self.target_weights[l].name] = target_weights[l]

# Since our targets are decoder inputs shifted by one, we need one more.
last_target = self.decoder_inputs[decoder_size].name
input_feed[last_target] = np.zeros([self.batch_size], dtype=np.int32)

# Output feed: depends on whether we do a backward step or not.
if not forward_only:
  output_feed = [self.updates[bucket_id],  # Update Op that does SGD.
                 self.gradient_norms[bucket_id],  # Gradient norm.
                 self.losses[bucket_id]]  # Loss for this batch.
else:
  output_feed = [self.losses[bucket_id]]  # Loss for this batch.
  for l in xrange(decoder_size):  # Output logits.
    output_feed.append(self.outputs[bucket_id][l])

outputs = session.run(output_feed, input_feed)
if not forward_only:
  return outputs[1], outputs[2], None  # Gradient norm, loss, no outputs.
else:
  return None, outputs[0], outputs[1:]  # No gradient norm, loss, outputs.

def get_batch (self، data، bucket_id):

encoder_size, decoder_size = self.buckets[bucket_id]
encoder_inputs, decoder_inputs = [], []

# Get a random batch of encoder and decoder inputs from data,
# pad them if needed, reverse encoder inputs and add GO to decoder.
for _ in xrange(self.batch_size):
  encoder_input, decoder_input = random.choice(data[bucket_id])

  # Encoder inputs are padded and then reversed.
  encoder_pad = [data_utils.PAD_ID] * (encoder_size - len(encoder_input))
  encoder_inputs.append(list(reversed(encoder_input + encoder_pad)))

  # Decoder inputs get an extra "GO" symbol, and are padded then.
  decoder_pad_size = decoder_size - len(decoder_input) - 1
  decoder_inputs.append([data_utils.GO_ID] + decoder_input +
                        [data_utils.PAD_ID] * decoder_pad_size)

# Now we create batch-major vectors from the data selected above.
batch_encoder_inputs, batch_decoder_inputs, batch_weights = [], [], []

# Batch encoder inputs are just re-indexed encoder_inputs.
for length_idx in xrange(encoder_size):
  batch_encoder_inputs.append(
      np.array([encoder_inputs[batch_idx][length_idx]
                for batch_idx in xrange(self.batch_size)], dtype=np.int32))

# Batch decoder inputs are re-indexed decoder_inputs, we create weights.
for length_idx in xrange(decoder_size):
  batch_decoder_inputs.append(
      np.array([decoder_inputs[batch_idx][length_idx]
                for batch_idx in xrange(self.batch_size)], dtype=np.int32))

  # Create target_weights to be 0 for targets that are padding.
  batch_weight = np.ones(self.batch_size, dtype=np.float32)
  for batch_idx in xrange(self.batch_size):
    # We set weight to 0 if the corresponding target is a PAD symbol.
    # The corresponding target is decoder_input shifted by 1 forward.
    if length_idx < decoder_size - 1:
      target = decoder_inputs[batch_idx][length_idx + 1]
    if length_idx == decoder_size - 1 or target == data_utils.PAD_ID:
      batch_weight[batch_idx] = 0.0
  batch_weights.append(batch_weight)
return batch_encoder_inputs, batch_decoder_inputs, batch_weights`

هذا سؤال جيد لتجاوز سعة المكدس.

في 3 تموز (يوليو) 2017 ، الساعة 8:46 صباحًا ، كتب "sachinh35" [email protected] :

أنا جديد تمامًا على هذا. ربما يكون هذا سؤالًا أساسيًا جدًا ولكن هل يمكنك ذلك
اقول ما الحجة التي سيتم تمريرها كخلية مفكك الشفرة في هذا الكود؟ انا
محاولة تطوير seq2seq كما هو موضح في البرنامج التعليمي tensorflow باستخدام الخاص
مجموعة البيانات.
# حقوق الطبع والنشر لعام 2015 لصالح مؤلفي TensorFlow. كل الحقوق محفوظة.
مُرخصة بموجب ترخيص Apache ، الإصدار 2.0 ("الترخيص") ؛ يمكنك
لا تستخدم هذا الملف إلا بما يتوافق مع الترخيص. يمكنك الحصول على ملف
نسخة من الترخيص على http://www.apache.org/licenses/LICENSE-2.0 ما لم يكن
مطلوب بموجب القانون المعمول به أو تم الاتفاق عليه كتابيًا ، يتم توزيع البرامج
بموجب الترخيص يتم توزيعها على أساس "كما هي" ، دون ضمانات
أو شروط من أي نوع ، سواء كانت صريحة أو ضمنية. انظر الترخيص لـ
اللغة المحددة التي تحكم الأذونات والقيود بموجب

رخصة. ==================================================== ==========

"" نموذج التسلسل إلى التسلسل مع آلية الانتباه. "" "

من الاستيراد المطلق في المستقبل
من قسم الاستيراد في المستقبل
من وظيفة الطباعة المستقبلية للاستيراد

استيراد عشوائي

استيراد numpy كـ np
من six.moves استيراد xrange # pylint: تعطيل = تم إعادة تعريفه
استيراد tensorflow مثل tf

استيراد data_utils

فئة Seq2SeqModel (كائن):
نموذج التسلسل إلى التسلسل "" مع الانتباه والجرافات المتعددة.

تنفذ هذه الفئة شبكة عصبية متكررة متعددة الطبقات كمشفرة ،
وجهاز فك التشفير القائم على الانتباه. هذا هو نفس النموذج الموضح في
هذه الورقة: http://arxiv.org/abs/1412.7449 - برجاء البحث عنها
تفاصيل،
أو في مكتبة seq2seq لتنفيذ النموذج بالكامل.
تسمح هذه الفئة أيضًا باستخدام خلايا GRU بالإضافة إلى خلايا LSTM و
softmax أخذ عينات للتعامل مع حجم المفردات الناتج كبيرة. طبقة واحدة
تم تقديم نسخة من هذا النموذج ، ولكن مع جهاز تشفير ثنائي الاتجاه ، بتنسيق
http://arxiv.org/abs/1409.0473
و softmax التي تم أخذ عينات منها موصوفة في القسم 3 من الورقة التالية.
http://arxiv.org/abs/1412.2007
""

الحرف الأول def (النفس ،
source_vocab_size ،
target_vocab_size ،
دلاء
بحجم،
عدد_الطبقات
max_gradient_norm ،
حجم الدفعة،
معدل التعليم،
Learning_rate_decay_factor ،
use_lstm = خطأ ،
عدد_العينات = 512 ،
forward_only = خطأ ،
نوع dtype = tf.float32):
"" إنشاء النموذج.

أرغس:
source_vocab_size: حجم مفردات المصدر.
target_vocab_size: حجم المفردات الهدف.
المجموعات: قائمة الأزواج (I ، O) ، حيث أحدد الحد الأقصى لطول الإدخال
التي ستتم معالجتها في تلك المجموعة ، وتحدد O الحد الأقصى للإخراج
الطول. حالات التدريب التي لها مدخلات أطول من أنا أو مخرجات
أطول من O سيتم دفعها إلى الدلو التالي وتبطن وفقًا لذلك.
نفترض أن القائمة مرتبة ، على سبيل المثال ، [(2 ، 4) ، (8 ، 16)].
الحجم: عدد الوحدات في كل طبقة من النموذج.
عدد_الطبقات: عدد الطبقات في النموذج.
max_gradient_norm: سيتم قص التدرجات إلى أقصى حد لهذه القاعدة.
حجم_الدفعة: حجم الدُفعات المستخدمة أثناء التدريب ؛
بناء النموذج مستقل عن batch_size ، لذلك يمكن أن يكون
تغيرت بعد التهيئة إذا كان هذا مناسبًا ، على سبيل المثال ، لفك التشفير.
Learning_rate: معدل التعلم للبدء به.
Learning_rate_decay_factor: اضمحلال معدل التعلم بهذا القدر عند الحاجة.
use_lstm: إذا كان هذا صحيحًا ، فإننا نستخدم خلايا LSTM بدلاً من خلايا GRU.
num_samples: عدد عينات softmax المأخوذة منها.
forward_only: إذا تم الضبط ، فإننا لا نبني الممر الخلفي في النموذج.
نوع البيانات: نوع البيانات المراد استخدامه لتخزين المتغيرات الداخلية.
""
self.source_vocab_size = source_vocab_size
self.target_vocab_size = target_vocab_size
دلاء ذاتية = دلاء
self.batch_size = batch_size
self.learning_rate = tf. متغير (
عائم (Learning_rate) ، قابل للتدريب = خطأ ، نوع dtype = نوع dtype)
self.learning_rate_decay_op = self.learning_rate.assign (
self.learning_rate * learning_rate_decay_factor)
self.global_step = tf.Variable (0 ، قابل للتدريب = خطأ)

إذا استخدمنا softmax عينات ، فإننا بحاجة إلى إسقاط الإخراج.

output_project = لا شيء
softmax_loss_function = لا شيء

softmax المأخوذة من العينات لا يكون منطقيًا إلا إذا أخذنا عينات أقل من حجم المفردات.

if num_samples> 0 و num_samples <self.target_vocab_size:
w_t = tf.get_variable ("proj_w"، [self.target_vocab_size، size]، dtype = dtype)
w = tf.transpose (w_t)
b = tf.get_variable ("proj_b"، ​​[self.target_vocab_size]، dtype = dtype)
output_project = (ث ، ب)

def sampled_loss (التسميات والمدخلات):
labels = tf.reshape (تسميات ، [-1 ، 1])
# نحتاج إلى حساب sampled_softmax_loss باستخدام تعويم 32 بت إلى
# تجنب عدم الاستقرار العددي.
local_w_t = tf.cast (w_t، tf.float32)
local_b = tf.cast (b، tf.float32)
local_inputs = tf.cast (المدخلات ، tf.float32)
عودة tf.cast (
tf.nn.sampled_softmax_loss (local_w_t ، local_b ، local_inputs ، الملصقات ،
num_samples ، self.target_vocab_size) ،
نوع dtype)
softmax_loss_function = فقدان العينة

قم بإنشاء الخلية الداخلية متعددة الطبقات لـ RNN.

def single_cell ():
إرجاع tf.nn.rnn_cell.GRUCell (الحجم)
إذا use_lstm:
def single_cell ():
إرجاع tf.nn.rnn_cell.BasicLSTMCell (الحجم)
خلية = خلية واحدة ()
إذا كان عدد الطبقات> 1:
cell = tf.nn.rnn_cell.MultiRNNCell ([single_cell () لـ _ في النطاق (عدد_ طبقات)])

وظيفة seq2seq: نستخدم التضمين للإدخال والانتباه.

def seq2seq_f (encoder_inputs، decoder_inputs، do_decode):
إرجاع tf.contrib.legacy_seq2seq.embedding_attention_seq2seq (
encoder_inputs ،
مدخلات فك التشفير ،
خلية - زنزانة،
num_encoder_symbols = source_vocab_size ،
num_decoder_symbols = target_vocab_size ،
embedding_size = الحجم ،
output_project = output_project ،
feed_previous = do_decode ،
نوع dtype = نوع dtype)

يغذي للمدخلات.

self.encoder_inputs = []
self.decoder_inputs = []
self.target_weights = []
بالنسبة إلى i في xrange (دلاء [-1] [0]): # آخر دلو هو الأكبر.
self.encoder_inputs.append (tf.placeholder (tf.int32 ، شكل = [بلا] ،
الاسم = "برنامج التشفير {0}". تنسيق (i)))
بالنسبة إلى i in xrange (دلاء [-1] [1] + 1):
self.decoder_inputs.append (tf.placeholder (tf.int32 ، شكل = [بلا] ،
الاسم = "وحدة فك الترميز {0}". تنسيق (i)))
self.target_weights.append (tf.placeholder (نوع dtype ، شكل = [لا شيء] ،
الاسم = "الوزن {0}". تنسيق (ط)))

أهدافنا هي مدخلات مفكك الشفرة تحولت بواحد.

الأهداف = [self.decoder_inputs [i + 1]
لـ i in xrange (len (self.decoder_inputs) - 1)]

مخرجات التدريب وخسائره.

في حالة إعادة التوجيه فقط:
self.outputs، self.losses = tf.contrib.legacy_seq2seq.model_with_buckets (
المدخلات self.encoder ، self.decoder_inputs ، الأهداف ،
self.target_weights ، الجرافات ، lambda x ، y: seq2seq_f (x ، y ، True) ،
softmax_loss_function = softmax_loss_function)
# إذا استخدمنا إسقاط الإخراج ، فنحن بحاجة إلى إسقاط المخرجات لفك التشفير.
إذا لم يكن output_project لا شيء:
لـ b في xrange (len (دلاء)):
المخرجات الذاتية [ب] = [
tf.matmul (output، output_project [0]) + output_project [1]
للإخراج في المخرجات الذاتية [ب]
]
آخر:
self.outputs، self.losses = tf.contrib.legacy_seq2seq.model_with_buckets (
المدخلات self.encoder ، self.decoder_inputs ، الأهداف ،
self.target_weights ، دلاء ،
lambda x ، y: seq2seq_f (x ، y ، False) ،
softmax_loss_function = softmax_loss_function)

التدرجات وعملية تحديث SGD لتدريب النموذج.

المعلمات = tf.trainable_variables ()
إذا لم يتم إعادة التوجيه فقط:
self.gradient_norms = []
التحديثات الذاتية = []
opt = tf.train.GradientDescentOptimizer (self.learning_rate)
لـ b في xrange (len (دلاء)):
التدرجات = tf.gradients (الخسارة الذاتية [b] ، المعلمات)
clipped_gradients ، معيار = tf.clip_by_global_norm (التدرجات ،
max_gradient_norm)
self.gradient_norms.append (معيار)
self.updates.append (opt.apply_gradients (
zip (clipped_gradients، params)، global_step = self.global_step))

self.saver = tf.train.Saver (tf.global_variables ())

خطوة def (self، session، encoder_inputs، decoder_inputs، target_weights،
bucket_id ، forward_only):
"" "قم بتشغيل خطوة في النموذج لتغذية المدخلات المعطاة.

أرغس:
الجلسة: جلسة tensorflow للاستخدام.
encoder_inputs: قائمة بالمتجهات غير الدقيقة لتغذيتها كمدخلات مشفر.
decoder_inputs: قائمة بالمتجهات غير الدقيقة التي يجب تغذيتها كمدخلات مفكك الشفرة.
target_weights: قائمة متجهات عائمة غير متداخلة لتغذيتها كأوزان مستهدفة.
bucket_id: أي دلو من النموذج يجب استخدامه.
forward_only: ما إذا كان يجب القيام بالخطوة الخلفية أم إلى الأمام فقط.

عائدات:
ثلاثي يتكون من قاعدة متدرجة (أو لا شيء إذا لم نفعل للخلف) ،
متوسط ​​الحيرة والمخرجات.

يرفع:
ValueError: إذا كان طول encoder_inputs أو decoder_inputs أو
لا تتفق target_weights مع حجم المجموعة لـ bucket_id المحدد.
""

تحقق مما إذا كانت الأحجام متطابقة.

encoder_size، decoder_size = self.buckets [bucket_id]
إذا كان len (encoder_inputs)! = encoder_size:
زيادة ValueError ("يجب أن يكون طول برنامج التشفير مساويًا لطول الحزمة ،"
"٪ d! =٪ d." ٪ (len (إدخال_تشفير) ، حجم_تشفير))
إذا كان len (decoder_inputs)!
زيادة ValueError ("يجب أن يكون طول وحدة فك التشفير مساويًا للطول الموجود في المجموعة ،"
"٪ d! =٪ d." ٪ (len (مدخلات فك التشفير) ، حجم_فكك الشفرة))
إذا كان len (target_weights)! = decoder_size:
زيادة ValueError ("يجب أن يكون طول الأوزان مساويًا للواحد في المجموعة ،"
"٪ d! =٪ d." ٪ (len (target_weights)، decoder_size))

تغذية الإدخال: مدخلات جهاز التشفير ، ومدخلات وحدة فك التشفير ، والأوزان المستهدفة ، على النحو المنصوص عليه.

input_feed = {}
لـ l in xrange (encoder_size):
input_feed [self.encoder_inputs [l] .name] = encoder_inputs [l]
لـ l in xrange (decoder_size):
input_feed [self.decoder_inputs [l] .name] = decoder_inputs [l]
input_feed [self.target_weights [l] .name] = target_weights [l]

نظرًا لأن أهدافنا عبارة عن مدخلات مفككة تم تحويلها بواحد ، فنحن بحاجة إلى واحد آخر.

last_target = self.decoder_inputs [decoder_size] .name
input_feed [last_target] = np.zeros ([self.batch_size] ، dtype = np.int32)

تغذية الإخراج: يعتمد على ما إذا كنا نقوم بخطوة للخلف أم لا.

إذا لم يتم إعادة التوجيه فقط:
output_feed = [self.updates [bucket_id] ، # Update Op التي تقوم بعمل SGD.
self.gradient_norms [bucket_id] ، # معيار التدرج.
self.losses [bucket_id]] # خسارة لهذه الدفعة.
آخر:
output_feed = [self.losses [bucket_id]] # خسارة لهذه الدفعة.
ل في xrange (decoder_size): # سجلات الإخراج.
output_feed.append (self.outputs [bucket_id] [l])

المخرجات = Session.run (output_feed ، input_feed)
إذا لم يتم إعادة التوجيه فقط:
إرجاع المخرجات [1] ، المخرجات [2] ، لا شيء # معيار التدرج ، خسارة ، لا مخرجات.
آخر:
عودة بلا ، النواتج [0] ، النواتج [1:] # لا يوجد معيار التدرج ، الخسارة ، النواتج.

def get_batch (self، data، bucket_id):
احصل على دفعة عشوائية من البيانات من المستودع المحدد ، استعد للخطوة.

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

أرغس:
البيانات: مجموعة من الحجم len (الدواليب الذاتية) يحتوي فيها كل عنصر
قوائم بأزواج بيانات الإدخال والإخراج التي نستخدمها لإنشاء دفعة.
bucket_id: عدد صحيح ، أي مجموعة يتم الحصول على الدُفعة لها.

عائدات:
الثلاثي (encoder_inputs ، decoder_inputs ، target_weights) لـ
الدُفعة المُنشأة التي تحتوي على التنسيق المناسب لاستدعاء الخطوة (...) لاحقًا.
""
encoder_size، decoder_size = self.buckets [bucket_id]
encoder_inputs ، decoder_inputs = [] ، []

احصل على دفعة عشوائية من مدخلات التشفير وفك التشفير من البيانات ،

وسادة لهم إذا لزم الأمر ، عكس مدخلات التشفير وإضافة GO إلى وحدة فك التشفير.

لـ _ in xrange (self.batch_size):
encoder_input، decoder_input = random.choice (البيانات [bucket_id])

# مدخلات التشفير مبطنة ومن ثم عكسها.
encoder_pad = [data_utils.PAD_ID] * (حجم_ التشفير - len (encoder_input))
encoder_inputs.append (قائمة (معكوسة (encoder_input + encoder_pad)))

# تحصل مدخلات وحدة فك التشفير على رمز "GO" إضافي ، وتكون مبطنة بعد ذلك.
decoder_pad_size = حجم_فك الشفرة - len (decoder_input) - 1
decoder_inputs.append ([data_utils.GO_ID] + decoder_input +
[data_utils.PAD_ID] * decoder_pad_size)

الآن نقوم بإنشاء ناقلات رئيسية دفعة من البيانات المحددة أعلاه.

دفعات_تشفير_دخلات ، دفعات_فكودر_إينبوتس ، وزن_دفعة = [] ، [] ، []

مدخلات وحدة التشفير الدفعية هي مجرد مدخلات encoder_inputs مُعاد فهرستها.

لـ length_idx في xrange (حجم_تشفير):
Batch_encoder_inputs.append (
np.array ([encoder_inputs [batch_idx] [length_idx]
لـ batch_idx في xrange (self.batch_size)] ، dtype = np.int32))

يتم إعادة فهرسة مدخلات وحدة فك التشفير الدفعية decoder_inputs ، نقوم بإنشاء أوزان.

لـ length_idx في xrange (حجم_فك الشفرة):
batch_decoder_inputs.append (
np.array ([decoder_inputs [batch_idx] [length_idx]
لـ batch_idx في xrange (self.batch_size)] ، dtype = np.int32))

# قم بإنشاء target_weights لتكون 0 للأهداف المتروكة.
وزن الدفعة = np.ones (self.batch_size، dtype = np.float32)
من أجل batch_idx في xrange (self.batch_size):
# قمنا بتعيين الوزن على 0 إذا كان الهدف المقابل هو رمز PAD.
# الهدف المقابل هو decoder_input مزاح بمقدار 1 إلى الأمام.
إذا length_idx <decoder_size - 1:
الهدف = decoder_inputs [batch_idx] [length_idx + 1]
إذا length_idx == decoder_size - 1 أو target == data_utils.PAD_ID:
وزن_الدفعة [batch_idx] = 0.0
ربط_وزن الدفعة (وزن_الدفعة)
إرجاع الدُفعات_تشفير_المدخلات ، الدُفعات_فك الترميز_المدخلات ، الأوزان_الدفعة`

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312679587 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim0l5UMHHtbL1sz7meXserV8NVS7cks5sKQzXgaJpZM4MWl4f
.

تمام! شكرا على كل حال! :)

ebrevdo هل هناك أي تحديث حول موعد ظهور البرنامج التعليمي الجديد لـ seq2seq باستخدام واجهة برمجة تطبيقات جديدة؟
شكرا لك. عمل مدهش!.

نعم ، في انتظار البرنامج التعليمي الجديد ... سيكون من الرائع معرفة ما إذا كان من المخطط إطلاقه في أي وقت قريبًا ..ebrevdo

حاول أخذ الكود في اختبارات kernel وتعديل بحث الحزمة مع seq2seq القديم ، لكنه كان صعبًا ...

نأمل في الأسبوع القادم!

في 3 تموز (يوليو) 2017 الساعة 10:16 صباحًا ، كتب "prashantserai" [email protected] :

نعم في انتظار البرنامج التعليمي الجديد ... سيكون من الرائع معرفة ما إذا كان كذلك
من المقرر إطلاق سراحه في أي وقت قريب ..ebrevdo
https://github.com/ebrevdo

حاول أخذ التعليمات البرمجية في اختبارات kernel وتعديل البحث باستخدام الحزمة
seq2seq الإرث ، لكنه بدا صعبًا ...

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312697274 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtim45-HTuQrIRDhphqqHjqkKOKTe53ks5sKSHYgaJpZM4MWl4f
.

أهلا يا أصدقاء،

أي تحديث لهذه المشكلة ، أواجه الأمر نفسه على tensorflow 1.1-gpu لنظام التشغيل Mac OS X

@ tshi1983
لدي نفس المشكلة مع tensorflow 1.1-gpu لـ ubuntu.
أقوم بالترقية إلى tf 1.2. ما زالت لا تعمل.
ثم أقوم بتغيير الوظيفة embedding_attention_seq2seq في الملف
tensorflow / Contrib / legacy_seq2seq / python / ops / seq2seq.py
إلى الشخص كما اقترح fabiofumarola أعلاه.
الآن يبدأ التدريب. لم أختبر فك التشفير حتى الآن.

انقل الكود الموجود في تعريف الخلية إلى seq2seq_f:

def seq2seq_f(encoder_inputs, decoder_inputs, do_decode):
      def single_cell():
        return tf.contrib.rnn.GRUCell(size)
      if use_lstm:
        def single_cell():
          return tf.contrib.rnn.BasicLSTMCell(size)
      cell = single_cell()
      if num_layers > 1:
        cell = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])
      return tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(
      ...
      )

ثم "python translate.py --data_dir data / --train_dir checkpoint / --size = 256 --num_layers = 2 --steps_per_checkpoint = 50" يمكن أن تعمل.

huxuanlai إنه يعمل! على الأقل إنه يتدرب الآن ، تشك!

@ huxuanlai يعمل لي أيضًا.

أتلقى نفس AttributeError: 'NoneType' object has no attribute 'update' لكن مع tf.contrib.legacy_seq2seq.model_with_buckets . أقوم بتشغيل tf 1.2.1 (GPU) على ubuntu 16.04 lts.

يبدو أن هذا يحدث فقط عندما يكون لدي أكثر من دلو واحد.

التتبع الكامل:

Traceback (most recent call last):
  File "chatbot.py", line 262, in <module>
    main()
  File "chatbot.py", line 257, in main
    train()
  File "chatbot.py", line 138, in train
    model.build_graph()
  File "/home/jkarimi91/Projects/cs20/code/hw/a3/model.py", line 134, in build_graph
    self._create_loss()
  File "/home/jkarimi91/Projects/cs20/code/hw/a3/model.py", line 102, in _create_loss
    softmax_loss_function=self.softmax_loss_function)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 1206, in model_with_buckets
    decoder_inputs[:bucket[1]])
  File "/home/jkarimi91/Projects/cs20/code/hw/a3/model.py", line 101, in <lambda>
    lambda x, y: _seq2seq_f(x, y, False),
  File "/home/jkarimi91/Projects/cs20/code/hw/a3/model.py", line 76, in _seq2seq_f
    feed_previous=do_decode)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", line 848, in embedding_attention_seq2seq
    encoder_cell = copy.deepcopy(cell)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 174, in deepcopy
    y = copier(memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/site-packages/tensorflow/python/layers/base.py", line 476, in __deepcopy__
    setattr(result, k, copy.deepcopy(v, memo))
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 230, in _deepcopy_list
    y.append(deepcopy(a, memo))
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 237, in _deepcopy_tuple
    y.append(deepcopy(a, memo))
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 334, in _reconstruct
    state = deepcopy(state, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 163, in deepcopy
    y = copier(x, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 257, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 190, in deepcopy
    y = _reconstruct(x, rv, 1, memo)
  File "/home/jkarimi91/Apps/anaconda2/envs/tf/lib/python2.7/copy.py", line 343, in _reconstruct
    y.__dict__.update(state)
AttributeError: 'NoneType' object has no attribute 'update'

تضمين التغريدة
شكراً ، لقد نجح حلك معي. الإصدار الخاص بي هو 1.1.0.

لقد تغيرت من:

    lstm_cell = tf.contrib.rnn.BasicLSTMCell(HIDDEN_SIZE, state_is_tuple=True)
    cell = tf.contrib.rnn.MultiRNNCell([lstm_cell() for _ in range(NUM_LAYERS)])
    output, _ = tf.nn.dynamic_rnn(cell, X, dtype=tf.float32)  

ل:

    cells=[]
    for _ in range(NUM_LAYERS):
        cell = tf.contrib.rnn.BasicLSTMCell(HIDDEN_SIZE, state_is_tuple=True)
        cells.append(cell)
    multicell = tf.contrib.rnn.MultiRNNCell(cells, state_is_tuple=True)
    output, _ = tf.nn.dynamic_rnn(multicell, X, dtype=tf.float32)

هذا لم يتم إصلاحه بعد ، جرب جميع الحلول الممكنة ، تلك المذكورة في مؤشر الترابط هذا و Stackoverflow ، فهو لا يعمل مع tensorflow 1.3 أو 1.2 أو 1.1

أواجه هذا الخطأ:
TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'

يشير الخطأ إلى هذه الوظيفة في seq2seq_model.py وهو السطر 142 في seq2seq_model.py:

def seq2seq_f(encoder_inputs, decoder_inputs, do_decode): return tf.contrib.legacy_seq2seq.embedding_attention_seq2seq( encoder_inputs, decoder_inputs, cell, num_encoder_symbols=source_vocab_size, num_decoder_symbols=target_vocab_size, embedding_size=size, output_projection=output_projection, feed_previous=do_decode, dtype=dtype)

أي شخص واجه هذا الخطأ وتمكن من حل هذا الخطأ ، الرجاء مساعدتي في تصحيح هذه المشكلة.

ValueError: محاولة إعادة استخدام RNNCellبنطاق متغير مختلف عن استخدامه لأول مرة. أول استخدام للخلية كان مع النطاق "rnn / multi_rnn_cell / cell_0 / gru_cell" ، هذه المحاولة مع النطاق "rnn / multi_rnn_cell / cell_1 / gru_cell". الرجاء إنشاء مثيل جديد للخلية إذا كنت ترغب في استخدام مجموعة مختلفة من الأوزان. إذا كنت تستخدم من قبل: MultiRNNCell ([GRUCell (...)] * عدد_الطبقات) ، غيّر إلى: MultiRNNCell ([GRUCell (...) لـ _ في النطاق (عدد_ طبقات)]). إذا كنت تستخدم نفس مثيل الخلية من قبل كخلية أمامية وخلفية للخلية RNN ثنائية الاتجاه ، فقم ببساطة بإنشاء مثيلين (أحدهما للأمام والآخر للخلف). في مايو 2017 ، سنبدأ في نقل سلوك هذه الخلية لاستخدام الأوزان المخزنة الموجودة ، إن وجدت ، عندما يتم استدعاؤها بالنطاق = لا شيء (مما قد يؤدي إلى تدهور النموذج الصامت ، لذلك سيبقى هذا الخطأ حتى ذلك الحين.)

كود الأصل:
من tensorflow.contrib استيراد rnn
المدخلات = tf.placeholder (dtype = tf.int32، shape = [بلا ، بلا] ، الاسم = "المدخلات")
keep_prob = tf.placeholder (dtype = tf.float32 ، الاسم = "keep_prob")
الخلية = rnn.GRUCell (10)
cell = rnn.DropoutWrapper (cell = cell، input_keep_prob = keep_prob)
cell = rnn.MultiRNNCell ([خلية لـ _ في النطاق (5)] ، state_is_tuple = صحيح)

outs، States = tf.nn.dynamic_rnn (cell = cell، inputs = look_up، dtype = tf.float32)
المحلول:
المدخلات = tf.placeholder (dtype = tf.int32، shape = [بلا ، بلا] ، الاسم = "المدخلات")
keep_prob = tf.placeholder (dtype = tf.float32 ، الاسم = "keep_prob")
cell = rnn.MultiRNNCell ([rnn.DropoutWrapper (rnn.GRUCell (10)، input_keep_prob = keep_prob) لـ _ في النطاق (5)] ، state_is_tuple = صحيح)

هل لديك هذه المشكلة مع tf nightlies؟

في 1 أكتوبر 2017 الساعة 8:34 صباحًا ، كتب "Baohua Zhou" [email protected] :

لدي نفس المشكلة عند استخدام tensorflow 1.1 على وحدة المعالجة المركزية مع نظام التشغيل iOS.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-333384725 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/ABtimwOv7vf5vvFXBllbZryjCFwmJcU6ks5sn7DxgaJpZM4MWl4f
.

AttributeError: الكائن "NoneType" ليس له سمة "تحديث"

في tf = 1.3

ValueError: محاولة إعادة استخدام RNNCellبنطاق متغير مختلف عن استخدامه لأول مرة. كان أول استخدام للخلية مع النطاق "embedding_attention_seq2seq / rnn / multi_rnn_cell / cell_0 / gru_cell" ، وكانت هذه المحاولة ذات النطاق "embedding_attention_seq2seq / rnn / multi_rnn_cell / cell_1 / gru_cell". الرجاء إنشاء مثيل جديد للخلية إذا كنت ترغب في استخدام مجموعة مختلفة من الأوزان. إذا كنت تستخدم من قبل: MultiRNNCell ([GRUCell (...)] * عدد_الطبقات) ، غيّر إلى: MultiRNNCell ([GRUCell (...) لـ _ في النطاق (عدد_ طبقات)]). إذا كنت تستخدم نفس مثيل الخلية من قبل كخلية أمامية وخلفية للخلية RNN ثنائية الاتجاه ، فقم ببساطة بإنشاء مثيلين (أحدهما للأمام والآخر للخلف). في مايو 2017 ، سنبدأ في نقل سلوك هذه الخلية لاستخدام الأوزان المخزنة الموجودة ، إن وجدت ، عندما يتم استدعاؤها بالنطاق = لا شيء (مما قد يؤدي إلى تدهور النموذج الصامت ، لذلك سيبقى هذا الخطأ حتى ذلك الحين.)

لقد مرت 14 يومًا بدون أي نشاط وتم تعيين التصنيف awaiting tensorflower . يرجى تحديث التسمية و / أو الحالة وفقًا لذلك.

Nagging في انتظار TensorFlower: لقد مرت 14 يومًا بدون أي نشاط وتم تعيين التصنيف awaiting tensorflower . يرجى تحديث التسمية و / أو الحالة وفقًا لذلك.

الحل هو الانتقال إلى إصدار أحدث من TF. لقد تباعد هذا الموضوع بشكل جذري عن إصداره الأصلي. إغلاق.

إذا كنت تريد حلًا فوريًا ، يمكنك تجربة ما جربته:

pip install tensorflow==1.0
المشكلة مع إصدار tenorflow 1.1 ، لقد نجحت معي.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات