Tensorflow: ValueError:最初の使用とは異なる変数スコープでRNNCellを再利用しようとしました。

作成日 2017年03月08日  ·  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(...)for _ in range(num_layers)])。 以前に双方向RNNの順方向セルと逆方向セルの両方と同じセルインスタンスを使用していた場合は、2つのインスタンスを作成するだけです(1つは順方向用、もう1つは逆方向用)。 2017年5月に、scope = Noneで呼び出されたときに、既存の保存された重みを使用するようにこのセルの動作の移行を開始します(これにより、サイレントモデルの劣化が発生する可能性があるため、このエラーはそれまで続きます)。

コードフラグメントを使用:

  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)

運が悪かったのでググってみましたが、誰かが私に道を教えてもらえますか?

awaiting tensorflower

最も参考になるコメント

私は同じ問題に遭遇しました。 マスターブランチでコンパイル済みバージョンを使用している場合は、最近のコミットによって引き起こされたのと同じ問題であると思います。 コミットメッセージが言うように:

tf.contrib.rnn内のすべてのRNNCellをtf.layersレイヤーのように動作させますが、
w:

  1. __call__を最初に使用すると、使用されたスコープがセルに保存されます。 RNNCellはそのスコープで重みを作成しようとしますが、重みがすでに設定されている場合、RNNCellが引数reuse = Trueで構築されていない限り、エラーが発生します。

  2. 同じセルインスタンスの__call__の後続の使用は、同じスコープ内にある必要があります。
    そうでない場合は、エラーが発生します。

ptbチュートリアルを実行している私の場合、解決策は、112行目に次のようにreuseという名前のパラメーターを追加することです。

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にあります。

私は同じ問題に遭遇しました。 マスターブランチでコンパイル済みバージョンを使用している場合は、最近のコミットによって引き起こされたのと同じ問題であると思います。 コミットメッセージが言うように:

tf.contrib.rnn内のすべてのRNNCellをtf.layersレイヤーのように動作させますが、
w:

  1. __call__を最初に使用すると、使用されたスコープがセルに保存されます。 RNNCellはそのスコープで重みを作成しようとしますが、重みがすでに設定されている場合、RNNCellが引数reuse = Trueで構築されていない限り、エラーが発生します。

  2. 同じセルインスタンスの__call__の後続の使用は、同じスコープ内にある必要があります。
    そうでない場合は、エラーが発生します。

ptbチュートリアルを実行している私の場合、解決策は、112行目に次のようにreuseという名前のパラメーターを追加することです。

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

その後、それは動作します。

@ebrevdoこれを見ていただけませんか。

ShakespeareRNNリポジトリでWindows / GPUビルド105を使用すると、この問題が繰り返し発生します。

Win 1.0.0 / GPUリリースでコードを実行する場合、問題はありません。

そのリポジトリは、中間リリースではなく、tf1.0を対象としているように見えます。

2017年3月8日15:56、「TomWanzek」 [email protected]は次のように書いています。

シェイクスピアでWindows / GPUビルド105を使用すると、問題が再現されます
RNNレポ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のリリースバージョンを使用しており、CPUモードのMacOSで動作しています。 おかげで、「再利用」パラメータを追加して、マスターブランチが機能するかどうかを確認します。

doncat99:そうする場合は、コードがテンソルフローバージョンをクエリしていることを確認してください
バージョンがマスターブランチバージョンよりも低い場合は、フラグを立てます。
以下をチェックする必要があるかもしれません:

tensorflow.coreインポートバージョンから
version.GIT_VERSION

2017年3月8日水曜日午後6時58分、 doncat99notifications @ github.comは次のように書いています。

@tongda https://github.com/tongda 、リリースバージョンのを使用しています
Tensorflow 1.0、CPUモードでMacOSで動作します。 マスターに切り替えます
ブランチして、「再利用」パラメータを追加して機能するかどうかを確認してください。ありがとうございます。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285240438
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABtim66cU9e16lgD-2D0QLGcQCiHbV0zks5rj2rbgaJpZM4MWl4f

@ebrevdoでは、中間の安定したリリースで動作できるようにするために、ShakepeareRNNに提案される変更は何でしょうか。

コードの主要なアーキテクチャセクションは次のとおりですが、build#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(INTERNALSIZE)、
input_keep_prob = pkeep)for _ in range(NLAYERS)]、state_is_tuple = False)

これにより、レイヤーごとに個別のgrucellオブジェクトが作成されます。

2017年3月10日午前7時44分、「TomWanzek」 [email protected]は次のように書いています。

@ebrevdo https://github.com/ebrevdoでは、何が提案されるのでしょうか
Shakepeare RNNを変更して、中間体と連携できるようにします
安定したリリース?

これがコードの主要なアーキテクチャセクションですが、これは次のように失敗します
ビルド#105:

モデル(README.mdのFAQを参照)

lr = tf.placeholder(tf.float32、name = 'lr')#学習率
pkeep = tf.placeholder(tf.float32、name = '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は、入力XoのサイズからSEQLENを推測します

onecell = rnn.GRUCell(INTERNALSIZE)
dropcell = rnn.DropoutWrapper(onecell、input_keep_prob = pkeep)
multicell = rnn.MultiRNNCell([範囲内の_のドロップセル(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]#これは最後の状態です順番に

再利用フラグに関するドキュメントが見つからないようです。

前もって感謝します。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、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チュートリアルに関する上記のコメントを考えると、私たちはすべて同じボートに乗っていると思いますか?

まったく同じエラーでよろしいですか? ここにコピーして貼り付けてください。

残念ながら、関連するコードへの変更プロセスを(最初から)再度実行し、提案どおりに再実行しました。 エラーは確かに取り除かれ、オールドバードは今うまく幻覚を起こしている👍

だから、thx、昨日どこが間違っていたのかわからないが、それは明らかに私にあった。

Tensorflow 1.0のリリースバージョンを使用し、CPUモードで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)

マルチセルが間違っているように見えます...「cell()for _in」を使用する必要があります
範囲(...)"

2017年3月16日木曜日午後8時29分、 cuimingnotifications @ github.comは次のように書いています。

Tensorflow1.0のリリースバージョンを使用したときに同じ問題が発生しました
CPUモードでMacOSを操作します。「再利用」パラメータを追加しても

def cell():
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)


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、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()for _ in range(num_layers)])

