Tensorflow: ValueError: Mencoba menggunakan kembali RNNCell dengan cakupan variabel yang berbeda dari penggunaan pertama.

Dibuat pada 8 Mar 2017  ·  102Komentar  ·  Sumber: tensorflow/tensorflow

Saya tidak yakin apakah saya yang pertama menemukan kesalahan berikut:

ValueError: Mencoba menggunakan kembali RNNCelldengan cakupan variabel yang berbeda dari penggunaan pertama. Penggunaan pertama sel dengan cakupan 'rnn/multi_rnn_cell/cell_0/basic_lstm_cell', upaya ini dengan cakupan 'rnn/multi_rnn_cell/cell_1/basic_lstm_cell'. Harap buat instance sel baru jika Anda ingin menggunakan set bobot yang berbeda. Jika sebelumnya Anda menggunakan: MultiRNNCell([BasicLSTMCell(...)] * num_layers), ubah menjadi: MultiRNNCell([BasicLSTMCell(...) for _ in range(num_layers)]). Jika sebelumnya Anda menggunakan instans sel yang sama sebagai sel maju dan mundur dari RNN dua arah, cukup buat dua instans (satu untuk maju, satu untuk mundur). Pada Mei 2017, kami akan mulai mentransisikan perilaku sel ini untuk menggunakan bobot tersimpan yang ada, jika ada, saat dipanggil dengan scope=None (yang dapat menyebabkan degradasi model diam, jadi kesalahan ini akan tetap ada hingga saat itu.)

dengan fragmen kode:

  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)

Saya telah mencari-cari di Google tanpa hasil, adakah yang bisa menunjukkan jalan keluar?

awaiting tensorflower

Komentar yang paling membantu

Saya bertemu masalah yang sama. Jika Anda semua menggunakan versi yang dikompilasi pada cabang master, saya percaya bahwa kami adalah masalah yang sama yang disebabkan oleh komit baru -baru ini. Seperti yang dikatakan pesan komit:

Jadikan semua RNNCells di tf.contrib.rnn bertindak seperti tf.layers Layers, tetapi dengan semantik yang lebih ketat untuk no
w:

  1. Saat pertama kali menggunakan __call__, ruang lingkup yang digunakan disimpan di dalam sel. RNNCell mencoba membuat bobot dalam cakupan itu tetapi jika beberapa sudah disetel, kesalahan akan muncul kecuali RNNCell dibangun dengan argumen reuse=True.

  2. Penggunaan __call__ selanjutnya dari instance sel yang sama harus dalam cakupan yang sama.
    Jika tidak, kesalahan akan muncul.

Dari kasus saya, yang menjalankan ptb tutorial , solusinya hanya menambahkan parameter bernama reuse seperti ini di baris 112:

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

Kemudian bekerja.

Semua 102 komentar

Saya mendapatkan kesalahan yang sama ketika mencoba menjalankan contoh terjemahan (bahkan ketika melakukan tes mandiri kecil) yang dapat ditemukan di sini: https://github.com/tensorflow/models/tree/master/tutorials/rnn/translate

Saya bertemu masalah yang sama. Jika Anda semua menggunakan versi yang dikompilasi pada cabang master, saya percaya bahwa kami adalah masalah yang sama yang disebabkan oleh komit baru -baru ini. Seperti yang dikatakan pesan komit:

Jadikan semua RNNCells di tf.contrib.rnn bertindak seperti tf.layers Layers, tetapi dengan semantik yang lebih ketat untuk no
w:

  1. Saat pertama kali menggunakan __call__, ruang lingkup yang digunakan disimpan di dalam sel. RNNCell mencoba membuat bobot dalam cakupan itu tetapi jika beberapa sudah disetel, kesalahan akan muncul kecuali RNNCell dibangun dengan argumen reuse=True.

  2. Penggunaan __call__ selanjutnya dari instance sel yang sama harus dalam cakupan yang sama.
    Jika tidak, kesalahan akan muncul.

Dari kasus saya, yang menjalankan ptb tutorial , solusinya hanya menambahkan parameter bernama reuse seperti ini di baris 112:

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

Kemudian bekerja.

@ebrevdo Bisa tolong lihat ini?

Masalah mereplikasi untuk saya saat menggunakan Windows/GPU build 105 di Shakespeare RNN Repo .

Saat menjalankan kode dengan Rilis Win 1.0.0/GPU, tidak ada masalah.

Repo itu sepertinya ditargetkan pada tf 1.0, bukan rilis menengah.

Pada 8 Mar 2017 15:56, "Tom Wanzek" [email protected] menulis:

Masalah mereplikasi untuk saya saat menggunakan Windows/GPU build 105 di Shakespeare
RNN Repo https://github.com/martin-gorner/tensorflow-rnn-shakespeare .

Saat menjalankan kode dengan Rilis Win 1.0.0/GPU, tidak ada masalah.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285209555 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim5ansaL1KN51T4nCaqLnqw2QHN4Wks5rj0BBgaJpZM4MWl4f
.

@tongda , saya menggunakan Versi Rilis Tensorflow 1.0, bekerja pada MacOS dalam mode cpu. Saya akan beralih ke cabang master untuk melihat apakah itu berfungsi dengan menambahkan parameter "gunakan kembali", terima kasih.

doncat99: jika ya, pastikan kode Anda menanyakan versi tensorflow
dan menaikkan bendera jika versinya lebih rendah dari versi cabang master.
Anda mungkin perlu memeriksa:

dari versi impor tensorflow.core
versi.GIT_VERSION

Pada Rabu, 8 Maret 2017 pukul 18:58, [email protected] menulis:

@tongda https://github.com/tongda , saya menggunakan Versi Rilis dari
Tensorflow 1.0, bekerja pada MacOS dalam mode cpu. Saya akan beralih ke master
cabang untuk melihat apakah itu berfungsi dengan menambahkan parameter "gunakan kembali", terima kasih.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285240438 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim66cU9e16lgD-2D0QLGcQCiHbV0zks5rj2rbgaJpZM4MWl4f
.

@ebrevdo Jadi, apa perubahan yang disarankan pada Shakepeare RNN untuk memungkinkannya bekerja dengan rilis stabil menengah?

Berikut adalah bagian arsitektur kunci dari kode, yang sekarang gagal dengan 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

Sepertinya saya tidak menemukan dokumentasi apa pun tentang flag reuse ?

Terima kasih sebelumnya.

Menggunakan:

multisel = rnn.MultiRNNCell([rnn.DropoutWrapper(rnn.GRUCell(INTERNALSIZE),
input_keep_prob=pkeep) untuk _ dalam rentang(NLAYERS)], state_is_tuple=False)

Yang membuat objek grucell terpisah untuk setiap lapisan.

Pada 10 Mar 2017 07:44, "Tom Wanzek" [email protected] menulis:

@ebrevdo https://github.com/ebrevdo Jadi apa yang akan disarankan?
perubahan pada Shakepeare RNN untuk memungkinkannya bekerja dengan perantara
rilis stabil?

Berikut adalah bagian arsitektur kunci dari kode, yang sekarang gagal dengan
membangun#105:

model (lihat FAQ di README.md)

lr = tf.placeholder(tf.float32, name='lr') # kecepatan belajar
pkeep = tf.placeholder(tf.float32, name='pkeep') # parameter putus
batchsize = tf.placeholder(tf.int32, nama='batchsize')

masukan

X = tf.placeholder(tf.uint8, [None, None], name='X') # [ BATCHSIZE, SEQLEN ]
Xo = tf.one_hot(X, ALPHASIZE, 1.0, 0.0) # [ BATCHSIZE, SEQLEN, ALPHASIZE ]# output yang diharapkan = urutan yang sama digeser 1 karena kita mencoba memprediksi karakter berikutnya
Y_ = tf.placeholder(tf.uint8, [Tidak Ada, Tidak Ada], nama='Y_') # [ BATCHSIZE, SEQLEN ]
Yo_ = tf.one_hot(Y_, ALPHASIZE, 1.0, 0.0) # [ BATCHSIZE, SEQLEN, ALPHASIZ ]# status input
Hin = tf.placeholder(tf.float32, [Tidak ada, INTERNALSIZE*NLAYERS], nama='Hin') # [ BATCHSIZE, INTERNALSIZE * NLAYERS]

menggunakan NLAYERS=3 lapisan sel GRU, membuka gulungan SEQLEN=30 kali# dynamic_rnn menyimpulkan SEQLEN dari ukuran input Xo

satu sel = rnn.GRUCell(UKURAN INTERNASIONAL)
dropcell = rnn.DropoutWrapper(satu sel, input_keep_prob=pkeep)
multicell = rnn.MultiRNNCell([dropcell untuk _ dalam jangkauan(NLAYERS)], state_is_tuple=False)
multisel = rnn.DropoutWrapper(multisel, 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 ] # ini adalah status terakhir dalam urutan

Sepertinya saya tidak menemukan dokumentasi apa pun tentang flag reuse?

Terima kasih sebelumnya.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285702372 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim6MOOCbx3RJEJe8PQBDXGVIXTGPmks5rkW_jgaJpZM4MWl4f
.

Saya tidak mengerti mengapa saya mendapatkan kesalahan ini dengan model tutorial seq2seq :

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

Sumber

di mana sel dibuat dengan

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

@ebrevdo Terima kasih telah kembali ke masalah ini. Sayangnya, perubahan yang disarankan meninggalkan masalah apa adanya, dengan kesalahan yang disebutkan di atas. Mengingat komentar di atas mengenai tutorial seq2seq , saya curiga kita semua berada di kapal yang sama?

Apakah Anda yakin itu kesalahan yang sama persis? Silakan salin dan tempel di sini.

Buruk saya, saya baru saja melalui proses perubahan ke kode yang relevan lagi (dari awal) dan menjalankannya kembali seperti yang diusulkan. Kesalahannya memang telah dihapus dan Bard Tua berhalusinasi baik-baik saja sekarang 👍

Jadi, thx, tidak yakin di mana saya salah kemarin, tapi itu jelas pada saya.

Saya menemui masalah yang sama saat menggunakan Versi Rilis Tensorflow 1.0 dan bekerja pada MacOS dalam mode cpu. Bahkan jika menambahkan parameter "reuse"

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)

multicell Anda terlihat salah ... Anda harus menggunakan "cell() untuk _ in
jangkauan(...)"

Pada Kam, 16 Mar 2017 jam 20:29, cuiming [email protected] menulis:

Saya menemui masalah yang sama saat menggunakan Versi Rilis Tensorflow 1.0
dan bekerja pada MacOS dalam mode cpu. Bahkan jika menambahkan parameter "reuse"

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

muticell = tf.contrib.rnn.MultiRNNCell([sel untuk _ dalam jangkauan(num_layers)], state_is_tuple=True)


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-287257629 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim3A6JQr8ptRKrdiDW_kgNRIFkHGlks5rmf4WgaJpZM4MWl4f
.

Saya mencoba menjalankan contoh terjemahan: python2.7 translate.py --data_dir data/ --train_dir train/ --size=256 --num_layers=2 --steps_per_checkpoint=50

Sepertinya cara menggunakan MultiRNNCell sudah benar:
sel = tf.contrib.rnn.MultiRNNCell([single_cell() untuk _ dalam jangkauan(num_layers)])

Tapi saya mendapat kesalahan yang sama:
ValueError: Mencoba menggunakan kembali RNNCelldengan cakupan variabel yang berbeda dari penggunaan pertama. Penggunaan pertama sel adalah dengan lingkup 'embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder/multi_rnn_cell/cell_0/gru_cell', upaya ini dengan lingkup 'embedding_attention_seq2seq/rnn/multi_rnn_cell/cell_0/gru_cell'. Harap buat instance sel baru jika Anda ingin menggunakan set bobot yang berbeda. Jika sebelumnya Anda menggunakan: MultiRNNCell([GRUCell(...)] * num_layers), ubah menjadi: MultiRNNCell([GRUCell(...) for _ in range(num_layers)]). Jika sebelumnya Anda menggunakan instans sel yang sama sebagai sel maju dan mundur dari RNN dua arah, cukup buat dua instans (satu untuk maju, satu untuk mundur). Pada Mei 2017, kami akan mulai mentransisikan perilaku sel ini untuk menggunakan bobot tersimpan yang ada, jika ada, saat dipanggil dengan scope=None (yang dapat menyebabkan degradasi model diam, jadi kesalahan ini akan tetap ada hingga saat itu.)

@bowu - apakah Anda beruntung dengan ini? jika Anda belum mencobanya, instal ulang tensorflow dari sumber terbaru. ada beberapa perubahan pada beberapa file core_rnn, di antara beberapa lainnya. bekerja untuk saya sekarang.

@robmsylvester Saya menginstal ulang tensorflow dari sumber terbaru, masih kesalahan yang sama. Saya berada di master cabang dan komit terbaru adalah commit 2a4811054a9e6b83e1f5a2705a92aab50e151b13 . Apa komit terbaru saat Anda membangun repo Anda?

Hai, saya menggunakan Tensorflow r1.0 menggunakan GPU yang dibuat menggunakan sumber. Saya mencoba mengikuti tutorial terjemahan Seq2Seq yang tidak dimodifikasi, tetapi saya mendapatkan kesalahan yang sama. yaitu

ValueError: Mencoba menggunakan kembali RNNCelldengan cakupan variabel yang berbeda dari penggunaan pertama. Penggunaan pertama sel adalah dengan lingkup 'embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder/multi_rnn_cell/cell_0/gru_cell', upaya ini dengan lingkup 'embedding_attention_seq2seq/rnn/multi_rnn_cell/cell_0/gru_cell'.....

Bagian kode yang relevan di seq2seq_model.py saya adalah:

 # 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)])

Apa yang bisa saya lakukan untuk menyelesaikan masalah?

menambahkan "reuse=tf.get_variable_scope().reuse" ke panggilan tempat GRUCell dibuat tidak membantu.

Terima kasih banyak!

@prashantserai - lihat apa yang terjadi jika Anda menghapus baris MultiRNNCell dari atas, secara efektif membuat jaringan Anda hanya satu lapisan. Apakah itu berhasil? Mungkin ada bug di suatu tempat di MultiRNNCell. Saya telah membaca tentang itu di suatu tempat baru-baru ini, mungkin di stack overflow.

Jika Anda mengimplementasikan lstm/gru yang ditumpuk sendiri, Anda tidak mendapatkan kesalahan ini, dan Anda dapat mengimplementasikan fungsi yang sama (sebenarnya lebih, karena Anda bebas melakukan apa pun yang Anda inginkan dengan arsitektur dua arah, sisa aneh dan koneksi lewati, dll. .)

@robmsylvester Kesalahan yang sama tetap ada bahkan ketika saya mencoba dengan num_layers=1 yang seharusnya secara efektif melewati baris itu. Ada ide lain? Terima kasih atas masukannya.

Hmmm. Satu hal yang menonjol bagi saya adalah dalam file seq2seq warisan yang direferensikan:

encoder_cell = copy.deepcopy(cell)

Baris ini tampaknya digunakan karena arsitektur yang sama digunakan pada kedua sisi encoder dan decoder. Mereka membuat salinan sel, lalu meneruskan argumen sel ke fungsi penyematan dekoder perhatian, lalu ke dekoder perhatian itu sendiri.

Apa yang terjadi jika Anda secara eksplisit membuat sel encoder DAN sel dekoder dalam file model seq2seq Anda dan meneruskan keduanya ke file perpustakaan lama, membuat sedikit penyesuaian pada fungsi dan argumennya?

@robmsylvester seharusnya tidak membuat perubahan dalam cakupan sel berfungsi? Ini berfungsi untuk dua contoh lainnya juga. Menurut pendapat saya, ini akan menjadi solusi yang sangat buruk; solusi yang lebih bersih harus ada; mungkin kita kehilangan sesuatu? (Saya juga mendapatkan kesalahan yang sama pada tutorial seq2seq, mencoba semua solusi di atas).

@iamgroot42 - Ya, 'solusi' itu memang sangat jelek, tetapi lebih dari itu hanya mencoba mencari di mana masalahnya. Saya akan memainkannya dalam beberapa jam dan melihat apakah saya dapat melacak sesuatu.

Faktanya, copy.deepcopy ada karena ini adalah fungsi warisan dan
kami tidak memiliki sumber daya untuk memelihara/memperbaruinya. Jika Anda ingin
memperkenalkan perubahan yang kompatibel ke belakang yang memungkinkan pengguna untuk memberikan
sel kedua untuk langkah decoding, dan jika Tidak ada maka mundur pada
deepcopy, maka saya akan dengan senang hati meninjau PR. Ingatlah itu akan
harus menjadi perubahan yang kompatibel ke belakang.

Pada Selasa, 4 Apr 2017 pukul 11:38, Rob Sylvester [email protected]
menulis:

@iamgroot42 https://github.com/iamgroot42 - Ya, 'solusi' itu adalah
memang sangat jelek, tetapi lebih dari itu hanya mencoba memburu di mana masalahnya
mungkin. Saya akan memainkannya dalam beberapa jam dan melihat apakah saya dapat melacak sesuatu
turun.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-291593289 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim1QHTDhOC_zT6cKtmUFPOit5Yjn7ks5rso5CgaJpZM4MWl4f
.

@ebrevdo - Saya akan memikirkannya. Saya memiliki penerjemah yang bekerja sangat mirip dengan yang ini tetapi membuat sel melalui kelas terpisah yang memungkinkan untuk menyisipkan lapisan dua arah di tempat yang Anda inginkan, residu di tempat yang Anda inginkan, menggabungkan input dengan concat vs. sum, dan beberapa hal lainnya. Saya pikir saya bisa memigrasikan kelas saya ke tutorial ini dengan cukup mudah dengan menggunakan RNN statis. Aku akan memberitahu Anda.

@ebrevdo saya menjalankan Tensorflow r1.0 (tensorflow-1.0.1-cp36-cp36m-linux_x86_64) di Red Hat dan memiliki versi terbaru dari tutorial terjemahan dari Github.. apakah ada cara yang Anda tahu untuk membuat ini berfungsi saat ini?

Sangat disayangkan bahwa tutorial terjemahan tidak bekerja dengan TF 1.0. Kita harus memperbaikinya. @lukaszkaiser bisa lihat? Kami sedang mengerjakan tutorial baru tetapi masih beberapa minggu lagi dan akan membutuhkan versi malam TensorFlow (atau TF 1.1 atau 1.2) untuk bekerja.

(lukasz; sulit bagi saya untuk mengidentifikasi dari berbagai komentar bagian mana dari tutorial yang salah di TF 1.0. ada kemungkinan Anda dapat mengidentifikasi garis dan saya dapat membantu membuatnya berfungsi?)

@ebrevdo Ini tutorialnya. Kesalahannya ada di kelompok garis ini . Sel yang diteruskan di sini digunakan untuk fase mundur dan maju dari model seq2seq lama, yang menimbulkan kesalahan karena sel yang sama digunakan dengan cakupan yang berbeda.

@iamgroot42 apakah Anda ingin membuat PR dengan perubahan yang diperlukan? Itu akan bagus, saat ini saya tidak memiliki siklus untuk melakukannya sendiri. Terima kasih!

Saya perhatikan bahwa TF 1.0 berfungsi dengan baik dengan versi terbaru dari tutorial terjemahan jika dikompilasi dari sumber pada remote cabang/Origin/r1.0

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

kemudian buat dan instal TensorFlow, itu berfungsi dengan baik.

Pada remote cabang/Origin/r1.1 memiliki kesalahan "cakupan variabel berbeda".
Saya memodifikasi kode seperti yang disarankan @robmsylvester

Apa yang terjadi jika Anda secara eksplisit membuat sel encoder DAN sel dekoder dalam file model seq2seq Anda dan meneruskan keduanya ke file perpustakaan lama, membuat sedikit penyesuaian pada fungsi dan argumennya?

dan itu bekerja untuk saya sekarang.

@oxwsds Tensorflow yang saya gunakan adalah 1.0.1 jadi mungkin ada kesalahan..

Saya telah mencoba apa yang disarankan @robmsylvester kemudian sebenarnya.. dan pelatihan telah dimulai (2 hari 13 jam selesai sekarang) .. gagal selama decoding meskipun dengan kesalahan:

  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)

Apakah Anda mencoba decoding?

@prashantserai Tidak tahu persis, tetapi apa yang Anda temui tampaknya menjadi masalah lain.

@prashantserai Jika gagal hanya ketika Anda memecahkan kode, mungkin ada hubungannya dengan menggunakan ukuran batch satu? Apakah model masih berlatih jika Anda menurunkan ukuran batch menjadi satu selama pelatihan?

@bowu Kesalahan yang sama di sini. Mac OX Sierra, TensorFlow 1.1.0-rc1, Python 2.7.10 & Python 3.6.1.

@robmsylvester itu berhasil melatih dengan ukuran batch satu juga, tetapi gagal selama decoding dengan cara yang sama atau serupa .. inilah traceback penuh .. alasan saya menganggap ini sebagai kesalahan yang terhubung adalah karena referensi ke seq2seq_f (yang merupakan salah satu fungsi yang dimodifikasi) (komentar #prashant dari kode saya untuk menandakan garis yang dimodifikasi adalah bagian dari jejak)

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 apakah pendapat Anda berubah berdasarkan jejak lengkap di atas?

@prashantserai Saya mencoba decoding dan berfungsi dengan baik. Saya cukup menambahkan encoder_cell arg ke function tf.contrib.legacy_seq2seq.embedding_attention_seq2seq dan di translate/seq2seq_model.py buat sel dan berikan ke fungsi, yang dipanggil di function seq2seq_f . Bagaimana Anda mengubah kode Anda?

@oxwsds @robmsylvester @ebrevdo
Saya akhirnya memiliki sesuatu yang berfungsi sekarang (maksud saya, hasil untuk jaringan 256 unit lapisan tunggal saya agak mengerikan, tapi itu mungkin hanya karena jaringannya sangat ringan dan saya tidak menyetel params SAMA SEKALI)
Terima kasih banyak semuanya...!!!!!

_Inilah pemikiran saya di akhir ini:_

@oxwsds berkomentar bahwa tutorial (dalam bentuknya saat ini) berfungsi tanpa perlu modifikasi apa pun ketika Tensorflow dikompilasi dari cabang remotes/Origin/r1.0 adalah TRUE . Meskipun, yang menyedihkan adalah bahwa versi Tensorflow yang saya miliki yang memerlukan modifikasi dalam kode Tensorflow, dan versi di remote/Origin/r1.0 keduanya diberi label yang sama.

Perbaikan @robmsylvester di komentar (disalin di bawah) TELAH BEKERJA untuk versi Tensorflow saya di mana Tutorial tidak berfungsi di luar kotak (dan saya kira juga berfungsi untuk TF 1.1). Ini sedikit berantakan untuk diterapkan, tetapi saya bisa melakukannya, yang mengatakan sesuatu :-P
Kesalahan dalam dua komentar terakhir saya sebelum ini adalah karena kesalahan saya. Seperti boneka, saya menentukan lapisan dan parameter unit tersembunyi hanya selama pelatihan, saya meninggalkan kode untuk menggunakan default selama decoding. (bagian dari tutorial ini bisa menjadi bukti palsu: https://www.tensorflow.org/tutorials/seq2seq#lets_run_it )

Hmmm. Satu hal yang menonjol bagi saya adalah dalam file seq2seq warisan yang direferensikan:

encoder_cell = copy.deepcopy(sel)

Baris ini tampaknya digunakan karena arsitektur yang sama digunakan pada kedua sisi encoder dan decoder. Mereka membuat salinan sel, lalu meneruskan argumen sel ke fungsi penyematan dekoder perhatian, lalu ke dekoder perhatian itu sendiri.

Apa yang terjadi jika Anda secara eksplisit membuat sel encoder DAN sel dekoder dalam file model seq2seq Anda dan meneruskan keduanya ke file perpustakaan lama, membuat sedikit penyesuaian pada fungsi dan argumennya?

Terima kasih untuk umpan baliknya! Sepertinya ada sesuatu yang berbeda di antara TF
di pypi dan di tag itu? Gun, apakah itu mungkin?

Pada Senin, 10 Apr 2017 jam 21:05, [email protected]
menulis:

@oxwsds https://github.com/oxwsds @robmsylvester
https://github.com/robmsylvester @ebrevdo https://github.com/ebrevdo
Saya akhirnya memiliki sesuatu yang berfungsi sekarang (maksud saya, hasil untuk single saya
lapisan 256 unit jaringan agak mengerikan, tapi itu mungkin saja
karena jaringannya sangat ringan dan saya tidak menyetel params SAMA SEKALI)

Inilah garis bawah saya:

@oxwsds https://github.com/oxwsds berkomentar bahwa tutorial (di dalamnyabentuk saat ini) berfungsi tanpa perlu modifikasi saat Tensorflow adalahdikompilasi dari cabang remotes/Origin/r1.0 adalah TRUE . Sedikit sedih
meskipun itu adalah versi Tensorflow yang saya modifikasi
dalam kode Tensorflow diperlukan, dan versi di remote/Origin/r1.0
keduanya diberi label yang sama.

@robmsylvester https://github.com/robmsylvester's fix di komentar
(disalin di bawah) BERHASIL untuk versi Tensorflow saya di mana Tutorial
tidak bekerja di luar kotak (dan saya kira juga harus bekerja untuk TF 1.1). Dia
sedikit berantakan untuk diterapkan, tetapi saya bisa melakukannya, yang mengatakan sesuatu
:-P
Kesalahan dalam dua komentar terakhir saya sebelum ini adalah karena kesalahan saya. Suka
sebuah boneka, saya hanya menentukan parameter lapisan dan unit tersembunyi
selama pelatihan, saya meninggalkan kode untuk menggunakan default selama decoding. (inibagian dari tutorial ini bisa menjadi bukti yang sedikit lebih palsu:https://www.tensorflow.org/tutorials/seq2seq#lets_run_ithttps://www.tensorflow.org/tutorials/seq2seq#lets_run_it )

Hmmm. Satu hal yang menonjol bagi saya adalah dalam warisan yang dirujuk seq2seq
mengajukan:

encoder_cell = copy.deepcopy(sel)

Baris ini tampaknya digunakan karena arsitektur yang sama digunakan pada keduanya
sisi encoder dan decoder. Mereka membuat salinan sel, lalu melewati
argumen sel bersama dengan fungsi penyematan decoder perhatian, lalu ke
decoder perhatian itu sendiri.

Apa yang terjadi jika Anda secara eksplisit membuat sel encoder DAN dekoder
sel dalam file model seq2seq Anda dan berikan keduanya ke perpustakaan lama
file, membuat penyesuaian kecil pada fungsi dan argumennya?


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-293143828 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtimxvcfFnbWbpj7aUs3BUjwGEFj6p5ks5ruvvygaJpZM4MWl4f
.

Untuk informasi, saya mengalami masalah ini saat mencoba menumpuk sel LSTM:
Kode asli saya adalah:

    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)

Kemudian, dengan kode berikut, membuat model tidak masalah, tetapi saya tidak dapat membagikan variabel dengan model lain. (misalnya jika Anda membuat train_model dan valid_model yang seharusnya berbagi tensor, itu akan gagal)

    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)

Jadi akhirnya saya menggunakan lstm_creator untuk menjadi fungsi seperti lstm_cell di tensorflow/models/tutorials/rnn/ptb/ptb_word_lm.py#L112 . Saya sekarang memiliki:

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)