しかし、私は同じエラーを受け取りました:
ValueError:RNNCellの再利用を試みます最初の使用とは異なる可変スコープを使用します。 セルの最初の使用はスコープ 'embedding_attention_seq2seq / embedding_attention_decoder / attention_decoder / multi_rnn_cell / cell_0 / gru_cell'で、この試みはスコープ 'embedding_attention_seq2seq / rnn / multi_rnn_cell / cell_0 / gru_cell'で行われました。 別の重みのセットを使用する場合は、セルの新しいインスタンスを作成してください。 以前使用していた場合:MultiRNNCell([GRUCell(...)] * num_layers)、次のように変更します:MultiRNNCell([GRUCell(...)for _ in range(num_layers)])。 以前に双方向RNNの順方向セルと逆方向セルの両方と同じセルインスタンスを使用していた場合は、2つのインスタンスを作成するだけです(1つは順方向用、もう1つは逆方向用)。 2017年5月に、scope = Noneで呼び出されたときに、既存の保存された重みを使用するようにこのセルの動作の移行を開始します(これにより、サイレントモデルの劣化が発生する可能性があるため、このエラーはそれまで続きます)。

@ bowu-これで運が良かったですか? まだ試していない場合は、最新のソースからtensorflowを再インストールしてください。 いくつかのcore_rnnファイルにいくつかの変更がありました。 今私のために働きます。

@robmsylvester最新のソースからtensorflowを再インストールしましたが、それでも同じエラーが発生します。 私はブランチマスターにいて、最新のコミットはcommit 2a4811054a9e6b83e1f5a2705a92aab50e151b13です。 リポジトリを構築するときの最新のコミットは何ですか?

こんにちは、私はソースを使用して構築されたGPUを使用してTensorflowr1.0を使用しています。 変更されていないSeq2Seq変換チュートリアルに従おうとしていますが、同じエラーが発生します。 すなわち

ValueError:RNNCellの再利用を試みます最初の使用とは異なる可変スコープを使用します。 セルの最初の使用はスコープ 'embedding_attention_seq2seq / embedding_attention_decoder / attention_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)])

問題を解決するために何ができますか?

GRUCellが作成された呼び出しに「reuse = tf.get_variable_scope()。reuse」を追加しても効果はありません。

トンありがとう!

@ prashantserai -MultiRNNCell行を上から削除して、ネットワークを事実上1つのレイヤーにした場合にどうなるかを確認します。 それで動作しますか? MultiRNNCellのどこかにバグがある可能性があります。 私は最近どこかで、おそらくスタックオーバーフローでそれについて読んだ。

スタックされたlstm / gruを自分で実装する場合、このエラーは発生せず、同じ機能を実装できます(双方向アーキテクチャ、奇妙な残差、スキップ接続などで自由に実行できるため、実際にはもっと多くの機能があります)。 。)

@robmsylvester num_layers = 1で試しても同じエラーが続き、その行を効果的にスキップするはずです。 他のアイデアはありますか? 入力ありがとうございます。

うーん。 私が目立つのは、参照されているレガシーseq2seqファイルです。

encoder_cell = copy.deepcopy(cell)

エンコーダ側とデコーダ側の両方で同じアーキテクチャが使用されているため、この行が使用されているように見えます。 セルのコピーを作成し、セルの引数をアテンションデコーダー埋め込み関数に渡し、次にアテンションデコーダー自体に渡します。

seq2seqモデルファイルにエンコーダセルとデコーダセルを明示的に作成し、両方をレガシーライブラリファイルに渡して、関数とその引数を少し調整するとどうなりますか?

@robmsylvesterは、セルのスコープを変更するべきではありませんか? 他の2つの例でも機能します。 私の意見では、これは非常に醜い回避策になります。 よりクリーンなソリューションが存在する必要があります。 多分私たちは何かが欠けていますか? (seq2seqチュートリアルでも同じエラーが発生し、上記のすべての解決策を試しました)。

@ iamgroot42-ええ、その「解決策」は確かに非常に醜いですが、問題がどこにあるのかを突き止めようとしているだけです。 数時間後にそれを試して、何かを追跡できるかどうかを確認します。

実際、copy.deepcopyは、これらがレガシー関数であり、
それらを維持/更新するためのリソースがありません。 あなたがしたい場合
ユーザーが提供できる下位互換性のある変更を導入する
デコードステップの2番目のセル。Noneの場合は、フォールバックします。
ディープコピー、それなら私はPRをレビューさせていただきます。 覚えておいてください
下位互換性のある変更である必要があります。