Sekarang sepenuhnya berfungsi

mencoba menjalankannya, yang menghasilkan kesalahan yang sama:

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

Solusi @pltrdy tidak melakukannya untuk saya dengan aneh. aku mengerti

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 apakah Anda menggunakan fungsi https://github.com/tensorflow/models/blob/master/tutorials/rnn/ptb/ptb_word_lm.py#L112 saya sebutkan di akhir posting saya (sekarang diedit agar lebih jelas )

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

itu memecahkan masalah saya

Berhasil memperbaiki masalah ini dengan menginstal versi lama Tensorflow:
pip install -Iv tensorflow==1.0

Saya menerima kesalahan saat menjalankan tutorial seq2seq

Sehubungan dengan apa yang dikatakan @ebrevdo , saya pikir solusinya bukanlah memperbaiki kode seq2seq lawas, tetapi memperbarui tutorial untuk menggunakan paket contrib.seq2seq sebagai gantinya, yang dipelihara secara aktif. Sangat melemahkan semangat ketika program tensorflow pertama yang Anda jalankan mengeluarkan banyak kesalahan. Jika saya punya waktu minggu ini, saya akan mengirimkan PR.

Kami sedang mengerjakan tutorial seq2seq baru. Kami berharap untuk rilis pada akhir
bulan lalu tetapi semakin tertunda. Ini akan menggunakan API baru.

Pada 1 Mei 2017 08:07, "Kyle Teague" [email protected] menulis:

Mengenai apa yang dikatakan @ebrevdo https://github.com/ebrevdo , saya pikir
solusinya bukan memperbaiki kode seq2seq lawas, tetapi memperbarui
tutorial untuk menggunakan paket contrib.seq2seq sebagai gantinya, yang aktif
terawat. Hal ini cukup melemahkan semangat ketika program tensorflow pertama Anda
pernah menjalankan memuntahkan banyak kesalahan. Jika saya punya waktu minggu ini, saya akan
menyerahkan PR.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-298350307 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim587xZx9Gi4-yXmwccSum8_Trc1oks5r1fUogaJpZM4MWl4f
.

@ebrevdo Saya menemui kesalahan yang sama saat menjalankan model sequence_to_sequence di situs web tensorflow1.1. Dan saya telah mencoba menggunakan parameter 'reuse' tetapi gagal. Bisakah Anda memberi tahu saya kapan tutorial seq2seq baru akan dirilis?

Sepertinya bersamaan dengan tf 1.2, karena kami akan mengandalkan beberapa yang baru
fitur rilis itu.

Pada 4 Mei 2017 21:16, "njuzrs" [email protected] menulis:

@ebrevdo https://github.com/ebrevdo Saya menemui kesalahan yang sama saat menjalankan
model sequence_to_sequence di situs web tensorflow1.1. Dan saya sudah mencoba
untuk menggunakan parameter 'reuse' tetapi gagal. Bisakah Anda memberi tahu saya kapan seq2seq baru?
tutorial akan dirilis?


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-299366774 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim8_kFTM7-SsXQAA-Ar0dfhHMGT0Zks5r2qKngaJpZM4MWl4f
.

@ebrevdo Saya juga menghadapi masalah yang sama dan tidak dapat maju dengan seq2seq. Akan sangat membantu jika Anda dapat memberi tahu kami/saya kemungkinan tanggal untuk tutorial baru.
Terima kasih banyak atas bantuan Anda.

Menginstal menggunakan pip install tensorflow==1.0 (Tensorflow 1.0) berfungsi untuk saya (tutorial terjemahan).

Saya memiliki versi 1.1.0-rc2.

TF1.2 akan menyelesaikan masalah ini? Tolong bantu saya bagaimana melanjutkan pelatihan model. TF 1.0 berfungsi tetapi tidak memiliki api devicewrapper untuk beberapa GPU.

Memiliki masalah yang sama dengan aliran tensor 1.1. Masih mencari solusi

Saya mencoba beberapa hal, pada akhirnya saya dapat menggunakan tensorflow 1.1 tetapi harus melakukan perubahan ini: (berdasarkan Tshzzz di atas)

Pindahkan ini:
multicell = rnn.MultiRNNCell([dropcell]*NLAYERS, state_is_tuple=False)

Dan tambahkan ini:
sel=[]
untuk _ dalam rentang (NLAYERS):
sel = rnn.DropoutWrapper(tf.contrib.rnn.GRUCell(INTERNALSIZE), input_keep_prob=pkeep)
sel.tambahkan(sel)
multisel = rnn.MultiRNNCell(sel, state_is_tuple=False)

@ebrevdo Selamat, TF 1.2 baru saja dirilis - apakah tutorial baru juga dirilis di suatu tempat atau akan dirilis dalam waktu dekat?

Terima kasih

Kami akan berencana untuk mengumumkannya saat dirilis. Bekerja di atasnya.

Pada 19 Mei 2017 19:02, "prashantserai" [email protected] menulis:

@ebrevdo https://github.com/ebrevdo Selamat, TF 1.2 baru saja diterima
dirilis - apakah tutorial baru juga dirilis di suatu tempat atau sedang
dirilis dalam waktu dekat?

Terima kasih


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-302844002 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim0RWDzNCXk-bIjKSyHLvgFxUvq2lks5r7km7gaJpZM4MWl4f
.

Bagi siapa pun yang menggunakan tensorflow-gpu==1.1.0 dan mendapatkan kesalahan ini, beralih ke 1.0.0 melalui pip install tensorflow-gpu==1.0.0 tidak akan memperbaiki masalah, setidaknya tidak berhasil untuk saya.

Saya mengalami masalah ini di mac dan ubuntu dan kompilasi dari sumber berfungsi dua kali. Jadi:
instal pip https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0-cp34-cp34m-linux_x86_64.whl

@ajaanbaahu Masih menunggu tf1.2 tutorial seq2seq baru.

Ini bekerja untuk saya menggunakan pip install tensorflow==1.0 .

Untuk tf r1.2, mendapat kesalahan deepcopy. Seperti yang tercantum dalam urutan ke urutan kesalahan model #1050

Sebagai pemula, saya mengajukan beberapa pendapat saya.
Kode berikut akan membuat kesalahan serupa terjadi:
(Sepotong kode saya)

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)

Dump kesalahan sebagai berikut:

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.)

Tapi setelah saya melakukan revisi, itu bisa berhasil.

"""
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)

Tidak satu pun dari solusi tersebut yang bekerja untuk saya dengan Tensorflow 1.1

Saya menggunakan model $# seq2seq MultiRNNCell .

Saya harus membalikkan kembali ke 1.0.1: pip3 install tensorflow==1.0

Adakah yang mengalami masalah ini saat bekerja dengan legacy_seq2seq.rnn_decoder()?

@oxwsds Seperti yang Anda katakan, saya mengubah sel args input tf.contrib.legacy_seq2seq.embedding_attention_seq2seq menjadi dua sel berbeda {encoder_cells, decoder_cells}. Akhirnya, saya membuat model seq2seq berfungsi. Setelah 73200 setps, saya mendapatkan kebingungan 5,54.
Lalu saya menjalankan bagian decode,

Siapa presiden amerika serikat?
Qui est le président des tats-Unis ?

Masalah terpecahkan. Terima kasih.

@doncat99
Tampaknya copy.deepcopy(cell) di seq2seq.py tidak berpengaruh.
Jadi saya mengubah bagian terkait di seq2seq_model.py menjadi

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 , Bisakah Anda membagikan kode Anda?

Memutakhirkan ke Tensorflow 1.2.0 dan menghasilkan sel dalam satu lingkaran alih-alih perkalian daftar memperbaiki ini untuk saya.

Mendapat kesalahan dengan TF1.2 saat menjalankan translate.py, detailnya:
nama: GeForce GTX 1080 Ti
mayor: 6 minor: 1 memoriClockRate (GHz) 1,582
pciBusID 0000:02:00.0
Total memori: 10.91GiB
Memori bebas: 10.76GiB
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
22-06-2017 09:15:04.485265: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Membuat perangkat TensorFlow (/gpu:0) -> (perangkat: 0, nama: GeForce GTX 1080 Ti, pci nomor bus: 0000:02:00.0)
Membuat 3 lapisan 1024 unit.
Traceback (panggilan terakhir terakhir):
File "translate.py", baris 322, di
tf.app.run()
File "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/platform/app.py", baris 48, sedang dijalankan
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "translate.py", baris 319, di main
kereta()
File "translate.py", baris 178, di kereta
model = create_model(sess, False)
File "translate.py", baris 136, di create_model
tipe d=tipe d)
File "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py", baris 179, di __init__
softmax_loss_function = fungsi softmax_loss_)
File "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", baris 1206, di model_with_buckets
decoder_inputs[:bucket[1]])
File "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py", baris 178, di
lambda x, y: seq2seq_f(x, y, Salah),
File "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py", baris 142, di seq2seq_f
tipe d=tipe d)
File "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", baris 848, di embedding_attention_seq2seq
encoder_cell = copy.deepcopy(sel)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 174, di deepcopy
y = mesin fotokopi (memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", baris 476, di __deepcopy__
setattr(hasil, k, copy.deepcopy(v, memo))
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 230, di _deepcopy_list
y.tambahkan(deepcopy(a, memo))
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 230, di _deepcopy_list
y.tambahkan(deepcopy(a, memo))
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 230, di _deepcopy_list
y.tambahkan(deepcopy(a, memo))
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 237, di _deepcopy_tuple
y.tambahkan(deepcopy(a, memo))
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 334, di _reconstruct
status = deepcopy(status, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 163, di deepcopy
y = mesin fotokopi(x, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 257, di _deepcopy_dict
y[deepcopy(kunci, memo)] = deepcopy(nilai, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 190, di deepcopy
y = _rekonstruksi(x, rv, 1, memo)
File "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", baris 343, di _reconstruct
y.__dict__.update(status)
AttributeError: objek 'NoneType' tidak memiliki atribut 'update'

Saya juga menemukan kesalahan yang disebabkan oleh copy.deepcopy(cell) di embedding_attention_seq2seq() saat menjalankan self_test() dalam model terjemahan dalam tutorial.
Saya mencoba mengubah kode di seq2seq_f() di Seq2SeqModel sebagai berikut:

    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)

Maka tidak ada kesalahan sekarang.
TAPI sebagai pemula saya tidak tahu apakah kode di sini berfungsi seperti sebelumnya dan sepertinya perubahan membuat model berjalan lebih lambat.

Saya ingin memperbarui semua orang bahwa saya menurunkan tensorflow ke 1.0.0 (tensorflow-GPU) dan itu berfungsi untuk saya. Model bekerja seperti yang diharapkan. Saya berasumsi bahwa versi CPU 1.0.0 harus berfungsi seperti yang diharapkan? Atau?.
Terima kasih :)

Hai teman-teman, saya tidak tahu apakah Anda masih tertarik dengannya, tetapi saya menemukan bahwa masalahnya terkait dengan operasi penyalinan sel yang diteruskan sebagai params ke fungsi embedding_attention_seq2seq . Ini karena definisi sel yang sama digunakan baik untuk encoder maupun decoder. Saya pikir tutorial sudah usang karena menggunakan model seq2seq dengan bucketing berbeda dengan seq2seq dinamis. Tapi, saya menempelkan fungsi yang dimodifikasi yang berfungsi. Fungsi ini diperbarui dalam file tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py .

Terima kasih,
fabio

```! python
def embedding_attention_seq2seq(masukan_encoder,
masukan_dekoder,
sel_enc,
sel_dec,
num_encoder_symbols,
num_decoder_symbols,
embedding_size,
jumlah_kepala=1,
output_projection=Tidak ada,
feed_previous=Salah,
dtype=Tidak ada,
lingkup=Tidak ada,
initial_state_attention=Salah):
"""Menanamkan model urutan-ke-urutan dengan perhatian.

Model ini pertama kali menyematkan encoder_inputs dengan embedding yang baru dibuat (berbentuk
[num_encoder_symbols x input_size]). Kemudian menjalankan RNN untuk menyandikan
encoder_inputs tertanam ke dalam vektor keadaan. Itu membuat output dari ini
RNN di setiap langkah untuk digunakan untuk perhatian nanti. Selanjutnya, ia menyematkan decoder_inputs
oleh embedding lain yang baru dibuat (berbentuk [num_decoder_symbols x
masukan_ukuran]). Kemudian ia menjalankan decoder perhatian, diinisialisasi dengan yang terakhir
status encoder, pada decoder_inputs yang disematkan dan memperhatikan output encoder.

Peringatan: ketika output_projection adalah Tidak Ada, ukuran vektor perhatian
dan variabel akan dibuat proporsional dengan num_decoder_symbols, bisa besar.

Argumen:
encoder_inputs: Daftar Tensor int32 1D berbentuk [batch_size].
decoder_inputs: Daftar Tensor int32 1D berbentuk [batch_size].
sel: tf.nn.rnn_cell.RNNCell mendefinisikan fungsi dan ukuran sel.
num_encoder_symbols: Bilangan bulat; jumlah simbol di sisi encoder.
num_decoder_symbols: Bilangan bulat; jumlah simbol di sisi decoder.
embedding_size: Integer, panjang vektor embedding untuk setiap simbol.
num_heads: Jumlah kepala perhatian yang dibaca dari status_perhatian.
output_projection: Tidak ada atau sepasang (W, B) dari bobot proyeksi output dan
bias; W memiliki bentuk [output_size x num_decoder_symbols] dan B memiliki
bentuk [num_decoder_symbols]; jika disediakan dan feed_previous=True, masing-masing
diumpankan output sebelumnya pertama-tama akan dikalikan dengan W dan ditambahkan B.
feed_previous: Tensor Boolean atau skalar Boolean; jika Benar, hanya yang pertama
dari decoder_inputs akan digunakan (simbol "GO"), dan semua decoder lainnya
input akan diambil dari output sebelumnya (seperti pada embedding_rnn_decoder).
Jika False, decoder_inputs digunakan seperti yang diberikan (case decoder standar).
dtype: Dtype dari status RNN awal (default: tf.float32).
scope: VariableScope untuk subgraf yang dibuat; default ke
"embedding_attention_seq2seq".
initial_state_attention: Jika False (default), perhatian awal adalah nol.
Jika Benar, inisialisasi perhatian dari keadaan awal dan perhatian
negara bagian.