2017年4月4日火曜日午前11時38分、Rob [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-考えてみます。 これと非常によく似たトランスレータがありますが、別のクラスを介してセルを作成します。これにより、必要な場所に双方向レイヤーを挿入したり、必要な場所に残差を挿入したり、入力と連結と合計をマージしたりできます。 静的RNNを使用することで、クラスをこのチュートリアルに簡単に移行できると思います。 知らせます。

@ebrevdo RedHatでTensorflowr1.0(tensorflow-1.0.1-cp36-cp36m-linux_x86_64)を実行していて、Githubの最新バージョンの翻訳チュートリアルがあります。現在これを機能させる方法はありますか?

残念ながら、翻訳チュートリアルがTF1.0では機能しません。 それを修正する必要があります。 @lukaszkaiser見ていただけますか? 新しいチュートリアルに取り組んでいますが、まだ数週間の休みがあり、動作するにはTensorFlowのナイトリーバージョン(またはTF 1.1または1.2)が必要になります。

(lukasz;チュートリアルのどの部分がTF 1.0に欠陥があるかをさまざまなコメントから特定するのは難しいです。もしあなたがその行を特定できれば、それを機能させるのを手伝うことができますか?)

@ebrevdoこれはこのチュートリアルです。 エラーはこの行のクラスターにあります。 ここで渡されたセルは、レガシーseq2seqモデルのバックワードフェーズとフォワードフェーズの両方に使用されます。これは、同じセルが異なるスコープで使用されているためにエラーをスローします。

@ iamgroot42必要な変更を加えてPRを行いますか? それは素晴らしいことです、私は現在それを自分で行うためのサイクルを持っていません。 ありがとう!

ブランチremotes / origin / r1.0のソースからコンパイルした場合、TF1.0は最新バージョンの翻訳チュートリアルで正常に動作することに気付きました。

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

次に、TensorFlowをビルドしてインストールすると、正常に機能します。

ブランチremotes / origin / r1.1では、「異なる変数スコープ」エラーが発生します。
@robmsylvesterが提案したようにコードを変更しました

seq2seqモデルファイルにエンコーダセルとデコーダセルを明示的に作成し、両方をレガシーライブラリファイルに渡して、関数とその引数を少し調整するとどうなりますか?

そしてそれは今私のために働きます。

@oxwsds私が使用しているTensorflowは1.0.1なので、エラーが発生している可能性があります。

@robmsylvesterが提案したことを実際に試しましたが、トレーニングが開始されました(2日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デコードしたときにのみ失敗する場合は、バッチサイズが1の場合と関係があるのではないでしょうか。 トレーニング中にバッチサイズを1に下げても、モデルは引き続きトレーニングされますか?

@bowuここでも同じエラー。 Mac OX Sierra、TensorFlow 1.1.0-rc1、Python 2.7.10、Python3.6.1。

@robmsylvesterは、バッチサイズ1でも正常にトレーニングされましたが、同じ方法または同様の方法でデコード中に失敗しました。これが完全なトレースバックです。これを接続エラーと考えていた理由は、 seq2seq_f(変更された関数の1つでした)(変更された行を示す私のコードからの#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引数を関数tf.contrib.legacy_seq2seq.embedding_attention_seq2seqに追加し、$ translate/seq2seq_model.pyでセルを作成して、関数seq2seq_fで呼び出された関数に渡します。 コードをどのように変更しましたか?

@oxwsds @robmsylvester @ebrevdo
私はついに今機能しているものを手に入れました(つまり、私の単層256ユニットネットワークの結果はちょっと恐ろしいですが、それはおそらくネットワークが超軽量であり、パラメータをまったく調整しなかったためです)
みなさん、どうもありがとうございました... !!!!!

_これが最後の私の考えです:_

@oxwsdsは、Tensorflowがブランチremotes / origin / r1.0からコンパイルされたときに、チュートリアル(現在の形式)は変更の必要なしに機能するとコメントしています。 ただし、悲しいことに、Tensorflowコード内で変更が必要なバージョンのTensorflowがあり、remotes / origin /r1.0のバージョンはどちらも同じラベルが付けられていました。

コメント内の@robmsylvesterの修正(以下にコピー)チュートリアルが箱から出して機能しなかった私のバージョンのTensorflowで機能しました(TF 1.1でも機能するはずです)。 実装するのは少し面倒ですが、私はそれを行うことができました、それは何かを言っています:-P
これ以前の最後の2つのコメントの誤りは、私の間違いによるものでした。 ダミーのように、トレーニング中にのみレイヤーと非表示ユニットのパラメーターを指定し、デコード中にデフォルトを使用するようにコードを残していました。 (チュートリアルのこの部分は、もう少しダミーの証拠になる可能性があります:https://www.tensorflow.org/tutorials/seq2seq#lets_run_it)

うーん。 私が目立つのは、参照されているレガシーseq2seqファイルです。

エンコーダーセル= copy.deepcopy(cell)

エンコーダ側とデコーダ側の両方で同じアーキテクチャが使用されているため、この行が使用されているように見えます。 セルのコピーを作成し、セルの引数をアテンションデコーダー埋め込み関数に渡し、次にアテンションデコーダー自体に渡します。

seq2seqモデルファイルにエンコーダセルとデコーダセルを明示的に作成し、両方をレガシーライブラリファイルに渡して、関数とその引数を少し調整するとどうなりますか?

フィードバックをお寄せいただきありがとうございます! TFの間には何か違うようです
pypiとそのタグで? グンハン、それは可能ですか?

2017年4月10日月曜日午後9時5分、 prashantserainotifications @ github.com
書きました:

@oxwsds https://github.com/oxwsds @robmsylvester
https://github.com/robmsylvester @ebrevdo https://github.com/ebrevdo
私はついに今働いている何かを持っています(つまり、私のシングルの結果
レイヤー256ユニットネットワークはちょっとぞっとするようなものですが、それはおそらくただのことです
ネットワークが超軽量で、パラメータをまったく調整しなかったため)

これが私の結論です:

@oxwsds https://github.com/oxwsdsは、チュートリアルについてコメントしています(現在のフォーム)Tensorflowがブランチremotes / origin /r1.0からコンパイルされたものはTRUEでした。 悲しいビット
それは私が持っていたTensorflowのバージョンですが
Tensorflowコード内が必要であり、remotes / origin /r1.0のバージョン
両方とも同じようにラベル付けされました。

@robmsylvesterhttps ://github.com/robmsylvesterのコメントでの修正
(以下にコピー)チュートリアルがここにある私のバージョンのTensorflowで動作しました
箱から出して動作しませんでした(そしてTF 1.1でも動作するはずです)。 です
実装するのは少し面倒ですが、私はそれを行うことができました、それは何かを言っています
:-P
これ以前の最後の2つのコメントの誤りは、私の間違いによるものでした。 好き
ダミー、レイヤーと非表示ユニットのパラメーターのみを指定していました
トレーニング中、デコード中にデフォルトを使用するようにコードを残していました。 (これチュートリアルの一部は、もう少しダミーの証拠になる可能性があります。https://www.tensorflow.org/tutorials/seq2seq#lets_run_ithttps://www.tensorflow.org/tutorials/seq2seq#lets_run_it

うーん。 私にとって際立っていることの1つは、参照されているレガシーseq2seqにあります
ファイル:

エンコーダーセル= 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を使用して、 tensorflow / models / tutorials / rnn / ptb / ptb_word_lm.py#L112lstm_cellのような関数にしました。 私は今持っています:

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パッケージを使用するようにチュートリアルを更新することだと思います。これはアクティブに維持されます。 あなたが最初に実行したテンソルフロープログラムがたくさんのエラーを吐き出すとき、それは非常に意気消沈します。 今週時間があれば、PRを提出します。

新しいseq2seqチュートリアルに取り組んでいます。 の終わりまでにリリースすることを望んでいました
先月ですが、遅れています。 新しいAPIを使用します。

2017年5月1日午前8時7分、「KyleTeague」 [email protected]は次のように書いています。

@ebrevdo https://github.com/ebrevdoが言ったことに関して、私は思う
解決策は、従来のseq2seqコードを修正することではなく、
代わりにcontrib.seq2seqパッケージを使用するためのチュートリアル
維持されます。 最初のテンソルフローがあなたをプログラムするとき、それはかなり意気消沈します
実行すると、大量のエラーが発生します。 今週時間があれば、
PRを提出します。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-298350307
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABtim587xZx9Gi4-yXmwccSum8_Trc1oks5r1fUogaJpZM4MWl4f

@ebrevdo tensorflow1.1 Webサイトでsequence_to_sequenceモデルを実行すると、同じエラーが発生します。 そして、 'reuse'パラメータを使おうとしましたが、失敗しました。 新しいseq2seqチュートリアルがいつリリースされるか教えてください。

いくつかの新しいものに依存するため、tf1.2と同時に表示されます
そのリリースの機能。

2017年5月4日午後9時16分、「njuzrs」 [email protected]は次のように書いています。

@ebrevdohttps ://github.com/ebrevdo実行時に同じエラーが発生します
tensorflow1.1Webサイトのsequence_to_sequenceモデル。 そして、私は試しました
'reuse'パラメータを使用しましたが、失敗しました。 新しい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は機能しますが、複数のGPU用のdevicewrapperapiがありません。

テンソルフロー1.1でも同じ問題があります。 まだ解決策に取り組んでいます

私はいくつかのことを試しましたが、最終的にはtensorflow 1.1を使用できましたが、これらの変更を行う必要がありました:(上記のTshzzzに基づく)

これを削除します:
multicell = rnn.MultiRNNCell([dropcell]*NLAYERS, state_is_tuple=False)

そしてこれを追加します:
セル= []
_ in range(NLAYERS)の場合:
cell = rnn.DropoutWrapper(tf.contrib.rnn.GRUCell(INTERNALSIZE)、input_keep_prob = pkeep)
cells.append(cell)
multicell = rnn.MultiRNNCell(cells、state_is_tuple = False)

@ebrevdoおめでとうございます、TF 1.2がリリースされました-新しいチュートリアルもどこかでリリースされましたか、それともすぐにリリースされますか?

ありがとう

発売時に発表する予定です。 それに取り組んでいます。

2017年5月19日19:02、「prashantserai」 [email protected]は次のように書いています。

@ebrevdo https://github.com/ebrevdoおめでとうございます、TF1.2はちょうど得ました
リリースされました-新しいチュートリアルもどこかでリリースされましたか、それとも
すぐにリリースされますか?

ありがとう


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-302844002
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABtim0RWDzNCXk-bIjKSyHLvgFxUvq2lks5r7km7gaJpZM4MWl4f

tensorflow-gpu == 1.1.0を使用していてこのエラーが発生した場合、pip install tensorflow-gpu == 1.0.0を介して1.0.0に切り替えても問題は解決しませんが、少なくとも私には効果がありませんでした。

私はMacとubuntuの両方でこの問題に遭遇し、ソースからのコンパイルは両方の時間で機能しました。 そう:
pip install 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では、これらの回避策はどれもうまくいきませんでした

MultiRNNCell seq2seqモデルを使用しています。

1.0.1に戻らなければなりませんでした: pip3 install tensorflow==1.0

誰かがlegacy_seq2seq.rnn_decoder()を操作するときにこれらの問題を抱えていますか?

@oxwsdsおっしゃるように、tf.contrib.legacy_seq2seq.embedding_attention_seq2seqの入力引数セルを2つの異なるセル{encoder_cells、decoder_cells}に変更します。 最後に、seq2seqモデルを機能させます。 73200設定後、私は困惑5.54を取得します。
次に、デコード部分を実行します。

アメリカ合衆国の大統領は誰ですか?
QuiestlepresidentdesÉtats-Unis?

問題が解決しました。 ありがとう。

@ doncat99
seq2seq.pycopy.deepcopy(cell)は効果がないようです。
そこで、 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にアップグレードし、リストの乗算ではなくループでセルを生成すると、これが修正されました。

translate.pyの実行時にTF1.2でエラーが発生しました。詳細:
名前:GeForce GTX 1080 Ti
メジャー:6マイナー:1 memoryClockRate(GHz)1.582
pciBusID 0000:02:00.0
総メモリ:10.91GiB
空きメモリ:10.76GiB
2017-06-22 09:15:04.485252:I tensorflow / core / common_runtime / gpu / gpu_device.cc:961] DMA:0
2017-06-22 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バスID:0000:02:00.0)
1024ユニットの3つのレイヤーを作成します。
トレースバック(最後の最後の呼び出し):
ファイル "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行目
model = create_model(sess、False)
create_modelのファイル "translate.py"、行136
dtype = dtype)
ファイル "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py"、179行目、__ init__
softmax_loss_function = softmax_loss_function)
model_with_bucketsのファイル "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py"、行1206
decode_inputs [:bucket [1]])
ファイル "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py"、178行目
ラムダ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
エンコーダーセル= copy.deepcopy(cell)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、174行目、ディープコピー
y =コピー機(メモ)
__deepcopy__のファイル "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py"、行476
setattr(result、k、copy.deepcopy(v、memo))
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
_deepcopy_listのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行230
y.append(deepcopy(a、memo))
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
_deepcopy_listのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行230
y.append(deepcopy(a、memo))
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
_deepcopy_listのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行230
y.append(deepcopy(a、memo))
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
_deepcopy_tupleのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行237
y.append(deepcopy(a、memo))
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行334
状態= deepcopy(状態、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行163、ディープコピー
y =コピー機(x、メモ)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、257行目、_deepcopy_dict
y [deepcopy(key、memo)] = deepcopy(value、memo)
ファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行190、ディープコピー
y = _reconstruct(x、rv、1、メモ)
_reconstructのファイル "/home/lscm/opt/anaconda2/lib/python2.7/copy.py"、行343
y .__ dict __。update(state)
AttributeError: 'NoneType'オブジェクトに属性 'update'がありません

また、チュートリアルの変換モデルでself_test()を実行すると、 embedding_attention_seq2seq()copy.deepcopy(cell)によって引き起こされるエラーが発生しました。
Seq2SeqModelseq2seq_f()のコードを次のように変更しようとしました。

    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)にダウングレードし、機能していることをすべての人に更新したいと思います。 モデルは期待どおりに機能しています。 CPUバージョン1.0.0は期待どおりに機能するはずだと思いますか? または?。