Pengembalian:
Tuple dari formulir (output, state), di mana:
outputs: Daftar dengan panjang yang sama dengan decoder_inputs dari Tensor 2D dengan
bentuk [batch_size x num_decoder_symbols] berisi yang dihasilkan
keluaran.
state: Status setiap sel dekoder pada langkah waktu terakhir.
Ini adalah bentuk Tensor 2D [batch_size x cell.state_size].
"""
dengan variable_scope.variable_scope(
lingkup atau "embedding_attention_seq2seq", dtype=dtype) sebagai cakupan:
dtype = scope.dtype
# Pembuat kode.

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 Terima kasih atas fungsinya. Terlihat sangat membantu. Saya juga melihat bahwa tutorial sudah usang. Saya masih menunggu rilis tutorial resmi. Sepertinya Anda telah menggunakan api baru. Apakah Anda memiliki kode yang dapat dicari untuk memulai pengkodean pada api baru?
Bantuan apa pun sangat dihargai. Terima kasih sekali lagi :)

@syw2014 Apakah Anda memperbaiki masalah Anda?

@w268wang belum, masih menunggu solusi lain, tapi komentar @Miopas mungkin bisa dicoba, dan saya mencoba solusi @fabiofumarola

katanya TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'
setelah menggunakan pembaruan yang diposting @fabiofumarola . Bisakah kalian membantu saya?

Ya karena pembaruan yang saya usulkan mengharuskan Anda untuk mengubah
fungsi embedding_attention_seq2seq. Jika Anda pergi ke file sumber di dalam diri Anda
rilis tensorflow Anda dapat mengubah definisi metode Anda sendiri.

Pada hari Minggu, 2 Jul 2017 pukul 18:15, sachinh35 [email protected] trote

katanya TypeError: embedding_attention_seq2seq() hilang 1 diperlukan
argumen posisi: 'dec_cell'


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312500996 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABepUEc3W8m5CVDQGnCLu4dcJVFwwLDZks5sJ8IOgaJpZM4MWl4f
.

>

Dikirim dari Gmail Seluler

Ya saya melakukan hal yang sama. Saya mengubah fungsi dalam file seq2seq.py dalam rilis tensorflow. Masih saya mendapatkan kesalahan yang sama. Apakah ada satu argumen lagi untuk fungsi tersebut?

Ya, sekarang dalam kode Anda, Anda perlu menentukan ke rnn_cells. Satu untuk pembuat enkode
dan satu lagi untuk decoder.

Pada Minggu, 2 Juli 2017 pukul 20:54, fabio fumarola [email protected] menulis:

Ya

Pada Minggu, 2 Juli 2017 pukul 18:50, sachinh35 [email protected] menulis:

Ya saya melakukan hal yang sama. Saya mengubah fungsi di file seq2seq.py di
pelepasan tensorflow. Masih saya mendapatkan kesalahan yang sama. Apakah ada satu?
lebih banyak argumen untuk fungsi?


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312503106 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABepUOXTQC_mzLuhcwW0iZRVkLmmr8yIks5sJ8pugaJpZM4MWl4f
.

>

Dikirim dari Gmail Seluler

Saya benar-benar baru dalam hal ini. Mungkin ini pertanyaan yang cukup mendasar, tetapi bisakah Anda memberi tahu argumen apa yang harus diteruskan sebagai sel dekoder dalam kode ini? Saya mencoba mengembangkan seq2seq seperti yang ditunjukkan dalam tutorial tensorflow menggunakan dataset sendiri.

`
dari __future__ impor absolute_import
dari __future__ divisi impor
dari __future__ impor print_function

impor acak

impor numpy sebagai np
dari six.moves impor xrange # pylint: disable=redefined-builtin
impor tensorflow sebagai tf

impor data_utils

kelas Seq2SeqModel (objek):
def __init__(sendiri,
source_vocab_size,
target_vocab_size,
ember,
ukuran,
jumlah_lapisan,
max_gradient_norm,
ukuran_batch,
tingkat_belajar,
learning_rate_decay_factor,
use_lstm=Salah,
jumlah_sampel=512,
forward_only=Salah,
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`

Ini adalah pertanyaan yang bagus untuk stack overflow.

Pada 3 Juli 2017 08:46, "sachinh35" [email protected] menulis:

Saya benar-benar baru dalam hal ini. Mungkin ini pertanyaan yang cukup mendasar tetapi bisakah Anda
beri tahu argumen apa yang harus diteruskan sebagai sel dekoder dalam kode ini? saya
mencoba mengembangkan seq2seq seperti yang ditunjukkan dalam tutorial tensorflow menggunakan own
Himpunan data.
`# Hak Cipta 2015 Penulis TensorFlow. Seluruh hak cipta.
Dilisensikan di bawah Lisensi Apache, Versi 2.0 ("Lisensi"); kamu boleh
tidak menggunakan file ini kecuali sesuai dengan Lisensi. Anda dapat memperoleh
salinan Lisensi di http://www.apache.org/licenses/LICENSE-2.0 Kecuali
diwajibkan oleh hukum yang berlaku atau disetujui secara tertulis, perangkat lunak didistribusikan
di bawah Lisensi didistribusikan "SEBAGAIMANA ADANYA", TANPA JAMINAN
ATAU KONDISI APA PUN, baik tersurat maupun tersirat. Lihat Lisensi untuk
bahasa khusus yang mengatur izin dan batasan di bawah

Lisensi. ================================================== ==========

"""Model urutan-ke-urutan dengan mekanisme perhatian."""

dari impor masa depan absolute_import
dari divisi impor masa depan
dari impor masa depan print_function

impor acak

impor numpy sebagai np
dari six.moves impor xrange # pylint: disable=redefined-builtin
impor tensorflow sebagai tf

impor data_utils

kelas Seq2SeqModel (objek):
"""Model urutan-ke-urutan dengan perhatian dan untuk banyak keranjang.

Kelas ini mengimplementasikan jaringan saraf berulang multi-layer sebagai encoder,
dan decoder berbasis perhatian. Ini sama dengan model yang dijelaskan dalam
makalah ini: http://arxiv.org/abs/1412.7449 - silakan cari di sana
rincian,
atau ke perpustakaan seq2seq untuk implementasi model lengkap.
Kelas ini juga memungkinkan untuk menggunakan sel GRU selain sel LSTM, dan
sampel softmax untuk menangani ukuran kosakata keluaran besar. Lapisan tunggal
versi model ini, tetapi dengan encoder dua arah, disajikan di
http://arxiv.org/abs/1409.0473
dan softmax sampel dijelaskan dalam Bagian 3 dari makalah berikut.
http://arxiv.org/abs/1412.2007
"""

def init (sendiri,
source_vocab_size,
target_vocab_size,
ember,
ukuran,
jumlah_lapisan,
max_gradient_norm,
ukuran_batch,
tingkat_belajar,
learning_rate_decay_factor,
use_lstm=Salah,
jumlah_sampel=512,
forward_only=Salah,
dtype=tf.float32):
"""Buat modelnya.

Argumen:
source_vocab_size: ukuran kosakata sumber.
target_vocab_size: ukuran kosakata target.
ember: daftar pasangan (I, O), di mana saya menentukan panjang input maksimum
yang akan diproses dalam ember itu, dan O menentukan output maksimum
panjang. Instance pelatihan yang memiliki input lebih panjang dari I atau output
lebih lama dari O akan didorong ke ember berikutnya dan diberi bantalan yang sesuai.
Kami berasumsi bahwa daftar diurutkan, misalnya [(2, 4), (8, 16)].
ukuran: jumlah unit di setiap lapisan model.
num_layers: jumlah lapisan dalam model.
max_gradient_norm: gradien akan dipotong ke norma ini secara maksimal.
batch_size: ukuran batch yang digunakan selama pelatihan;
konstruksi model tidak tergantung pada ukuran_batch, jadi bisa jadi
diubah setelah inisialisasi jika ini memungkinkan, misalnya untuk decoding.
learning_rate: kecepatan belajar untuk memulai.
learning_rate_decay_factor: mengurangi kecepatan belajar sebanyak ini saat dibutuhkan.
use_lstm: jika benar, kami menggunakan sel LSTM alih-alih sel GRU.
num_samples: jumlah sampel untuk softmax sampel.
forward_only: jika disetel, kami tidak membuat lintasan mundur dalam model.
dtype: tipe data yang digunakan untuk menyimpan variabel internal.
"""
self.source_vocab_size = source_vocab_size
self.target_vocab_size = target_vocab_size
self.buckets = ember
self.batch_size = batch_size
self.learning_rate = tf.Variabel(
float(learning_rate), dapat dilatih=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)

Jika kita menggunakan softmax sampel, kita membutuhkan proyeksi keluaran.

keluaran_proyeksi = Tidak ada
softmax_loss_function = Tidak ada

Softmax sampel hanya masuk akal jika kita sampel kurang dari ukuran kosakata.

jika num_samples > 0 dan 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)
keluaran_proyeksi = (w, b)

def sampled_loss(label, input):
labels = tf.reshape(labels, [-1, 1])
# Kita perlu menghitung sampled_softmax_loss menggunakan float 32bit untuk
# hindari ketidakstabilan numerik.
local_w_t = tf.cast(w_t, tf.float32)
local_b = tf.cast(b, tf.float32)
local_inputs = tf.cast(input, tf.float32)
kembali tf.cast(
tf.nn.sampled_softmax_loss(local_w_t, local_b, input_lokal, label,
num_samples, self.target_vocab_size),
tipe d)
softmax_loss_function = sampled_loss

Buat sel multi-lapisan internal untuk RNN ​​kami.

def single_cell():
kembalikan tf.nn.rnn_cell.GRUCell(ukuran)
jika use_lstm:
def single_cell():
kembalikan tf.nn.rnn_cell.BasicLSTMCell(ukuran)
sel = sel_tunggal()
jika num_layers > 1:
sel = tf.nn.rnn_cell.MultiRNNCell([single_cell() untuk _ dalam jangkauan(num_layers)])

Fungsi seq2seq: kami menggunakan embedding untuk input dan perhatian.

def seq2seq_f(masukan_encoder, masukan_dekoder, do_dekode):
kembalikan tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(
masukan_pengkode,
masukan_dekoder,
sel,
num_encoder_symbols=sumber_vocab_size,
num_decoder_symbols=target_vocab_size,
embedding_size=ukuran,
keluaran_proyeksi=keluaran_proyeksi,
feed_previous=do_decode,
tipe d=tipe d)

Umpan untuk masukan.

self.encoder_inputs = []
self.decoder_inputs = []
self.target_weights = []
for i in xrange(buckets[-1][0]): # Bucket terakhir adalah yang terbesar.
self.encoder_inputs.append(tf.placeholder(tf.int32, bentuk=[Tidak Ada],
nama="encoder{0}".format(i)))
untuk saya di xrange(buckets[-1][1] + 1):
self.decoder_inputs.append(tf.placeholder(tf.int32, bentuk=[Tidak Ada],
nama="dekoder{0}".format(i)))
self.target_weights.append(tf.placeholder(dtype, shape=[Tidak ada],
nama="berat{0}".format(i)))

Target kami adalah input decoder yang digeser satu.

target = [self.decoder_inputs[i + 1]
untuk saya di xrange(len(self.decoder_inputs) - 1)]

Keluaran dan kerugian pelatihan.

jika forward_only:
self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
self.encoder_inputs, self.decoder_inputs, target,
self.target_weights, bucket, lambda x, y: seq2seq_f(x, y, True),
softmax_loss_function = fungsi softmax_loss_)
# Jika kita menggunakan proyeksi keluaran, kita perlu memproyeksikan keluaran untuk decoding.
jika output_projection bukan None:
untuk b dalam xrange(len(ember)):
diri.keluaran[b] = [
tf.matmul(keluaran, proyeksi_keluaran[0]) + proyeksi_keluaran[1]
untuk keluaran di self.outputs[b]
]
kalau tidak:
self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
self.encoder_inputs, self.decoder_inputs, target,
self.target_weights, ember,
lambda x, y: seq2seq_f(x, y, Salah),
softmax_loss_function = fungsi softmax_loss_)

Operasi pembaruan gradien dan SGD untuk melatih model.

params = tf.trainable_variables()
jika tidak forward_only:
self.gradient_norms = []
self.update = []
opt = tf.train.GradientDescentOptimizer(self.learning_rate)
untuk b dalam xrange(len(ember)):
gradien = tf.gradients(self.losses[b], params)
clipped_gradients, norma = tf.clip_by_global_norm(gradien,
max_gradient_norm)
self.gradient_norms.append(norma)
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):
"""Jalankan langkah model dengan memasukkan input yang diberikan.

Argumen:
session: sesi tensorflow untuk digunakan.
encoder_inputs: daftar vektor int numpy untuk dimasukkan sebagai input encoder.
decoder_inputs: daftar vektor int numpy untuk dimasukkan sebagai input decoder.
target_weights: daftar vektor float numpy untuk dimasukkan sebagai bobot target.
bucket_id: bucket model mana yang akan digunakan.
forward_only: apakah akan melakukan langkah mundur atau maju saja.

Pengembalian:
Triple yang terdiri dari norma gradien (atau Tidak ada jika kita tidak melakukan mundur),
kebingungan rata-rata, dan output.

Meningkatkan:
ValueError: jika panjang encoder_inputs, decoder_inputs, atau
target_weights tidak setuju dengan ukuran bucket untuk bucket_id yang ditentukan.
"""

Periksa apakah ukurannya cocok.

encoder_size, decoder_size = self.buckets[bucket_id]
if len(encoder_inputs) != encoder_size:
raise ValueError("Panjang encoder harus sama dengan yang ada di ember,"
" %d != %d." % (len(masukan_pengkode), ukuran_pengkode))
if len(decoder_inputs) != decoder_size:
raise ValueError("Panjang decoder harus sama dengan yang ada di bucket,"
" %d != %d." % (len(masukan_dekoder), ukuran_dekoder))
if len(target_weights) != decoder_size:
raise ValueError("Panjang bobot harus sama dengan yang ada di ember,"
" %d != %d." % (len(berat_target), ukuran_dekoder))

Umpan masukan: masukan encoder, masukan decoder, target_weights, seperti yang disediakan.

masukan_feed = {}
untuk l di xrange(encoder_size):
input_feed[self.encoder_inputs[l].name] = encoder_inputs[l]
untuk l dalam xrange(decoder_size):
input_feed[self.decoder_inputs[l].name] = decoder_inputs[l]
input_feed[self.target_weights[l].name] = target_weights[l]

Karena target kami adalah input decoder yang digeser satu, kami membutuhkan satu lagi.

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

Umpan keluaran: tergantung pada apakah kita melakukan langkah mundur atau tidak.

jika tidak forward_only:
output_feed = [self.updates[bucket_id], # Perbarui Op yang melakukan SGD.
self.gradient_norms[bucket_id], # Norma gradien.
self.losses[bucket_id]] # Kerugian untuk batch ini.
kalau tidak:
output_feed = [self.losses[bucket_id]] # Kerugian untuk batch ini.
untuk l di xrange(decoder_size): # Output logits.
output_feed.append(self.outputs[bucket_id][l])

output = session.run(output_feed, input_feed)
jika tidak forward_only:
kembalikan keluaran[1], keluaran[2], Tidak ada # Norma gradien, rugi, tidak ada keluaran.
kalau tidak:
return Tidak ada, keluaran[0], keluaran[1:] # Tidak ada norma gradien, kerugian, keluaran.

def get_batch(self, data, bucket_id):
"""Dapatkan kumpulan data acak dari ember yang ditentukan, bersiap untuk langkah.

Untuk memasukkan data pada langkah (..) itu harus berupa daftar vektor batch-mayor, sementara
data di sini berisi kasus panjang-utama tunggal. Jadi logika utama dari ini
fungsinya adalah untuk mengindeks ulang kasus data agar berada dalam format yang tepat untuk pengumpanan.

Argumen:
data: tupel ukuran len(self.buckets) di mana setiap elemen berisi
daftar pasangan data input dan output yang kita gunakan untuk membuat batch.
bucket_id: integer, ember mana yang akan diambil batchnya.