ありがとう :)

こんにちは皆さん、まだ興味があるかどうかはわかりませんが、問題はパラメータとして渡されたセルをembedding_attention_seq2seq関数にコピーする操作に関連していることがわかりました。 これは、エンコーダーとデコーダーの両方に同じセル定義が使用されているためです。 動的なseq2seqとは対照的に、バケット付きのseq2seqモデルを使用しているため、このチュートリアルは非推奨になっていると思います。 しかし、私は機能する変更された関数を貼り付けています。 関数はファイルtensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.pyで更新されます。

ありがとう、
ファビオ

`` `!python
def embedding_attention_seq2seq(encoder_inputs、
decode_inputs、
enc_cell、
dec_cell、
num_encoder_symbols、
num_decoder_symbols、
embedding_size、
num_heads = 1、
output_projection =なし、
feed_previous = False、
dtype =なし、
scope =なし、
initial_state_attention = False):
"" "注意を払ってシーケンス間モデルを埋め込む。

このモデルは、最初に、新しく作成された(形状の)埋め込みによってencoder_inputsを埋め込みます。
[num_encoder_symbols x input_size])。 次に、RNNを実行してエンコードします
状態ベクトルに埋め込まれたencoder_inputs。 これの出力を保持します
後で注意を引くために使用するすべてのステップでのRNN。 次に、decoder_inputsを埋め込みます
別の新しく作成された埋め込み(形状[num_decoder_symbols x
input_size])。 次に、最後に初期化されたアテンションデコーダーを実行します
エンコーダーの状態、埋め込まれたdecoder_inputsで、エンコーダーの出力に対応します。

警告:output_projectionがNoneの場合、アテンションベクトルのサイズ
変数はnum_decoder_symbolsに比例するようになり、大きくすることができます。

Args:
エンコーダー入力:形状[batch_size]の1Dint32テンソルのリスト。
decode_inputs:形状[batch_size]の1Dint32テンソルのリスト。
セル:セルの機能とサイズを定義するtf.nn.rnn_cell.RNNCell。
num_encoder_symbols:整数; エンコーダ側のシンボル数。
num_decoder_symbols:整数; デコーダ側のシンボル数。
embedding_size:整数、各シンボルの埋め込みベクトルの長さ。
num_heads:attention_statesから読み取るアテンションヘッドの数。
output_projection:なし、または出力プロジェクションの重みのペア(W、B)と
バイアス; Wの形状は[output_sizex num_decoder_symbols]で、Bの形状は
形状[num_decoder_symbols]; 提供され、feed_previous = Trueの場合、それぞれ
供給された前の出力は、最初にWで乗算され、Bが追加されます。
feed_previous:ブールまたはスカラーブールテンソル; Trueの場合、最初の1つだけ
のdecoder_inputsが使用され(「GO」記号)、他のすべてのデコーダーが使用されます
入力は以前の出力から取得されます(embedding_rnn_decoderのように)。
Falseの場合、decoder_inputsが指定どおりに使用されます(標準のデコーダーの場合)。
dtype:初期RNN状態のdtype(デフォルト:tf.float32)。
スコープ:作成されたサブグラフのVariableScope。 デフォルトは
「embedding_attention_seq2seq」。
initial_state_attention:False(デフォルト)の場合、最初の注意はゼロです。
Trueの場合、初期状態と注意から注意を初期化します
州。

戻り値:
フォーム(出力、状態)のタプル。ここで:
出力:2Dテンソルのdecoder_inputsと同じ長さのリスト
生成されたものを含む形状[batch_sizexnum_decoder_symbols]
出力。
state:最終タイムステップでの各デコーダーセルの状態。
これは、形状[batch_size xcell.state_size]の2Dテンソルです。
"" "
variable_scope.variable_scope(
スコープまたはスコープとしての「embedding_attention_seq2seq」、dtype = dtype):
dtype = scope.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機能ありがとうございます。 本当に役に立ちそうです。 また、チュートリアルが非推奨になっていることもわかりました。 私はまだ公式のチュートリアルリリースを待っています。 新しいAPIを使用したようです。 新しいAPIでコーディングを開始するために検索できるコードはありますか?
どんな助けでも大歓迎です。 もう一度ありがとう:)

@ syw2014問題を修正しましたか?

@ w268wangはまだ、他の解決策を待っていますが、@ Miopasのコメントは試してみるかもしれません、そして私は@fabiofumarolaの解決策を試しています

TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'と書いてあります
@fabiofumarolaが投稿したアップデートを使用した後。 助けてくれませんか?

はい、私が提案したアップデートでは、
embedding_attention_seq2seq関数。 あなたがあなたのソースファイルに行くなら
tensorflowリリースでは、自分でメソッド定義を変更できます。

2017年7月2日日曜日18:15、sachinh35notifications @ github.com trote

TypeErrorと表示されます:embedding_attention_seq2seq()missing 1 required
位置引数: 'dec_cell'


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312500996
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABepUEc3W8m5CVDQGnCLu4dcJVFwwLDZks5sJ8IOgaJpZM4MWl4f

>>

Gmailモバイルから送信

はい、私は同じことをしました。 tensorflowリリースでseq2seq.pyファイルの関数を変更しました。 それでも同じエラーが発生します。 関数にもう1つの引数がありますか?

はい、コードでrnn_cellsに指定する必要があります。 エンコーダー用
もう1つはデコーダー用です。

2017年7月2日20:54の日曜日、fabio [email protected]は次のように書いています。

はい

2017年7月2日18:50の日曜日、 sachinh35notifications @ github.comは次のように書いています。

はい、私は同じことをしました。 のseq2seq.pyファイルの関数を変更しました
テンソルフローリリース。 それでも同じエラーが発生します。 ありますか
関数へのより多くの引数?


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312503106
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABepUOXTQC_mzLuhcwW0iZRVkLmmr8yIks5sJ8pugaJpZM4MWl4f

>>

Gmailモバイルから送信

私はこれに全く新しいです。 これはかなり基本的な質問かもしれませんが、このコードでデコーダーセルとして渡される引数を教えてください。 独自のデータセットを使用して、テンソルフローチュートリアルに示されているようにseq2seqを開発しようとしています。

`
__future__ importabsolute_importから
__future__インポート部門から
from __future__ import print_function

ランダムにインポート

numpyをnpとしてインポートします
six.movesからimportxrange#pylint:disable = redefined-builtin
tensorflowをtfとしてインポートします

data_utilsをインポートします

クラスSeq2SeqModel(object):
def __init __(self、
source_vocab_size、
target_vocab_size、
バケツ、
サイズ、
num_layers、
max_gradient_norm、
バッチサイズ、
Learning_rate、
Learning_rate_decay_factor、
use_lstm = False、
num_samples = 512、
forward_only = False、
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 step(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`

これはスタックオーバーフローの良い質問です。

2017年7月3日午前8時46分、「sachinh35」 [email protected]は次のように書いています。

私はこれに全く新しいです。 多分これはかなり基本的な質問ですが、あなたはできますか
このコードでデコーダーセルとして渡される引数を教えてください。 わたし
独自のを使用してテンソルフローチュートリアルに示されているようにseq2seqを開発しようとしています
データセット。
`#Copyright 2015 TensorFlowAuthors。 全著作権所有。
Apacheライセンスバージョン2.0(「ライセンス」)に基づいてライセンス供与されます。 してもいいです
ライセンスに準拠する場合を除き、このファイルを使用しないでください。 あなたは得るかもしれません
http://www.apache.org/licenses/LICENSE-2.0にあるライセンスのコピー
適用法で義務付けられている、または書面で合意された、ソフトウェアの配布
ライセンスに基づき、保証なしで「現状有姿」で配布されます。
または、明示または黙示を問わず、あらゆる種類の条件。 のライセンスを参照してください
の下での許可と制限を管理する特定の言語

ライセンス。 ================================================== ==========

"" "アテンションメカニズムを備えたシーケンス間モデル" ""

将来のインポートからabsolute_import
将来の輸入部門から
将来のインポートからprint_function

ランダムにインポート

numpyをnpとしてインポートします
six.movesからimportxrange#pylint:disable = redefined-builtin
tensorflowをtfとしてインポートします

data_utilsをインポートします

クラスSeq2SeqModel(object):
"" "注意を払い、複数のバケットを対象としたシーケンス間モデル。

このクラスは、エンコーダーとして多層リカレントニューラルネットワークを実装します。
そして注意ベースのデコーダー。 これは、で説明されているモデルと同じです。
この論文: http ://arxiv.org/abs/1412.7449-そこを探してください
詳細、
または完全なモデル実装のためにseq2seqライブラリに。
このクラスでは、LSTMセルに加えてGRUセルを使用することもできます。
大きな出力語彙サイズを処理するためにサンプリングされたsoftmax。 単層
このモデルのバージョンですが、双方向エンコーダーを使用して、
http://arxiv.org/abs/1409.0473
サンプリングされたソフトマックスについては、次のペーパーのセクション3で説明します。
http://arxiv.org/abs/1412.2007
"" "

def init (self、
source_vocab_size、
target_vocab_size、
バケツ、
サイズ、
num_layers、
max_gradient_norm、
バッチサイズ、
Learning_rate、
Learning_rate_decay_factor、
use_lstm = False、
num_samples = 512、
forward_only = False、
dtype = tf.float32):
"" "モデルを作成します。

Args:
source_vocab_size:ソース語彙のサイズ。
target_vocab_size:ターゲット語彙のサイズ。
バケット:ペアのリスト(I、O)、ここでIは最大入力長を指定します
これはそのバケットで処理され、Oは最大出力を指定します
長さ。 Iより長い入力または出力を持つトレーニングインスタンス
Oより長い場合は、次のバケットにプッシュされ、それに応じてパディングされます。
リストは並べ替えられていると仮定します(例:[(2、4)、(8、16)])。
サイズ:モデルの各レイヤーのユニット数。
num_layers:モデル内のレイヤーの数。
max_gradient_norm:グラデーションは、このノルムを最大限に活用するためにクリップされます。
batch_size:トレーニング中に使用されるバッチのサイズ。
モデルの構築はbatch_sizeに依存しないため、次のようになります。
これがデコードなどに便利な場合は、初期化後に変更されます。
Learning_rate:最初の学習率。
Learning_rate_decay_factor:必要に応じて学習率をこれだけ減衰させます。
use_lstm:trueの場合、GRUセルの代わりにLSTMセルを使用します。
num_samples:サンプリングされたsoftmaxのサンプル数。
forward_only:設定されている場合、モデルにバックワードパスを構築しません。
dtype:内部変数を格納するために使用するデータ型。
"" "
self.source_vocab_size = source_vocab_size
self.target_vocab_size = target_vocab_size
self.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)

サンプリングされたsoftmaxを使用する場合、出力射影が必要です。

output_projection =なし
softmax_loss_function =なし

サンプリングされたsoftmaxは、語彙サイズ未満をサンプリングした場合にのみ意味があります。

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_projection =(w、b)

def sampled_loss(labels、inputs):
ラベル= tf.reshape(labels、[-1、1])
#32ビットフロートを使用してsampled_softmax_lossを計算する必要があります
#数値の不安定性を回避します。
local_w_t = tf.cast(w_t、tf.float32)
local_b = tf.cast(b、tf.float32)
local_inputs = tf.cast(inputs、tf.float32)
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

RNNの内部多層セルを作成します。

def single_cell():
tf.nn.rnn_cell.GRUCell(size)を返します
use_lstmの場合:
def single_cell():
tf.nn.rnn_cell.BasicLSTMCell(size)を返します
cell = single_cell()
num_layers> 1の場合:
cell = tf.nn.rnn_cell.MultiRNNCell([single_cell()for _ in range(num_layers)])

seq2seq関数:入力と注意に埋め込みを使用します。

def seq2seq_f(encoder_inputs、decoder_inputs、do_decode):
tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(を返します
エンコーダー入力、
decode_inputs、
細胞、
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]):#最後のバケットが最大のものです。
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)))

私たちのターゲットは、1つシフトされたデコーダー入力です。

ターゲット= [self.decoder_inputs [i + 1]
for i in xrange(len(self.decoder_inputs)-1)]

トレーニングの成果と損失。

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)
#出力投影を使用する場合、デコードのために出力を投影する必要があります。
output_projectionがNoneでない場合:
xrange(len(buckets))のbの場合:
self.outputs [b] = [
tf.matmul(output、output_projection [0])+ output_projection [1]
self.outputs [b]の出力用
]
それ以外:
self.outputs、self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
self.encoder_inputs、self.decoder_inputs、targets、
self.target_weights、バケット、
ラムダx、y:seq2seq_f(x、y、False)、
softmax_loss_function = softmax_loss_function)

モデルをトレーニングするための勾配とSGD更新操作。

params = tf.trainable_variables()
forward_onlyでない場合:
self.gradient_norms = []
self.updates = []
opt = tf.train.GradientDescentOptimizer(self.learning_rate)
xrange(len(buckets))のbの場合:
グラデーション= 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 step(self、session、encoder_inputs、decoder_inputs、target_weights、
bucket_id、forward_only):
"" "指定された入力をフィードするモデルのステップを実行します。

Args:
セッション:使用するテンソルフローセッション。
エンコーダー入力:エンコーダー入力としてフィードするnumpyintベクトルのリスト。
decode_inputs:デコーダー入力としてフィードするnumpyintベクトルのリスト。
target_weights:ターゲットの重みとしてフィードするnumpy浮動小数点ベクトルのリスト。
bucket_id:使用するモデルのバケット。
forward_only:逆方向のステップを実行するか、順方向のみを実行するか。

戻り値:
勾配ノルム(または逆方向に実行しなかった場合はNone)で構成されるトリプル。
平均パープレキシティ、および出力。

レイズ:
ValueError:encoder_inputs、decoder_inputs、またはの長さの場合
target_weightsは、指定されたbucket_idのバケットサイズと一致しません。
"" "

サイズが一致するかどうかを確認します。

エンコーダーサイズ、デコーダーサイズ= self.buckets [bucket_id]
if len(encoder_inputs)!=エンコーダーサイズ:
値を上げるError( "エンコーダの長さはバケット内の長さと同じである必要があります。"
"%d!=%d。" %(len(encoder_inputs)、encoder_size))
if len(decoder_inputs)!= decode_size:
値を上げるError( "デコーダーの長さはバケット内の長さと同じである必要があります。"
"%d!=%d。" %(len(decoder_inputs)、decoder_size))
if len(target_weights)!= decode_size:
値を上げるError( "重みの長さはバケット内の長さと同じである必要があります。"
"%d!=%d。" %(len(target_weights)、decoder_size))

入力フィード:エンコーダー入力、デコーダー入力、target_weights(提供されている場合)。

input_feed = {}
xrange(encoder_size)のlの場合:
input_feed [self.encoder_inputs [l] .name] =エンコーダー入力[l]
xrange(decoder_size)のlの場合:
input_feed [self.decoder_inputs [l] .name] = decode_inputs [l]
input_feed [self.target_weights [l] .name] = target_weights [l]

ターゲットは1つシフトしたデコーダー入力であるため、もう1つ必要です。

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

出力フィード:バックワードステップを実行するかどうかによって異なります。

forward_onlyでない場合:
output_feed = [self.updates [bucket_id]、#SGDを実行するOpを更新します。
self.gradient_norms [bucket_id]、#勾配ノルム。
self.losses [bucket_id]]#このバッチの損失。
それ以外:
output_feed = [self.losses [bucket_id]]#このバッチの損失。
xrange(decoder_size)のlの場合:#ロジットを出力します。
output_feed.append(self.outputs [bucket_id] [l])

出力= session.run(output_feed、input_feed)
forward_onlyでない場合:
出力[1]、出力[2]、なし#勾配ノルム、損失、出力なしを返します。
それ以外:
戻り値なし、出力[0]、出力[1:]#勾配ノルム、損失、出力なし。

def get_batch(self、data、bucket_id):
"" "指定されたバケットからランダムなデータのバッチを取得し、ステップの準備をします。

step(..)でデータをフィードするには、バッチメジャーベクトルのリストである必要がありますが、
ここのデータには、単一の長さの主要なケースが含まれています。 したがって、これの主なロジック
機能は、データケースのインデックスを再作成して、フィードに適した形式にすることです。

Args:
データ:各要素に含まれるサイズlen(self.buckets)のタプル
バッチの作成に使用する入力データと出力データのペアのリスト。
bucket_id:整数。バッチを取得するバケット。

戻り値:
のトリプル(encoder_inputs、decoder_inputs、target_weights)
後でstep(...)を呼び出すための適切な形式を持つ構築されたバッチ。
"" "
エンコーダーサイズ、デコーダーサイズ= self.buckets [bucket_id]
エンコーダー入力、デコーダー入力= []、[]

データからエンコーダーとデコーダーの入力のランダムなバッチを取得し、

必要に応じてそれらをパディングし、エンコーダ入力を逆にして、デコーダにGOを追加します。

xrange(self.batch_size)の_の場合:
エンコーダー入力、デコーダー入力= random.choice(data [bucket_id])

#エンコーダ入力はパディングされてから反転されます。
エンコーダーパッド= [data_utils.PAD_ID] *(encoder_size --len(encoder_input))
encode_inputs.append(list(reversed(encoder_input +エンコーダ_pad)))

#デコーダー入力は追加の「GO」記号を取得し、その後パディングされます。
decode_pad_size = decode_size --len(decoder_input)-1
decode_inputs.append([data_utils.GO_ID] + decode_input +
[data_utils.PAD_ID] * decode_pad_size)

次に、上記で選択したデータからバッチメジャーベクトルを作成します。

batch_encoder_inputs、batch_decoder_inputs、batch_weights = []、[]、[]

バッチエンコーダー入力は、encoder_inputsのインデックスが再作成されただけです。

xrange(encoder_size)のlength_idxの場合:
batch_encoder_inputs.append(
np.array([encoder_inputs [batch_idx] [length_idx]
xrange(self.batch_size)]のbatch_idxの場合、dtype = np.int32))

バッチデコーダー入力は、decoder_inputsのインデックスが再作成され、重みを作成します。

xrange(decoder_size)のlength_idxの場合:
batch_decoder_inputs.append(
np.array([decoder_inputs [batch_idx] [length_idx]
xrange(self.batch_size)]のbatch_idxの場合、dtype = np.int32))

#パディングされているターゲットのtarget_weightsを0に作成します。
batch_weight = np.ones(self.batch_size、dtype = np.float32)
xrange(self.batch_size)のbatch_idxの場合:
#対応するターゲットがPADシンボルの場合、重みを0に設定します。
#対応するターゲットは、1つ前にシフトされたdecoder_inputです。
length_idx <decoder_size-1の場合:
ターゲット= decoder_inputs [batch_idx] [length_idx + 1]
length_idx == decoder_size-1またはtarget == data_utils.PAD_IDの場合:
batch_weight [batch_idx] = 0.0
batch_weights.append(batch_weight)
batch_encoder_inputs、batch_decoder_inputs、batch_weights`を返します


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312679587
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABtim0l5UMHHtbL1sz7meXserV8NVS7cks5sKQzXgaJpZM4MWl4f

わかった! でもありがとう! :)

@ebrevdo新しいAPIを使用したseq2seqの新しいチュートリアルがいつ公開されるかについての更新はありますか?
ありがとう。 素晴らしい仕事!。

ええ、新しいチュートリアルを待っています...それがすぐにリリースされる予定があるかどうかを知るのは素晴らしいことです.. @ ebrevdo

カーネルテストでコードを取得し、従来のseq2seqでビーム検索を改良しようとしましたが、それは困難でした...

来週を楽しみにしています!

2017年7月3日午前10時16分、「prashantserai」 [email protected]は次のように書いています。

ええ、新しいチュートリアルを待っています...それが
間もなくリリースされる予定です。@ ebrevdo
https://github.com/ebrevdo

カーネルテストでコードを取得し、ビーム検索を次のように改造しようとしました
従来のseq2seqですが、難しいようでした...


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312697274
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABtim45-HTuQrIRDhphqqHjqkKOKTe53ks5sKSHYgaJpZM4MWl4f

こんにちは、みんな、

この問題の更新は、テンソルフロー1.1-gpu for mac osxでも同じです。

@ tshi1983
ubuntuのtensorflow1.1-gpuでも同じ問題が発生しました。
tf1.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それは動作します! 少なくとも今はトレーニング中です、thx!

@huxuanlai私にも役立ちます。

同じAttributeError: 'NoneType' object has no attribute 'update'を受け取っていますが、 tf.contrib.legacy_seq2seq.model_with_buckets $が付いています。 私はubuntu16.04ltsでtf1.2.1(GPU)を実行しています。

これは、バケットが1つ以上ある場合にのみ発生するようです。

完全なトレースバック:

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'

@Tshzzz @jtubert
thx、あなたの解決策は私のために働いた。 私のtfバージョンは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)

これはまだ修正されていません、すべての可能な解決策を試しました、このスレッドとスタックオーバーフローで言及されたもの、それはテンソルフロー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(...)] * num_layers)、次のように変更します:MultiRNNCell([GRUCell(...)for _ in range(num_layers)])。 以前に双方向RNNの順方向セルと逆方向セルの両方と同じセルインスタンスを使用していた場合は、2つのインスタンスを作成するだけです(1つは順方向用、もう1つは逆方向用)。 2017年5月に、scope = Noneで呼び出されたときに、既存の保存された重みを使用するようにこのセルの動作の移行を開始します(これにより、サイレントモデルの劣化が発生する可能性があるため、このエラーはそれまで続きます)。

オリジンコード:
tensorflow.contribからインポートrnn
input = tf.placeholder(dtype = tf.int32、shape = [None、None]、name = "inputs")
keep_prob = tf.placeholder(dtype = tf.float32、name = "keep_prob")
セル= rnn.GRUCell(10)
cell = rnn.DropoutWrapper(cell = cell、input_keep_prob = keep_prob)
cell = rnn.MultiRNNCell([range(5)内の_のセル]、state_is_tuple = True)

outs、states = tf.nn.dynamic_rnn(cell = cell、inputs = lookup_up、dtype = tf.float32)
解決:
input = tf.placeholder(dtype = tf.int32、shape = [None、None]、name = "inputs")
keep_prob = tf.placeholder(dtype = tf.float32、name = "keep_prob")
cell = rnn.MultiRNNCell([rnn.DropoutWrapper(rnn.GRUCell(10)、input_keep_prob = keep_prob)for _ in range(5)]、state_is_tuple = True)

tfナイトリーでこの問題がありますか?

2017年10月1日午前8時34分、「BaohuaZhou」 [email protected]は次のように書いています。

iOSのCPUでtensorflow1.1を使用する場合にも同じ問題が発生します。


あなたが言及されたので、あなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-333384725
またはスレッドをミュートします
https://github.com/notifications/unsubscribe-auth/ABtimwOv7vf5vvFXBllbZryjCFwmJcU6ks5sn7DxgaJpZM4MWl4f

AttributeError: 'NoneType'オブジェクトに属性 'update'がありません

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(...)] * num_layers)、次のように変更します:MultiRNNCell([GRUCell(...)for _ in range(num_layers)])。 以前に双方向RNNの順方向セルと逆方向セルの両方と同じセルインスタンスを使用していた場合は、2つのインスタンスを作成するだけです(1つは順方向用、もう1つは逆方向用)。 2017年5月に、scope = Noneで呼び出されたときに、既存の保存された重みを使用するようにこのセルの動作の移行を開始します(これにより、サイレントモデルの劣化が発生する可能性があるため、このエラーはそれまで続きます)。

アクティビティがない状態で14日が経過し、 awaiting tensorflowerラベルが割り当てられました。 それに応じてラベルやステータスを更新してください。

TensorFlowerを待っているしつこい:アクティビティがない状態で14日が経過し、 awaiting tensorflowerラベルが割り当てられました。 それに応じてラベルやステータスを更新してください。

解決策は、TFの新しいバージョンに移行することです。 このスレッドは、元の問題から大幅に逸脱しています。 閉鎖。

インスタントソリューションが必要な場合は、私が試したことを試すことができます:

pip install tensorflow==1.0
問題はtenorflow1.1バージョンにあり、それは私のために働きました。

このページは役に立ちましたか?
0 / 5 - 0 評価