Pengembalian:
Triple (input_encoder, input_dekoder, bobot_target) untuk
kumpulan yang dibangun yang memiliki format yang tepat untuk memanggil langkah(...) nanti.
"""
encoder_size, decoder_size = self.buckets[bucket_id]
masukan_pengkode, masukan_pengurai = [], []

Dapatkan batch acak input encoder dan decoder dari data,

pad mereka jika diperlukan, balikkan input encoder dan tambahkan GO ke decoder.

untuk _ dalam xrange(self.batch_size):
encoder_input, decoder_input = random.choice(data[bucket_id])

# Input encoder diisi dan kemudian dibalik.
encoder_pad = [data_utils.PAD_ID] * (encoder_size - len(encoder_input))
encoder_inputs.append(daftar(terbalik(encoder_input + encoder_pad)))

# Input decoder mendapatkan simbol "GO" tambahan, dan kemudian diisi.
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)

Sekarang kita membuat vektor batch-mayor dari data yang dipilih di atas.

batch_encoder_inputs, batch_decoder_inputs, batch_weights = [], [], []

Input encoder batch hanya diindeks ulang encoder_inputs.

untuk length_idx dalam xrange(encoder_size):
batch_encoder_inputs.append(
np.array([encoder_inputs[batch_idx][length_idx]
untuk batch_idx di xrange(self.batch_size)], dtype=np.int32))

Input dekoder batch diindeks ulang decoder_inputs, kami membuat bobot.

untuk length_idx dalam xrange(decoder_size):
batch_decoder_inputs.append(
np.array([decoder_inputs[batch_idx][length_idx]
untuk batch_idx di xrange(self.batch_size)], dtype=np.int32))

# Buat target_weights menjadi 0 untuk target yang padding.
batch_weight = np.ones(self.batch_size, dtype=np.float32)
untuk batch_idx di xrange(self.batch_size):
# Kami menetapkan bobot ke 0 jika target yang sesuai adalah simbol PAD.
# Target yang sesuai adalah input_dekoder digeser 1 ke depan.
jika length_idx < decoder_size - 1:
target = decoder_inputs[batch_idx][length_idx + 1]
jika length_idx == decoder_size - 1 atau target == data_utils.PAD_ID:
batch_weight[batch_idx] = 0,0
batch_weights.append(batch_weight)
kembalikan batch_encoder_inputs, batch_decoder_inputs, batch_weights`


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312679587 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim0l5UMHHtbL1sz7meXserV8NVS7cks5sKQzXgaJpZM4MWl4f
.

Oke! terimakasih Meskipun! :)

@ebrevdo apakah ada pembaruan kapan tutorial baru seq2seq menggunakan api baru akan keluar?
Terima kasih. Pekerjaan yang luar biasa!.

ya ditunggu tutorial barunya... alangkah baiknya untuk mengetahui apakah itu rencananya akan dirilis dalam waktu dekat.. @ebrevdo

mencoba mengambil kode dalam tes kernel dan memasang kembali pencarian balok dengan seq2seq lawas, tetapi itu menantang...

Kami berharap untuk minggu yang akan datang ini!

Pada 3 Juli 2017 10:16, "prashantserai" [email protected] menulis:

ya menunggu tutorial baru ... akan sangat bagus untuk mengetahui apakah itu
rencananya akan dirilis dalam waktu dekat.. @ebrevdo
https://github.com/ebrevdo

mencoba mengambil kode dalam tes kernel dan memasang kembali pencarian balok dengan
warisan seq2seq, tapi sepertinya menantang...


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312697274 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtim45-HTuQrIRDhphqqHjqkKOKTe53ks5sKSHYgaJpZM4MWl4f
.

Hai kawan,

Setiap pembaruan untuk masalah ini, saya mengalami hal yang sama pada tensorflow 1.1-gpu untuk mac os x

@tshi1983
Saya mendapat masalah yang sama dengan tensorflow 1.1-gpu untuk ubuntu.
Saya meningkatkan ke tf 1.2. Ini masih tidak berhasil.
Kemudian saya mengubah fungsi embedding_attention_seq2seq di file
tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py
dengan yang disarankan oleh @fabiofumarola di atas.
Sekarang mulai pelatihan. Saya belum menguji decoding.

Pindahkan kode pada definisi sel ke 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(
      ...
      )

Kemudian "python translate.py --data_dir data/ --train_dir checkpoint/ --size=256 --num_layers=2 --steps_per_checkpoint=50" dapat berfungsi.

@huxuanlai berhasil! Setidaknya itu pelatihan sekarang, thx!

@huxuanlai Bekerja untuk saya juga.

Saya menerima AttributeError: 'NoneType' object has no attribute 'update' yang sama tetapi dengan tf.contrib.legacy_seq2seq.model_with_buckets . Saya menjalankan tf 1.2.1 (GPU) di ubuntu 16.04 lts.

Ini sepertinya hanya terjadi ketika saya memiliki lebih dari 1 ember.

pelacakan balik penuh:

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, solusi Anda berhasil untuk saya. Versi tf saya adalah 1.1.0.

saya berubah dari:

    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)  

ke:

    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)

Ini masih belum diperbaiki , mencoba semua solusi yang mungkin , yang disebutkan di utas ini dan stackoverflow , tidak berfungsi dengan tensorflow 1.3 atau 1.2 atau 1.1

Saya menghadapi kesalahan ini:
TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'

Kesalahan menunjuk ke fungsi ini di seq2seq_model.py yang merupakan baris 142 di 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)

Siapa pun yang menemukan kesalahan ini dan berhasil menyelesaikannya, tolong bantu saya memperbaiki masalah ini.

ValueError: Mencoba menggunakan kembali RNNCelldengan cakupan variabel yang berbeda dari penggunaan pertama. Penggunaan pertama sel dengan lingkup 'rnn/multi_rnn_cell/cell_0/gru_cell', upaya ini dengan lingkup 'rnn/multi_rnn_cell/cell_1/gru_cell'. Harap buat instance sel baru jika Anda ingin menggunakan set bobot yang berbeda. Jika sebelumnya Anda menggunakan: MultiRNNCell([GRUCell(...)] * num_layers), ubah menjadi: MultiRNNCell([GRUCell(...) for _ in range(num_layers)]). Jika sebelumnya Anda menggunakan instans sel yang sama sebagai sel maju dan mundur dari RNN dua arah, cukup buat dua instans (satu untuk maju, satu untuk mundur). Pada Mei 2017, kami akan mulai mentransisikan perilaku sel ini untuk menggunakan bobot tersimpan yang ada, jika ada, saat dipanggil dengan scope=None (yang dapat menyebabkan degradasi model diam, jadi kesalahan ini akan tetap ada hingga saat itu.)

kode asal:
dari tensorflow.contrib impor rnn
input = tf.placeholder(dtype=tf.int32, shape=[Tidak Ada, Tidak Ada], nama="input")
keep_prob = tf.placeholder(dtype=tf.float32, name="keep_prob")
sel = rnn.GRUCell(10)
sel = rnn.DropoutWrapper(sel=sel, input_keep_prob=keep_prob)
sel = rnn.MultiRNNCell([sel untuk _ dalam rentang(5)], state_is_tuple=True)

out, status = tf.nn.dynamic_rnn(cell=cell, inputs=look_up, dtype=tf.float32)
larutan:
input = tf.placeholder(dtype=tf.int32, shape=[Tidak Ada, Tidak Ada], nama="input")
keep_prob = tf.placeholder(dtype=tf.float32, name="keep_prob")
sel = rnn.MultiRNNCell([rnn.DropoutWrapper(rnn.GRUCell(10), input_keep_prob=keep_prob) untuk _ dalam range(5)] , state_is_tuple=True)

Apakah Anda memiliki masalah dengan tf nightlies ini?

Pada 1 Oktober 2017 08:34, "Baohua Zhou" [email protected] menulis:

Saya memiliki masalah yang sama saat menggunakan tensorflow 1.1 pada cpu dengan ios.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-333384725 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABtimwOv7vf5vvFXBllbZryjCFwmJcU6ks5sn7DxgaJpZM4MWl4f
.

AttributeError: objek 'NoneType' tidak memiliki atribut 'update'

dalam tf=1.3

ValueError: Mencoba menggunakan kembali RNNCelldengan cakupan variabel yang berbeda dari penggunaan pertama. Penggunaan pertama sel dengan lingkup 'embedding_attention_seq2seq/rnn/multi_rnn_cell/cell_0/gru_cell', upaya ini dengan lingkup 'embedding_attention_seq2seq/rnn/multi_rnn_cell/cell_1/gru_cell'. Harap buat instance sel baru jika Anda ingin menggunakan set bobot yang berbeda. Jika sebelumnya Anda menggunakan: MultiRNNCell([GRUCell(...)] * num_layers), ubah menjadi: MultiRNNCell([GRUCell(...) for _ in range(num_layers)]). Jika sebelumnya Anda menggunakan instans sel yang sama sebagai sel maju dan mundur dari RNN dua arah, cukup buat dua instans (satu untuk maju, satu untuk mundur). Pada Mei 2017, kami akan mulai mentransisikan perilaku sel ini untuk menggunakan bobot tersimpan yang ada, jika ada, saat dipanggil dengan scope=None (yang dapat menyebabkan degradasi model diam, jadi kesalahan ini akan tetap ada hingga saat itu.)

Sudah 14 hari tanpa aktivitas dan label awaiting tensorflower telah ditetapkan. Harap perbarui label dan/atau status yang sesuai.

Nagging Menunggu TensorFlower: Sudah 14 hari tanpa aktivitas dan label awaiting tensorflower telah ditetapkan. Harap perbarui label dan/atau status yang sesuai.

Solusinya adalah pindah ke versi TF yang lebih baru. Utas ini telah menyimpang secara drastis dari masalah aslinya. Penutupan.

Jika Anda menginginkan solusi instan, Anda dapat mencoba apa yang saya coba:

pip install tensorflow==1.0
Masalahnya adalah dengan versi tenorflow 1.1, itu berhasil untuk saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat