Tensorflow: ValueError: рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХреЛ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рднрд┐рдиреНрди рдЪрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ред

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдорд╛рд░реНрдЪ 2017  ┬╖  102рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: tensorflow/tensorflow

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдкрд╣рд▓рд╛ рд╡реНрдпрдХреНрддрд┐ рд╣реВрдВ рдЬрд┐рд╕рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛:

ValueError: рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рдеред рд╕реЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпреЛрдЧ 'rnn/multi_rnn_cell/cell_0/basic_lstm_cell' рд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде рдерд╛, рдпрд╣ рдкреНрд░рдпрд╛рд╕ 'rnn/multi_rnn_cell/cell_1/basic_lstm_cell' рд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде рд╣реИред рдХреГрдкрдпрд╛ рд╕реЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рдЬрди рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ: MultiRNNCell([BasicLSTMCell(...)] * num_layers), рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ: MultiRNNCell([BasicLSTMCell(...) for _ in range(num_layers)])ред рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рд╣реА рд╕реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рджреНрд╡рд┐рджрд┐рд╢ рдЖрд░рдПрдирдПрди рдХреЗ рдлреЙрд░рд╡рд░реНрдб рдФрд░ рд░рд┐рд╡рд░реНрд╕ рд╕реЗрд▓ рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдмрд╕ рджреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ (рдПрдХ рдлреЙрд░рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП)ред рдордИ 2017 рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реЗрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдЬрдм рдЗрд╕реЗ рд╕реНрдХреЛрдк = рдХреЛрдИ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рд╕реЗ рдореВрдХ рдореЙрдбрд▓ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рддрдХ рдмрдиреА рд░рд╣реЗрдЧреАред)

рдХреЛрдб рдЦрдВрдб рдХреЗ рд╕рд╛рде:

  import tensorflow as tf
  from tensorflow.contrib import rnn

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

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

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

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

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

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

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

рдореИрдВ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХрд┐рд╕реНрдордд рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рдЧрдпрд╛ рдерд╛, рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рджрд┐рдЦрд╛ рд╕рдХрддрд╛ рд╣реИ?

awaiting tensorflower

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рд╕реЗ рдорд┐рд▓рд╛ред рдпрджрд┐ рдЖрдк рд╕рднреА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рдо рд╣рд╛рд▓ рдХреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХрд╣рддрд╛ рд╣реИ:

tf.contrib.rnn рдореЗрдВ рд╕рднреА RNNC рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ tf.layers Layers рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХрдареЛрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде
рдбрдмреНрд▓реНрдпреВ:

  1. __call__ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рдкрд░, рдкреНрд░рдпреБрдХреНрдд рд╕реНрдХреЛрдк рд╕реЗрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдЙрд╕ рджрд╛рдпрд░реЗ рдореЗрдВ рд╡рдЬрди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рддрд░реНрдХ рдкреБрди: рдЙрдкрдпреЛрдЧ = рдЯреНрд░реВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

  2. рдЙрд╕реА рд╕реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ __call__ рдХрд╛ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
    рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдИ рдЬрд╛рддреА рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рд╕реЗ, рдЬреЛ рдкреАрдЯреАрдмреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ reuse рдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓рд╛рдЗрди 112 рдкрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ:

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

рддрдм рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рднреА 102 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрдиреБрд╡рд╛рдж рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЫреЛрдЯрд╛ рдЖрддреНрдо рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп рднреА) рдЬреЛ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/tensorflow/models/tree/master/tutorials/rnn/translate

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рд╕реЗ рдорд┐рд▓рд╛ред рдпрджрд┐ рдЖрдк рд╕рднреА рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рдо рд╣рд╛рд▓ рдХреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рд╕рдВрджреЗрд╢ рдХрд╣рддрд╛ рд╣реИ:

tf.contrib.rnn рдореЗрдВ рд╕рднреА RNNC рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ tf.layers Layers рдХреА рддрд░рд╣ рдХрд╛рд░реНрдп рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХрдареЛрд░ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде
рдбрдмреНрд▓реНрдпреВ:

  1. __call__ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд░рдпреЛрдЧ рдкрд░, рдкреНрд░рдпреБрдХреНрдд рд╕реНрдХреЛрдк рд╕реЗрд▓ рдореЗрдВ рд╕реНрдЯреЛрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдЙрд╕ рджрд╛рдпрд░реЗ рдореЗрдВ рд╡рдЬрди рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЗрдЯ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдИ рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рддрд░реНрдХ рдкреБрди: рдЙрдкрдпреЛрдЧ = рдЯреНрд░реВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

  2. рдЙрд╕реА рд╕реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ __call__ рдХрд╛ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдЙрд╕реА рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
    рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрдард╛рдИ рдЬрд╛рддреА рд╣реИред

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рд╕реЗ, рдЬреЛ рдкреАрдЯреАрдмреА рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ reuse рдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓рд╛рдЗрди 112 рдкрд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ:

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

рддрдм рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@ebrevdo рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?

рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ рдЖрд░рдПрдирдПрди рд░реЗрдкреЛ рдкрд░ рд╡рд┐рдВрдбреЛрдЬ/рдЬреАрдкреАрдпреВ рдмрд┐рд▓реНрдб 105 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИред

рд╡рд┐рди 1.0.0/рдЬреАрдкреАрдпреВ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╕рдордп, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░реЗрдкреЛ рдЯреАрдПрдл 1.0 рдкрд░ рд▓рдХреНрд╖рд┐рдд рд╣реИ, рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рд░рд┐рд▓реАрдЬ рдирд╣реАрдВред

8 рдорд╛рд░реНрдЪ, 2017 рдХреЛ рдЕрдкрд░рд╛рд╣реНрди 3:56 рдмрдЬреЗ, "рдЯреЙрдо рд╡рд╛рдирдЬрд╝реЗрдХ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ рдкрд░ рд╡рд┐рдВрдбреЛрдЬрд╝/рдЬреАрдкреАрдпреВ рдмрд┐рд▓реНрдб 105 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рдИ рдЬрд╛рддреА рд╣реИ
рдЖрд░рдПрдирдПрди рд░реЗрдкреЛ https://github.com/martin-gorner/tensorflow-rnn-shakespeare ред

рд╡рд┐рди 1.0.0/рдЬреАрдкреАрдпреВ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╕рдордп, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285209555 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim5ansaL1KN51T4nCaqLnqw2QHN4Wks5rj0BBgaJpZM4MWl4f
.

@tongda , рдореИрдВ CPU рдореЛрдб рдореЗрдВ MacOS рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП Tensorflow 1.0 рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ "рдкреБрди: рдЙрдкрдпреЛрдЧ" рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред

doncat99: рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкреВрдЫрддрд╛рдЫ рдХрд░рддрд╛ рд╣реИ
рдФрд░ рдпрджрд┐ рд╕рдВрд╕реНрдХрд░рдг рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдХрдо рд╣реИ рддреЛ рдзреНрд╡рдЬ рдЙрдард╛рддрд╛ рд╣реИред
рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:

tensorflow.core рдЖрдпрд╛рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ
рд╕рдВрд╕реНрдХрд░рдг.GIT_VERSION

рдмреБрдзрд╡рд╛рд░, 8 рдорд╛рд░реНрдЪ, 2017 рдХреЛ рд╢рд╛рдо 6:58 рдмрдЬреЗ, doncat99 рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@tongda https://github.com/tongda , рдореИрдВ рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
Tensorflow 1.0, CPU рдореЛрдб рдореЗрдВ MacOS рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдорд╛рд╕реНрдЯрд░ рдХреЗ рдкрд╛рд╕ рдЬрд╛рдКрдВрдЧрд╛
рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдпрд╣ "рдкреБрди: рдЙрдкрдпреЛрдЧ" рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рджред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285240438 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim66cU9e16lgD-2D0QLGcQCiHbV0zks5rj2rbgaJpZM4MWl4f
.

@ebrevdo рддреЛ рдордзреНрдпрд╡рд░реНрддреА рд╕реНрдерд┐рд░ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ рдЖрд░рдПрдирдПрди рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреНрдпрд╛ рд╣реЛрдВрдЧреЗ?

рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдкреНрд░рдореБрдЦ рд╡рд╛рд╕реНрддреБ рдЦрдВрдб рд╣реИ, рдЬреЛ рдЕрдм рдмрд┐рд▓реНрдб # 105 рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

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

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

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

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

рдореБрдЭреЗ reuse рдзреНрд╡рдЬ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ?

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред

рдЙрдкрдпреЛрдЧ:

рдорд▓реНрдЯреАрд╕реЗрд▓ = rnn.MultiRNNCell([rnn.DropoutWrapper(rnn.GRUCell(INTERNALSIZE),
input_keep_prob=pkeep) _ рдХреЗ рд▓рд┐рдП рд░реЗрдВрдЬ рдореЗрдВ(NLAYERS)], State_is_tuple=False)

рдЬреЛ рд╣рд░ рд▓реЗрдпрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЧреНрд░реЗрд╕реЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИред

10 рдорд╛рд░реНрдЪ, 2017 рдХреЛ рд╕реБрдмрд╣ 7:44 рдмрдЬреЗ, "рдЯреЙрдо рд╡рд╛рдирдЬрд╝реЗрдХ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@ebrevdo https://github.com/ebrevdo рддреЛ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдордзреНрдпрд╡рд░реНрддреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдХреНрд╕рдкрд┐рдпрд░ рдЖрд░рдПрдирдПрди рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди
рд╕реНрдерд┐рд░ рдирд┐рд╕реНрддрд╛рд░?

рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдкреНрд░рдореБрдЦ рд╡рд╛рд╕реНрддреБ рдЦрдВрдб рд╣реИ, рдЬреЛ рдЕрдм рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
рдмрд┐рд▓реНрдб#105:

рдореЙрдбрд▓ (README.md рдореЗрдВ рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди рджреЗрдЦреЗрдВ)

lr = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (tf.float32, рдирд╛рдо = 'lr') # рд╕реАрдЦрдиреЗ рдХреА рджрд░
pkeep = tf.placeholder(tf.float32, name='pkeep') # рдбреНрд░реЙрдкрдЖрдЙрдЯ рдкреИрд░рд╛рдореАрдЯрд░
рдмреИрдЪрд╕рд╛рдЗрдЬ = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (tf.int32, рдирд╛рдо = 'рдмреИрдЪрд╕рд╛рдЗрдЬ')

рдЖрджрд╛рдиреЛрдВ

X = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (tf.uint8, [рдХреЛрдИ рдирд╣реАрдВ, рдХреЛрдИ рдирд╣реАрдВ], рдирд╛рдо = 'X') # [рдмреИрдЪрд╕рд╛рдЗрдЬрд╝, SEQLEN]
Xo = tf.one_hot(X, ALPHASIZE, 1.0, 0.0) # [ BATCHSIZE, SEQLEN, ALPHASIZE ]# рдЕрдкреЗрдХреНрд╖рд┐рдд рдЖрдЙрдЯрдкреБрдЯ = рд╕рдорд╛рди рдХреНрд░рдо 1 рд╕реЗ рд╢рд┐рдлреНрдЯ рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрдЧрд▓реЗ рд╡рд░реНрдг рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
Y_ = tf. рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (tf.uint8, [рдХреЛрдИ рдирд╣реАрдВ, рдХреЛрдИ рдирд╣реАрдВ], рдирд╛рдо = 'Y_') # [ рдмреИрдЪ рдЖрдХрд╛рд░, SEQLEN ]
Yo_ = tf.one_hot(Y_, ALPHASIZE, 1.0, 0.0) # [ BATCHSIZE, SEQLEN, ALPHASIZE ]# рдЗрдирдкреБрдЯ рд╕реНрдерд┐рддрд┐
рд╣рд┐рди = tf. рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (tf.float32, [рдХреЛрдИ рдирд╣реАрдВ, рдЖрдВрддрд░рд┐рдХ* NLAYERS], рдирд╛рдо = 'рд╣рд┐рди') # [ рдмреИрдЪ рдЖрдХрд╛рд░, рдЖрдВрддрд░рд┐рдХ * NLAYERS]

NLAYERS=GRU рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА 3 рдкрд░рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд SEQLEN=30 рдЧреБрдирд╛# dynamic_rnn рдЗрдирдкреБрдЯ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ SEQLEN рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИ Xo

onecell = rnn.GRUCell(INTERNALSIZE)
рдбреНрд░реЙрдкрд╕реЗрд▓ = rnn.DropoutWrapper(onecell, input_keep_prob=pkeep)
рдорд▓реНрдЯреАрд╕реЗрд▓ = rnn.MultiRNNCell([рд░реЗрдВрдЬ рдореЗрдВ _ рдХреЗ рд▓рд┐рдП рдбреНрд░реЙрдкрд╕реЗрд▓ (NLAYERS)], State_is_tuple=False)
рдорд▓реНрдЯреАрд╕реЗрд▓ = rnn.DropoutWrapper (рдорд▓реНрдЯреАрд╕реЗрд▓, output_keep_prob = pkeep)
Yr, H = tf.nn.dynamic_rnn(multicell, Xo, dtype=tf.float32, Initial_state=Hin)# рд╡рд░реНрд╖: [рдмреИрдЪрд╕рд╛рдЗрдЬрд╝, SEQLEN, INTERNALSIZE ]# H: [рдмреИрдЪрд╕рд╛рдЗрдЬрд╝, INTERNALSIZE*NLAYERS ] # рдпрд╣ рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рд╣реИ рдХреНрд░рдо рдореЗрдВ

рдореБрдЭреЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдзреНрд╡рдЬ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ?

рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-285702372 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim6MOOCbx3RJEJe8PQBDXGVIXTGPmks5rkW_jgaJpZM4MWl4f
.

рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдореБрдЭреЗ seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреНрдпреЛрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ:

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

рд╕реНрд░реЛрдд

рдЬрд╣рд╛рдВ рд╕реЗрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ

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

@ebrevdo рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реБрдЭрд╛рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВ, рдЙрдкрд░реЛрдХреНрдд рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рдеред seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рдПрдХ рд╣реА рдирд╛рд╡ рдореЗрдВ рд╣реИрдВ?

рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реИ? рдХреГрдкрдпрд╛ рдЗрд╕реЗ рдпрд╣рд╛рдВ рдХреЙрдкреА рдФрд░ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВред

рдореЗрд░рд╛ рдмреБрд░рд╛, рдореИрдВ рдмрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдХреЛрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ (рд╕реНрдХреНрд░реИрдЪ рд╕реЗ) рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдпрд╛ред рддреНрд░реБрдЯрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдЯрд╛ рджреА рдЧрдИ рд╣реИ рдФрд░ рдУрд▓реНрдб рдмрд╛рд░реНрдб рдЕрднреА рдареАрдХ рд╣реИ

рддреЛ, thx, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХрд▓ рдХрд╣рд╛рдБ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдореБрдЭ рдкрд░ рдерд╛ред

Tensorflow 1.0 рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдФрд░ CPU рдореЛрдб рдореЗрдВ MacOS рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рднрд▓реЗ рд╣реА "рдкреБрди: рдЙрдкрдпреЛрдЧ" рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ

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

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

рдЖрдкрдХрд╛ рдорд▓реНрдЯреАрд╕реЗрд▓ рдЧрд▓рдд рджрд┐рдЦрддрд╛ рд╣реИ... рдЖрдкрдХреЛ _ in . рдХреЗ рд▓рд┐рдП "рд╕реЗрд▓ ()" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рд╢реНрд░реЗрдгреА(...)"

рдЧреБрд░реБ, 16 рдорд╛рд░реНрдЪ, 2017 рдХреЛ рд░рд╛рдд 8:29 рдмрдЬреЗ, cuiming [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

Tensorflow 1.0 . рдХреЗ рд░рд┐рд▓реАрдЬрд╝ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдЙрд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛
рдФрд░ рд╕реАрдкреАрдпреВ рдореЛрдб рдореЗрдВ рдореИрдХреЛрдЬрд╝ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рднрд▓реЗ рд╣реА "рдкреБрди: рдЙрдкрдпреЛрдЧ" рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ

рдбреАрдИрдПрдлрд╝ рд╕реЗрд▓ ():
рд╡рд╛рдкрд╕реА tf.contrib.rnn.BasicLSTMCell(rnn_size,state_is_tuple=True,reuse=tf.get_variable_scope().reuse)

muticell = tf.contrib.rnn.MultiRNNCell([рд╢реНрд░реЗрдгреА рдореЗрдВ _ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓(num_layers)], State_is_tuple=True)

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-287257629 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim3A6JQr8ptRKrdiDW_kgNRIFkHGlks5rmf4WgaJpZM4MWl4f
.

рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛: python2.7 translation.py --data_dir data/ --train_dir train/ --size=256 --num_layers=2 --steps_per_checkpoint=50

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ MultiRNNCell рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕рд╣реА рд╣реИ:
рд╕реЗрд▓ = tf.contrib.rnn.MultiRNNCell([single_cell() for _ in range(num_layers)])

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:
ValueError: рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рдеред рд╕реЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпреЛрдЧ 'embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder/multi_rnn_cell/cell_0/gru_cell' рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдерд╛, рдпрд╣ рдкреНрд░рдпрд╛рд╕ 'embeding_attention_seq2seq/rnn/multi_rnn_cell/cell_0/gru_cell' рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рд╣реИред рдХреГрдкрдпрд╛ рд╕реЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рдЬрди рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ: MultiRNNCell([GRUCell(...)] * num_layers), рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ: MultiRNNCell([GRUCell(...) for _ in range(num_layers)])ред рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рд╣реА рд╕реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рджреНрд╡рд┐рджрд┐рд╢ рдЖрд░рдПрдирдПрди рдХреЗ рдлреЙрд░рд╡рд░реНрдб рдФрд░ рд░рд┐рд╡рд░реНрд╕ рд╕реЗрд▓ рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдмрд╕ рджреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ (рдПрдХ рдлреЙрд░рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП)ред рдордИ 2017 рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реЗрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдЬрдм рдЗрд╕реЗ рд╕реНрдХреЛрдк = рдХреЛрдИ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рд╕реЗ рдореВрдХ рдореЙрдбрд▓ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рддрдХ рдмрдиреА рд░рд╣реЗрдЧреАред)

@bowu - рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреЛрдИ рднрд╛рдЧреНрдп рдорд┐рд▓рд╛ рд╣реИ? рдпрджрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдирд╣реАрдВ рдЖрдЬрд╝рдорд╛рдпрд╛ рд╣реИ, рддреЛ рдирд╡реАрдирддрдо рд╕реНрд░реЛрдд рд╕реЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдХреБрдЫ рдЕрдиреНрдп рдХреЗ рдмреАрдЪ рдХреБрдЫ core_rnn рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдПред рдореЗрд░реЗ рд▓рд┐рдП рдЕрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@robmsylvester рдореИрдВ рдирд╡реАрдирддрдо рд╕реНрд░реЛрдд рд╕реЗ tensorflow рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдлрд┐рд░ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ред рдореИрдВ рд╢рд╛рдЦрд╛ рдорд╛рд╕реНрдЯрд░ рдкрд░ рдерд╛ рдФрд░ рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ commit 2a4811054a9e6b83e1f5a2705a92aab50e151b13 рд╣реИред рдЬрдм рдЖрдк рдЕрдкрдирд╛ рд░реЗрдкреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рддреЛ рдирд╡реАрдирддрдо рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреНрдпрд╛ рд╣реЛрддреА рд╣реИ?

рдирдорд╕реНрддреЗ, рдореИрдВ рд╕реНрд░реЛрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдорд┐рдд GPU рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Tensorflow r1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдЕрдирдореЙрдбрд┐рдлрд╛рдЗрдб Seq2Seq рдЕрдиреБрд╡рд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдЕрд░реНрдерд╛рдд

ValueError: рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рдеред рд╕реЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпреЛрдЧ 'embedding_attention_seq2seq/embedding_attention_decoder/attention_decoder/multi_rnn_cell/cell_0/gru_cell' рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдерд╛, рдпрд╣ рдкреНрд░рдпрд╛рд╕ 'embeding_attention_seq2seq/rnn/multi_rnn_cell/cell_0/gru_cell' рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рд╣реИ.....

рдореЗрд░реЗ seq2seq_model.py рдореЗрдВ рдХреЛрдб рдХрд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рднрд╛рдЧ рд╣реИ:

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

рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

рдЙрд╕ рдХреЙрд▓ рдореЗрдВ "reuse=tf.get_variable_scope().reuse" рдЬреЛрдбрд╝рдирд╛ рдЬрд╣рд╛рдВ GRUCell рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЕрдиреЗрдХ рдЕрдиреЗрдХ рдзрдиреНрдпрд╡рд╛рдж!

@prashantserai - рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдКрдкрд░ рд╕реЗ MultiRNNCell рд▓рд╛рдЗрди рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рдд рдмрдирд╛рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рддрдм рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ? рдпрд╣ MultiRNNCell рдореЗрдВ рдХрд╣реАрдВ рдПрдХ рдмрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд╢рд╛рдпрдж рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдкрд░ред

рдпрджрд┐ рдЖрдк рд╕реНрдЯреИрдХреНрдб lstm/gru рдХреЛ рд╕реНрд╡рдпрдВ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдЖрдк рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдзрд┐рдХ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рджреНрд╡рд┐рджрд┐рд╢ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░, рдЕрдЬреАрдм рдЕрд╡рд╢рд┐рд╖реНрдЯ рдФрд░ рд╕реНрдХрд┐рдк рдХрдиреЗрдХреНрд╢рди рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдЬреЛ рдХреБрдЫ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЖрджрд┐) ред)

@robmsylvester рд╡рд╣реА рддреНрд░реБрдЯрд┐ рддрдм рднреА рдмрдиреА рд░рд╣реА рдЬрдм рдореИрдВрдиреЗ num_layers=1 рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬреЛ рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рдЪрд╛рд░? рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╣рдореНрдоред рдПрдХ рдЪреАрдЬ рдЬреЛ рдореЗрд░реЗ рд╕рд╛рдордиреЗ рд╣реИ рд╡рд╣ рд╕рдВрджрд░реНрднрд┐рдд рд╡рд┐рд░рд╛рд╕рдд seq2seq рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:

encoder_cell = copy.deepcopy(cell)

рдЗрд╕ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдиреНрдХреЛрдбрд░ рдФрд░ рдбрд┐рдХреЛрдбрд░ рджреЛрдиреЛрдВ рддрд░рдл рдПрдХ рд╣реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рд╕реЗрд▓ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗрд▓ рддрд░реНрдХ рдХреЛ рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рдХреЛ рд╣реАред

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА seq2seq рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдиреНрдХреЛрдбрд░ рд╕реЗрд▓ рдФрд░ рдбрд┐рдХреЛрдбрд░ рд╕реЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рд╣реЛрддреЗ рд╣реИрдВ?

@robmsylvester рдХреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХрд╛рдо рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдЕрдиреНрдп рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдмрджрд╕реВрд░рдд рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛; рдПрдХ рдХреНрд▓реАрдирд░ рд╕рдорд╛рдзрд╛рди рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП; рд╢рд╛рдпрдж рд╣рдореЗрдВ рдХреБрдЫ рдпрд╛рдж рдЖ рд░рд╣рд╛ рд╣реИ? (рдореБрдЭреЗ seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд░ рднреА рдпрд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА)ред

@ iamgroot42 - рд╣рд╛рдБ, рд╡рд╣ 'рд╕рдорд╛рдзрд╛рди' рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдХрд┐ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдЦреЗрд▓реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдиреАрдЪреЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, copy.deepcopy рд╡рд╣рд╛рдБ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╡рд┐рд░рд╛рд╕рддреА рдХрд╛рд░реНрдп рд╣реИрдВ рдФрд░
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдП рд░рдЦрдиреЗ/рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ
рдПрдХ рдкрд╢реНрдЪ-рд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рдкреЗрд╢ рдХрд░реЗрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╕реЗрд▓, рдФрд░ рдпрджрд┐ рдпрд╣ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ рддреЛ рдкрд░ рдлрд╝реЙрд▓рдмреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдбреАрдкрдХреЙрдкреА, рддреЛ рдореБрдЭреЗ рдкреАрдЖрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреАред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдпрд╣ рд╣реЛрдЧрд╛
рдПрдХ рдкрд┐рдЫрдбрд╝рд╛ рд╕рдВрдЧрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдордВрдЧрд▓рд╡рд╛рд░, 4 рдЕрдкреНрд░реИрд▓, 2017 рдХреЛ рдкреВрд░реНрд╡рд╛рд╣реНрди 11:38 рдмрдЬреЗ, рд░реЙрдм рд╕рд┐рд▓реНрд╡реЗрд╕реНрдЯрд░ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

@iamgroot42 https://github.com/iamgroot42 - рд╣рд╛рдБ, рд╡рд╣ 'рд╕рдорд╛рдзрд╛рди' рд╣реИ
рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рдмрджрд╕реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рднреА рдЬреНрдпрд╛рджрд╛ рд╕рд┐рд░реНрдл рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдореБрджреНрджрд╛ рдХрд╣рд╛рдВ рд╣реИ
рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдЦреЗрд▓реВрдВрдЧрд╛ рдФрд░ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдХреБрдЫ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
рдиреАрдЪреЗред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-291593289 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim1QHTDhOC_zT6cKtmUFPOit5Yjn7ks5rso5CgaJpZM4MWl4f
.

@ebrevdo - рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреВрдВрдЧрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╣реИ рдЬреЛ рдЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдЬрд╣рд╛рдВ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрд╡рд╢рд┐рд╖реНрдЯ рдкрд░рддреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдХреЙрдиреНрд╕рдЯ рдмрдирд╛рдо рдпреЛрдЧ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рд╡рд┐рд▓рдп, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрдерд┐рд░ рдЖрд░рдПрдирдПрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рджреВрдБрдЧрд╛ред

@ebrevdo рдореИрдВ Red Hat рдкрд░ Tensorflow r1.0 (tensorflow-1.0.1-cp36-cp36m-linux_x86_64) рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЧреАрдереВрдм рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ .. рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ?

рдпрд╣ рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ TF 1.0 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред @lukaszkaiser рдХреНрдпрд╛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ? рд╣рдо рдПрдХ рдирдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрднреА рдХреБрдЫ рд╕рдкреНрддрд╛рд╣ рдмрд╛рдХреА рд╣реИрдВ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП TensorFlow (рдпрд╛ TF 1.1 рдпрд╛ 1.2) рдХреЗ рдПрдХ рд░рд╛рддреНрд░рд┐рдХрд╛рд▓реАрди рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

(рд▓реБрдХрд╛рдЬрд╝; рдореЗрд░реЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рд╕реЗ рдпрд╣ рдкрд╣рдЪрд╛рдирдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдЯреАрдПрдл 1.0 рдореЗрдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рджреЛрд╖рдкреВрд░реНрдг рд╣реИред рдХрд┐рд╕реА рднреА рдореМрдХреЗ рдкрд░ рдЖрдк рд▓рд╛рдЗрди рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?)

@ebrevdo рдпрд╣ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИред рддреНрд░реБрдЯрд┐ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ рд╣реИред рдпрд╣рд╛рдВ рдкрд╛рд░рд┐рдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд░рд╛рд╕рдд seq2seq рдореЙрдбрд▓ рдХреЗ рдкрд┐рдЫрдбрд╝реЗ рдФрд░ рдЖрдЧреЗ рджреЛрдиреЛрдВ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред

@iamgroot42 рдХреНрдпрд╛ рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреАрдЖрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЯреАрдПрдл 1.0 рдЕрдиреБрд╡рд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рд╢рд╛рдЦрд╛ рд░рд┐рдореЛрдЯ/рдореВрд▓/рдЖрд░ 1.0 рдкрд░ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

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

рдлрд┐рд░ TensorFlow рдмрдирд╛рдПрдВ рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╢рд╛рдЦрд╛ рд░рд┐рдореЛрдЯ/рдореВрд▓/рдЖрд░ 1.1 рдкрд░ рдЗрд╕рдореЗрдВ "рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджрд╛рдпрд░рд╛" рддреНрд░реБрдЯрд┐ рд╣реИред
рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬреИрд╕рд╛ рдХрд┐ @robmsylvester рдиреЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА seq2seq рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдиреНрдХреЛрдбрд░ рд╕реЗрд▓ рдФрд░ рдбрд┐рдХреЛрдбрд░ рд╕реЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рд╣реЛрддреЗ рд╣реИрдВ?

рдФрд░ рдпрд╣ рдЕрдм рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

@oxwsds рдореИрдВ рдЬрд┐рд╕ Tensorflow рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ 1.0.1 рд╣реИ рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛред

рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдереА рдХрд┐ @robmsylvester рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ .. рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рдерд╛ (рдЕрдм 2 рджрд┐рди 13 рдШрдВрдЯреЗ рд╣реЛ рдЧрдП) .. рдпрд╣ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ:

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

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА?

@prashantserai рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рдЬрд╛рдирддреЗ, рд▓реЗрдХрд┐рди рдЖрдк рдЬреЛ рдорд┐рд▓реЗ рд╡рд╣ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред

@prashantserai рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдбреАрдХреЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рдмреИрдЪ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдмреИрдЪ рдХрд╛ рдЖрдХрд╛рд░ рдШрдЯрд╛рдХрд░ рдПрдХ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рдореЙрдбрд▓ рдЕрднреА рднреА рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ?

@bowu рдпрд╣рд╛рдВ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рд╣реИред Mac OX Sierra, TensorFlow 1.1.0-rc1, Python 2.7.10 рдФрд░ Python 3.6.1ред

@robmsylvester рдЗрд╕рдиреЗ рдПрдХ рдХреЗ рдмреИрдЪ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рднреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓рд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЙрд╕реА рддрд░рд╣ рдпрд╛ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд╡рд┐рдлрд▓ рд░рд╣рд╛ .. рдпрд╣рд╛рдВ рдПрдХ рдкреВрд░реНрдг рдЯреНрд░реЗрд╕рдмреИрдХ рд╣реИ .. рдХрд╛рд░рдг рдореИрдВ рдЗрд╕реЗ рдПрдХ рдХрдиреЗрдХреНрдЯреЗрдб рддреНрд░реБрдЯрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рд╕рдВрджрд░реНрдн рдерд╛ seq2seq_f (рдЬреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛) (рд╕рдВрд╢реЛрдзрд┐рдд рд▓рд╛рдЗрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдХреЛрдб рд╕реЗ #prashant рдЯрд┐рдкреНрдкрдгреА рдЯреНрд░реЗрд╕ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ)

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

@oxwsds рдХреНрдпрд╛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреВрд░реЗ рдирд┐рд╢рд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдкрдХреА рд░рд╛рдп рдмрджрд▓ рдЬрд╛рддреА рд╣реИ?

@prashantserai рдореИрдВрдиреЗ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдмрд╕ encoder_cell arg рдХреЛ рдлрд╝рдВрдХреНрд╢рди tf.contrib.legacy_seq2seq.embedding_attention_seq2seq рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ translate/seq2seq_model.py рдореЗрдВ рд╕реЗрд▓ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ рдлрд╝рдВрдХреНрд╢рди seq2seq_f рдореЗрдВ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдХреЛрдб рдХреИрд╕реЗ рдмрджрд▓рд╛?

@oxwsds @robmsylvester @ebrevdo
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореЗрд░реЗ рд╕рд┐рдВрдЧрд▓ рд▓реЗрдпрд░ 256 рдпреВрдирд┐рдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рднрдпрд╛рд╡рд╣ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЕрд▓реНрдЯреНрд░рд╛ рд▓рд╛рдЗрдЯ рд╡реЗрдЯ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдкреИрд░рд╛ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЯреНрдпреВрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)
рдЖрдк рд╕рднреА рдХрд╛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж...!!!!!

_рдЗрд╕рдХреЗ рдЕрдВрдд рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:_

@oxwsds рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм Tensorflow рдХреЛ рд╢рд╛рдЦрд╛ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ (рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ) рд╕рдВрд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд░рд┐рдореЛрдЯ/рдореВрд▓/r1.0 TRUE рдерд╛ ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рджреБрдЦрдж рдмрд╛рдд рдпрд╣ рдереА рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ Tensorflow рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП Tensorflow рдХреЛрдб рдХреЗ рднреАрддрд░ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдФрд░ Remotes/origin/r1.0 рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг рджреЛрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@robmsylvester рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдареАрдХ рд╣реИ (рдиреАрдЪреЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛) рдЯреЗрдиреНрд╕рдлреЛрд░реНрд▓реЛ рдХреЗ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрдл 1.1 рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдЬреЛ рдХреБрдЫ рдХрд╣ рд░рд╣рд╛ рд╣реИ :-P
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реА рдкрд┐рдЫрд▓реА рджреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдореЗрд░реА рдЧрд▓рддреА рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред рдПрдХ рдбрдореА рдХреА рддрд░рд╣, рдореИрдВ рдХреЗрд╡рд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдкрд░рддреЛрдВ рдФрд░ рдЫрд┐рдкреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЪреВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЫреЛрдбрд╝ рд░рд╣рд╛ рдерд╛ред (рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдпрд╣ рднрд╛рдЧ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдбрдореА рдкреНрд░реВрдл рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://www.tensorflow.org/tutorials/seq2seq#lets_run_it )

рд╣рдореНрдоред рдПрдХ рдЪреАрдЬ рдЬреЛ рдореЗрд░реЗ рд╕рд╛рдордиреЗ рд╣реИ рд╡рд╣ рд╕рдВрджрд░реНрднрд┐рдд рд╡рд┐рд░рд╛рд╕рдд seq2seq рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ:

рдПрдиреНрдХреЛрдбрд░_рд╕реЗрд▓ = рдХреЙрдкреАред рдбреАрдкрдХреЙрдкреА (рд╕реЗрд▓)

рдЗрд╕ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдиреНрдХреЛрдбрд░ рдФрд░ рдбрд┐рдХреЛрдбрд░ рджреЛрдиреЛрдВ рддрд░рдл рдПрдХ рд╣реА рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рд╕реЗрд▓ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕реЗрд▓ рддрд░реНрдХ рдХреЛ рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рдХреЛ рд╣реАред

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдкрдиреА seq2seq рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдиреНрдХреЛрдбрд░ рд╕реЗрд▓ рдФрд░ рдбрд┐рдХреЛрдбрд░ рд╕реЗрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рд╣реЛрддреЗ рд╣реИрдВ?

рдкреНрд░рддрд┐рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рд▓рдЧрддрд╛ рд╣реИ TF . рдХреЗ рдмреАрдЪ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИ
рдкреАрдкреАрдЖрдИ рдкрд░ рдФрд░ рдЙрд╕ рдЯреИрдЧ рдкрд░? рдЧреБрдирд╣рд╛рди, рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ?

рд╕реЛрдо, рдЕрдкреНрд░реИрд▓ 10, 2017 рдХреЛ рд░рд╛рдд 9:05 рдмрдЬреЗ, prashantserai [email protected]
рд▓рд┐рдЦрд╛ рдерд╛:

@oxwsds https://github.com/oxwsds @robmsylvester
https://github.com/robmsylvester @ebrevdo https://github.com/ebrevdo
рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЕрдм рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдореЗрд░реЗ рд╕рд┐рдВрдЧрд▓ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо
рд▓реЗрдпрд░ 256 рдпреВрдирд┐рдЯ рдиреЗрдЯрд╡рд░реНрдХ рдПрдХ рддрд░рд╣ рд╕реЗ рднрдпрд╛рд╡рд╣ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рд╕рд╣реА рд╣реИ
рдХреНрдпреЛрдВрдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рдЕрд▓реНрдЯреНрд░рд╛ рд▓рд╛рдЗрдЯ рд╡реЗрдЯ рд╣реИ рдФрд░ рдореИрдВрдиреЗ рдкреИрд░рд╛ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЯреНрдпреВрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)

рдпрд╣рд╛рдБ рдореЗрд░реА рдирд┐рдЪрд▓реА рд░реЗрдЦрд╛ рд╣реИ:

@oxwsds https://github.com/oxwsds рдЯрд┐рдкреНрдкрдгреА рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ (рдЗрд╕рдореЗрдВ)рд╡рд░реНрддрдорд╛рди рд░реВрдк) рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм Tensorflow рд╣реИрд╢рд╛рдЦрд╛ рд░рд┐рдореЛрдЯ/рдореВрд▓/рдЖрд░ 1.0 рд╕реЗ рд╕рдВрдХрд▓рд┐рдд TRUE рдерд╛ ред рджреБрдЦрдж рдмрд┐рдЯ
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдХрд┐ Tensorflow рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрд░реЗ рдкрд╛рд╕ рдерд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
Tensorflow рдХреЛрдб рдХреЗ рднреАрддрд░ рдХреА рдЬрд░реВрд░рдд рдереА, рдФрд░ рд░рд┐рдореЛрдЯ/рдореВрд▓/r1.0 . рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг
рджреЛрдиреЛрдВ рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@robmsylvester https://github.com/robmsylvester рдХреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВ
(рдиреАрдЪреЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛) Tensorflow рдХреЗ рдореЗрд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╣рд╛рдВ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреАрдПрдл 1.1 рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП)ред рдпрд╣ рд╣реИ
рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЧрдиреНрджрд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдХрд░ рд╕рдХрддрд╛ рдерд╛, рдЬреЛ рдХреБрдЫ рдХрд╣ рд░рд╣рд╛ рд╣реИ
:-рдкреА
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реА рдкрд┐рдЫрд▓реА рджреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдореЗрд░реА рдЧрд▓рддреА рдХреЗ рдХрд╛рд░рдг рд╣реБрдИ рдереАред рдкрд╕рдВрдж
рдПрдХ рдбрдореА, рдореИрдВ рдХреЗрд╡рд▓ рдкрд░рддреЛрдВ рдФрд░ рдЫрд┐рдкреА рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд░рд╣рд╛ рдерд╛
рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЪреВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЫреЛрдбрд╝ рд░рд╣рд╛ рдерд╛ред (рдпрд╣рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдереЛрдбрд╝рд╛ рдФрд░ рдбрдореА рд╕рдмреВрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:https://www.tensorflow.org/tutorials/seq2seq#lets_run_ithttps://www.tensorflow.org/tutorials/seq2seq#lets_run_it )

рд╣рдореНрдоред рдПрдХ рдмрд╛рдд рдЬреЛ рдореЗрд░реЗ рд╕рд╛рдордиреЗ рд╣реИ рд╡рд╣ рд╕рдВрджрд░реНрднрд┐рдд рд╡рд┐рд░рд╛рд╕рдд seq2seq . рдореЗрдВ рд╣реИ
рдлрд╝рд╛рдЗрд▓:

рдПрдиреНрдХреЛрдбрд░_рд╕реЗрд▓ = рдХреЙрдкреАред рдбреАрдкрдХреЙрдкреА (рд╕реЗрд▓)

рдпрд╣ рд░реЗрдЦрд╛ рдкреНрд░рдпреБрдХреНрдд рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреЛрдиреЛрдВ рдкрд░ рдПрдХ рд╣реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдиреНрдХреЛрдбрд░ рдФрд░ рдбрд┐рдХреЛрдбрд░ рдкрдХреНрд╖ред рд╡реЗ рд╕реЗрд▓ рдХреА рдПрдХ рдХреЙрдкреА рдмрдирд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЙрд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ
рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рддрд░реНрдХ, рдлрд┐рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рд╣реАред

рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдиреНрдХреЛрдбрд░ рд╕реЗрд▓ рдФрд░ рдбрд┐рдХреЛрдбрд░ рдмрдирд╛рддреЗ рд╣реИрдВ
рдЕрдкрдиреА seq2seq рдореЙрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд▓ рдХрд░реЗрдВ рдФрд░ рджреЛрдиреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ
рдлрд╝рд╛рдЗрд▓, рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЙрдирдХреЗ рддрд░реНрдХреЛрдВ рдореЗрдВ рдЫреЛрдЯреЗ рд╕рдорд╛рдпреЛрдЬрди рдХрд░рдирд╛?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-293143828 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtimxvcfFnbWbpj7aUs3BUjwGEFj6p5ks5ruvvygaJpZM4MWl4f
.

рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ LSTM рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдвреЗрд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдереА:
рдореЗрд░рд╛ рдореВрд▓ рдХреЛрдб рдерд╛:

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

рдлрд┐рд░, рдирд┐рдореНрди рдХреЛрдб рдХреЗ рд╕рд╛рде, рдореЙрдбрд▓ рдмрдирд╛рдирд╛ рдареАрдХ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛ред (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдЯреЗрдВрд╕рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░реЗрди_рдореЙрдбрд▓ рдФрд░ рдПрдХ рд╡реИрдз_рдореЙрдбрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛)

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

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

рддреЛ рдЕрдВрдд рдореЗрдВ рдореИрдВрдиреЗ lstm_creator рдХрд╛ рдЙрдкрдпреЛрдЧ lstm_cell tensorflow/models/tutorials/rnn/ptb/ptb_word_lm.py#L112 рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рд╣реИ:

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

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

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

рдпрд╣ рдЕрдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЗрд╕ рдЪреАрдЬрд╝ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдПрдХ рд╣реА рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ:

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

@pltrdy рдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдореИрдВ рд▓рд╛ рд░рд╣рд╛ рд╣реВрдБ

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

@aep рдХреНрдпрд╛ рдЖрдкрдиреЗ https://github.com/tensorflow/models/blob/master/tutorials/rnn/ptb/ptb_word_lm.py#L112 рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЕрдкрдиреА рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ (рдЕрдм рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) )

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

рдЗрд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░ рджреА

Tensorflow рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдмрдВрдзрд┐рдд:
pip install -Iv tensorflow==1.0

seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рдереА

@ebrevdo рдиреЗ рдЬреЛ рдХрд╣рд╛, рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рд╡рд┐рд░рд╛рд╕рдд seq2seq рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп contrib.seq2seq рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдмрдирд╛рдП рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдлреА рдордиреЛрдмрд▓ рдЧрд┐рд░рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЪрд▓рд╛рдП рдЧрдП рдкрд╣рд▓реЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рд╕рдордп рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдкреАрдЖрд░ рдЬрдорд╛ рдХрд░реВрдВрдЧрд╛ред

рд╣рдо рдПрдХ рдирдП seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдордиреЗ рдХреЗ рдЕрдВрдд рддрдХ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рдереА
рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рд▓реЗрдХрд┐рди рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИред рдпрд╣ рдирдП рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

1 рдордИ, 2017 рдХреЛ рд╕реБрдмрд╣ 8:07 рдмрдЬреЗ, "рдХрд╛рдЗрд▓ рдЯреАрдЧ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@ebrevdo https://github.com/ebrevdo рдиреЗ рдЬреЛ рдХрд╣рд╛, рдЙрд╕рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ
рд╕рдорд╛рдзрд╛рди рд╡рд┐рд░рд╛рд╕рдд seq2seq рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп contrib.seq2seq рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЬреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╣реИ
рдмрдирд╛рдП рд░рдЦрд╛ред рдЬрдм рдЖрдк рдкрд╣рд▓рд╛ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдлреА рдордиреЛрдмрд▓ рдЧрд┐рд░рд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрддрд╛ рд╣реИ
рдХрднреА рд░рди рдереВрдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рд╕рдордп рд╣реИ, рддреЛ рдореИрдВ
рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-298350307 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim587xZx9Gi4-yXmwccSum8_Trc1oks5r1fUogaJpZM4MWl4f
.

@ebrevdo tensorflow1.1 рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЕрдиреБрдХреНрд░рдо_to_sequence рдореЙрдбрд▓ рдЪрд▓рд╛рддреЗ рд╕рдордп рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдФрд░ рдореИрдВрдиреЗ 'рдкреБрди: рдЙрдкрдпреЛрдЧ' рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрд╕рдлрд▓ рд░рд╣рд╛ред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирдпрд╛ seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрдм рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ tf 1.2 рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреБрдЫ рдирдП рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВрдЧреЗ
рдЙрд╕ рд░рд┐рд▓реАрдЬ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВред

4 рдордИ, 2017 рдХреЛ рд░рд╛рдд 9:16 рдмрдЬреЗ, " njuzrs " [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

@ebrevdo https://github.com/ebrevdo рджреМрдбрд╝рддреЗ рд╕рдордп рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ
tensorflow1.1 рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЕрдиреБрдХреНрд░рдо_to_sequence рдореЙрдбрд▓ред рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрд╢рд┐рд╢ рд╣реИ
'рдкреБрди: рдЙрдкрдпреЛрдЧ' рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдХрд┐рди рдЕрд╕рдлрд▓ рд░рд╣рд╛ред рдХреНрдпрд╛ рдЖрдк рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдирдпрд╛ seq2seq
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-299366774 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim8_kFTM7-SsXQAA-Ar0dfhHMGT0Zks5r2qKngaJpZM4MWl4f
.

@ebrevdo рдореИрдВ рднреА рдЙрд╕реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ seq2seq рдХреЗ рд╕рд╛рде рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рд╣реВрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рд╣рдореЗрдВ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдирдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рд┐рдд рддрд┐рдерд┐ рдХреНрдпрд╛ рд╣реИред
рдЖрдкрдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

pip install tensorflow==1.0 (Tensorflow 1.0) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ (рдЕрдиреБрд╡рд╛рдж рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓)ред

рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг 1.1.0-рдЖрд░рд╕реА2 рд╣реИред

TF1.2 рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдЧрд╛? рдХреГрдкрдпрд╛ рдореЗрд░реА рдорджрдж рдХрд░реЗрдВ рдХрд┐ рдореЙрдбрд▓ рдХрд╛ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреИрд╕реЗ рдЬрд╛рд░реА рд░рдЦреЗрдВред TF 1.0 рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрдИ GPU рдХреЗ рд▓рд┐рдП devicewrapper api рдирд╣реАрдВ рд╣реИред

рдЯреЗрдВрд╕рд░ рдлреНрд▓реЛ 1.1 рдХреЗ рд╕рд╛рде рднреА рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЕрднреА рднреА рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ

рдореИрдВрдиреЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЕрдВрдд рдореЗрдВ рдореИрдВ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ 1.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рд▓реЗрдХрд┐рди рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: (рдЙрдкрд░реЛрдХреНрдд Tshzzz рдХреЗ рдЖрдзрд╛рд░ рдкрд░)

рд╣рдЯрд╛рдП рдЗрд╕реЗ:
multicell = rnn.MultiRNNCell([dropcell]*NLAYERS, state_is_tuple=False)

рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝реЗрдВ:
рдХреЛрд╢рд┐рдХрд╛рдПрдВ = []
_ рдЗрди рд░реЗрдВрдЬ (NLAYERS) рдХреЗ рд▓рд┐рдП:
рд╕реЗрд▓ = rnn.DropoutWrapper(tf.contrib.rnn.GRUCell(INTERNALSIZE), input_keep_prob=pkeep)
рд╕реЗрд▓.рдПрдкреЗрдВрдб (рд╕реЗрд▓)
рдорд▓реНрдЯреАрд╕реЗрд▓ = rnn.MultiRNNCell(рд╕реЗрд▓, State_is_tuple=False)

@ebrevdo рдмрдзрд╛рдИ рд╣реЛ, TF 1.2 рдЕрднреА рдЬрд╛рд░реА рд╣реБрдЖ - рдХреНрдпрд╛ рдирдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдХрд╣реАрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

рдзрдиреНрдпрд╡рд╛рдж

рдЗрд╕рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдкрд░ рд╣рдо рдПрдХ рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдПред

19 рдордИ, 2017 рдХреЛ рд╢рд╛рдо 7:02 рдмрдЬреЗ, "prashantserai" [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

@ebrevdo https://github.com/ebrevdo рдмрдзрд╛рдИ рд╣реЛ, TF 1.2 рдЕрднреА рдорд┐рд▓ рдЧрдпрд╛
рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ - рдХреНрдпрд╛ рдирдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рднреА рдХрд╣реАрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ
рдЬрд▓реНрдж рд╣реА рдХрднреА рднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛?

рдзрдиреНрдпрд╡рд╛рдж

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-302844002 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim0RWDzNCXk-bIjKSyHLvgFxUvq2lks5r7km7gaJpZM4MWl4f
.

tensorflow-gpu==1.1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдФрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, pip install tensorflow-gpu==1.0.0 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 1.0.0 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдареАрдХ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред

рдореИрдВ рдореИрдХ рдФрд░ рдЙрдмрдВрдЯреВ рджреЛрдиреЛрдВ рдкрд░ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ рдФрд░ рд╕реНрд░реЛрдд рд╕реЗ рд╕рдВрдХрд▓рди рджреЛрдиреЛрдВ рдмрд╛рд░ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП:
рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.0.0-cp34-cp34m-linux_x86_64.whl

@ajaanbaahu рдЕрднреА рднреА tf1.2 рдирдП seq2seq рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП pip install tensorflow==1.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред

рдзреЛрдЦреЗрдмрд╛рдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЕрдкрдиреА рдХреБрдЫ рд░рд╛рдп рд░рдЦрддрд╛ рд╣реВрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЗрд╕реА рддрд░рд╣ рдХреА рдЧрд▓рддреА рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛:
(рдореЗрд░реЗ рдХреЛрдб рдХрд╛ рдЯреБрдХрдбрд╝рд╛)

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

рддреНрд░реБрдЯрд┐ рдбрдВрдк рдирд┐рдореНрди рдХреЗ рд░реВрдк рдореЗрдВ:

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

рд▓реЗрдХрд┐рди рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд░рд┐рд╡реАрдЬрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдЙрди рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдиреЗ рднреА рдореЗрд░реЗ рд▓рд┐рдП Tensorflow 1.1 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛

рдореИрдВ seq2seq рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ $ MultiRNNCell рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдореБрдЭреЗ 1.0.1 рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛: pip3 install tensorflow==1.0

Legacy_seq2seq.rnn_decoder() рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдпреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ?

@oxwsds рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд╣рд╛, рдореИрдВ tf.contrib.legacy_seq2seq.embeding_attention_seq2seq рдХреЗ рдЗрдирдкреБрдЯ рдЖрд░реНрдЧреНрд╕ рд╕реЗрд▓ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрд▓ {encoder_cells, decoder_cells} рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВред рдЕрдВрдд рдореЗрдВ, рдореБрдЭреЗ seq2seq рдореЙрдбрд▓ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред 73200 рд╕реЗрдЯ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдШрдмрд░рд╛рд╣рдЯ рд╣реЛрддреА рд╣реИ 5.54ред
рдлрд┐рд░ рдореИрдВ рдбрд┐рдХреЛрдб рднрд╛рдЧ рдЪрд▓рд╛рддрд╛ рд╣реВрдВ,

рд╕рдВрдпреБрдХреНрдд рд░рд╛рдЬреНрдп рдЕрдореЗрд░рд┐рдХрд╛ рдХреЗ рд░рд╛рд╖реНрдЯреНрд░рдкрддрд┐ рдХреМрди рд╣реИ?
рдХреНрд╡реА рдЗрд╕реНрдЯ рд▓реЗ рдкреНрд░реЗрд╕рд┐рдбреЗрдВрдЯ рдбреЗрд╕ рдПрдЯреИрдЯреНрд╕-рдпреВрдирд┐рд╕?

рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИред рдзрдиреНрдпрд╡рд╛рджред

@doncat99
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ copy.deepcopy(cell) рдореЗрдВ seq2seq.py рдкреНрд░рднрд╛рд╡ рдирд╣реАрдВ рдбрд╛рд▓рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдВрдмрдВрдзрд┐рдд рднрд╛рдЧ рдХреЛ seq2seq_model.py рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реВрдВ

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

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

@ supermeatboy82 , рдХреНрдпрд╛ рдЖрдк рдЕрдкрдирд╛ рдХреЛрдб рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

Tensorflow 1.2.0 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдФрд░ рд╕реВрдЪреА рдЧреБрдгрди рдХреЗ рдмрдЬрд╛рдп рд▓реВрдк рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддрдп рдХрд░рддрд╛ рд╣реИред

Transl.py рдЪрд▓рд╛рддреЗ рд╕рдордп TF1.2 рдХреЗ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА, рд╡рд┐рд╡рд░рдг:
рдирд╛рдо: GeForce GTX 1080 Ti
рдореЗрдЬрд░: 6 рдорд╛рдЗрдирд░: 1 рдореЗрдореЛрд░реАрдХреНрд▓реЙрдХрд░реЗрдЯ (рдЧреАрдЧрд╛рд╣рд░реНрдЯреНрдЬ) 1.582
рдкреАрд╕реАрдЖрдИрдмрд╕рдЖрдИрдбреА 0000:02: 00.0
рдХреБрд▓ рдореЗрдореЛрд░реА: 10.91GiB
рдлреНрд░реА рдореЗрдореЛрд░реА: 10.76GiB
2017-06-22 09:15:04.485252: рдореИрдВ tensorflow/core/common_runtime/gpu/gpu_device.cc:961] DMA: 0
2017-06-22 09:15:04.485256: рдореИрдВ tensorflow/core/common_runtime/gpu/gpu_device.cc:971] 0: Y
2017-06-22 09:15:04.485265: рдореИрдВ tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] TensorFlow рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдирд╛ (/gpu:0) -> (рдбрд┐рд╡рд╛рдЗрд╕: 0, рдирд╛рдо: GeForce GTX 1080 Ti, pci рдмрд╕ рдЖрдИрдбреА: 0000:02: 00.0)
1024 рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА 3 рдкрд░рддреЗрдВ рдмрдирд╛рдирд╛ред
рдЯреНрд░реЗрд╕рдмреИрдХ (рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХреЙрд▓ рдЕрдВрддрд┐рдо):
рдлрд╝рд╛рдЗрд▓ "translate.py", рд▓рд╛рдЗрди 322, in
tf.app.run()
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/platform/app.py", рд▓рд╛рдЗрди 48, рдЪрд▓ рд░рд╣реА рд╣реИ
_sys.exit(рдореБрдЦреНрдп(_sys.argv[:1] + flags_passthrough))
рдлрд╝рд╛рдЗрд▓ "translate.py", рд▓рд╛рдЗрди 319, рдореБрдЦреНрдп рдореЗрдВ
рд░реЗрд▓ рдЧрд╛рдбреА()
рдлрд╝рд╛рдЗрд▓ "translate.py", рд▓рд╛рдЗрди 178, рдЯреНрд░реЗрди рдореЗрдВ
рдореЙрдбрд▓ = create_model (рд╕рддреНрд░, рдЧрд▓рдд)
рдлрд╝рд╛рдЗрд▓ "translate.py", рд▓рд╛рдЗрди 136, create_model . рдореЗрдВ
рдбреАрдЯрд╛рдЗрдк = рдбреАрдЯрд╛рдЗрдк)
рдлрд╝рд╛рдЗрд▓ "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py", рд▓рд╛рдЗрди 179, __init__ рдореЗрдВ
рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕_рдлрдВрдХреНрд╢рди = рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕_рдлрдВрдХреНрд╢рди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", рд▓рд╛рдЗрди 1206, model_with_buckets рдореЗрдВ
decoder_inputs[:bucket[1]])
рдлрд╝рд╛рдЗрд▓ "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py", рд▓рд╛рдЗрди 178, рдореЗрдВ
рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕, рд╡рд╛рдИ: seq2seq_f (рдПрдХреНрд╕, рд╡рд╛рдИ, рдЧрд▓рдд),
рдлрд╝рд╛рдЗрд▓ "/data/research/github/dl/tensorflow/tensorflow/models/tutorials/rnn/translate/seq2seq_model.py", рдкрдВрдХреНрддрд┐ 142, seq2seq_f рдореЗрдВ
рдбреАрдЯрд╛рдЗрдк = рдбреАрдЯрд╛рдЗрдк)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py", рд▓рд╛рдЗрди 848, рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рдЕрдЯреЗрдВрд╢рди_seq2seq рдореЗрдВ
рдПрдиреНрдХреЛрдбрд░_рд╕реЗрд▓ = рдХреЙрдкреАред рдбреАрдкрдХреЙрдкреА (рд╕реЗрд▓)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 174, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
рд╡рд╛рдИ = рдХреЙрдкрд┐рдпрд░ (рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/site-packages/tensorflow/python/layers/base.py", рд▓рд╛рдЗрди 476, __deepcopy__ рдореЗрдВ
setattr(result, k, copy.deepcopy(v, memo))
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 230, _deepcopy_list рдореЗрдВ
y.append (рдбреАрдкрдХреЙрдкреА (рдП, рдореЗрдореЛ))
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 230, _deepcopy_list рдореЗрдВ
y.append (рдбреАрдкрдХреЙрдкреА (рдП, рдореЗрдореЛ))
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 230, _deepcopy_list рдореЗрдВ
y.append (рдбреАрдкрдХреЙрдкреА (рдП, рдореЗрдореЛ))
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 237, _deepcopy_tuple рдореЗрдВ
y.append (рдбреАрдкрдХреЙрдкреА (рдП, рдореЗрдореЛ))
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 334, _reconstruct рдореЗрдВ
рд░рд╛рдЬреНрдп = рдбреАрдкрдХреЙрдкреА (рд░рд╛рдЬреНрдп, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 163, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = рдХреЙрдкрд┐рдпрд░ (x, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 257, _deepcopy_dict рдореЗрдВ
y [рдбреАрдкрдХреЙрдкреА (рдХреБрдВрдЬреА, рдореЗрдореЛ)] = рдбреАрдкрдХреЙрдкреА (рдорд╛рди, рдореЗрдореЛ)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 190, рдбреАрдкрдХреЙрдкреА рдореЗрдВ
y = _reconstruct(x, rv, 1, рдЬреНрдЮрд╛рдкрди)
рдлрд╝рд╛рдЗрд▓ "/home/lscm/opt/anaconda2/lib/python2.7/copy.py", рд▓рд╛рдЗрди 343, _reconstruct рдореЗрдВ
y.__dict__.рдЕрджреНрдпрддрди (рд░рд╛рдЬреНрдп)
рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'рдХреЛрдИ рдирд╣реАрдВ' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'рдЕрдкрдбреЗрдЯ'

рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдореЙрдбрд▓ рдореЗрдВ self_test() рдЪрд▓рд╛рддреЗ рд╕рдордп рдореБрдЭреЗ copy.deepcopy(cell) рдореЗрдВ embedding_attention_seq2seq() рдХреА рд╡рдЬрд╣ рд╕реЗ рд╣реБрдИ рддреНрд░реБрдЯрд┐ рднреА рдорд┐рд▓реАред
рдореИрдВрдиреЗ seq2seq_f() рдореЗрдВ Seq2SeqModel рдореЗрдВ рдХреЛрдб рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

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

рдлрд┐рд░ рдЕрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдПрдХ рдзреЛрдЦреЗрдмрд╛рдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдб рдкрд╣рд▓реЗ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдореЙрдбрд▓ рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреЗ рд╣реИрдВред

рдореИрдВ рд╕рднреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдХреЛ 1.0.0 (рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ-рдЬреАрдкреАрдпреВ) рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдореЙрдбрд▓ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдкреНрд░рджрд░реНрд╢рди рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 1.0.0 рдХрд╛ рд╕реАрдкреАрдпреВ рд╕рдВрд╕реНрдХрд░рдг рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛?ред
рдзрдиреНрдпрд╡рд╛рдж :)

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдк рдЕрднреА рднреА рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ embedding_attention_seq2seq рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреИрд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рд╕реЗрд▓ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдиреНрдХреЛрдбрд░ рдФрд░ рдбрд┐рдХреЛрдбрд░ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╕реЗрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЧрддрд┐рд╢реАрд▓ seq2seq рдХреЗ рд╡рд┐рдкрд░реАрдд рдмрд╛рд▓реНрдЯреА рдХреЗ рд╕рд╛рде рдПрдХ seq2seq рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдореИрдВ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдЪрд┐рдкрдХрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдзрдиреНрдпрд╡рд╛рдж,
рдлреИрдмрд┐рдпреЛ

рдЕрдЬрдЧрд░
рдбреАрдИрдПрдлрд╝ рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рдЕрдЯреЗрдВрд╢рди_рд╕реЗрдХ2рд╕реЗрдХ(рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕,
рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕,
рдПрдирд╕реА_рд╕реЗрд▓,
dec_cell,
num_encoder_symbols,
num_decoder_symbols,
рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рд╕рд╛рдЗрдЬрд╝,
num_heads=1,
рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди = рдХреЛрдИ рдирд╣реАрдВ,
Feed_previous=рдЧрд▓рдд,
dtype=рдХреЛрдИ рдирд╣реАрдВ,
рджрд╛рдпрд░рд╛ = рдХреЛрдИ рдирд╣реАрдВ,
рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рд╕реНрдЯреЗрдЯ_рдЕрдЯреЗрдВрд╢рди = рдЧрд▓рдд):
"""рд╕реАрдХреНрд╡реЗрдВрд╕-рдЯреВ-рд╕реАрдХреНрд╡реЗрдВрд╕ рдореЙрдбрд▓ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдПрдореНрдмреЗрдб рдХрд░рдирд╛ред

рдпрд╣ рдореЙрдбрд▓ рдкрд╣рд▓реЗ encoder_inputs рдХреЛ рдПрдХ рдирд╡ рдирд┐рд░реНрдорд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ (рдЖрдХрд╛рд░ рдХрд╛) рджреНрд╡рд╛рд░рд╛ рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИ
[num_encoder_symbols x input_size])ред рдлрд┐рд░ рдпрд╣ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд░рдПрдирдПрди рдЪрд▓рд╛рддрд╛ рд╣реИ
рдПрдХ рд░рд╛рдЬреНрдп рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рдПрдиреНрдХреЛрдбрд░_рдЗрдирдкреБрдЯред рдпрд╣ рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд░рдЦрддрд╛ рд╣реИ
рдЖрд░рдПрдирдПрди рд╣рд░ рдХрджрдо рдкрд░ рдмрд╛рдж рдореЗрдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ decoder_inputs рдПрдореНрдмреЗрдб рдХрд░рддрд╛ рд╣реИ
рдПрдХ рдФрд░ рдирд╡ рдирд┐рд░реНрдорд┐рдд рдПрдореНрдмреЗрдбрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ (рдЖрдХрд╛рд░ рдХрд╛ [num_decoder_symbols x
рдЗрдирдкреБрдЯ_рд╕рд╛рдЗрдЬ])ред рдлрд┐рд░ рдпрд╣ рдзреНрдпрд╛рди рдбрд┐рдХреЛрдбрд░ рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдПрдиреНрдХреЛрдбрд░ рд╕реНрдерд┐рддрд┐, рдПрдореНрдмреЗрдбреЗрдб рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯ рдкрд░ рдФрд░ рдПрдиреНрдХреЛрдбрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдирд╛ред

рдЪреЗрддрд╛рд╡рдиреА: рдЬрдм output_projection рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рдзреНрдпрд╛рди рд╡реИрдХреНрдЯрд░ рдХрд╛ рдЖрдХрд╛рд░
рдФрд░ рдЪрд░реЛрдВ рдХреЛ num_decoder_symbols рдХреЗ рд╕рдорд╛рдиреБрдкрд╛рддреА рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдмрдбрд╝реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрд░реНрдЧреНрд╕:
encoder_inputs: рдЖрдХрд╛рд░ рдХреЗ 1D int32 рдЯреЗрдВрд╕рд░ рдХреА рдПрдХ рд╕реВрдЪреА [batch_size]ред
decoder_inputs: рдЖрдХрд╛рд░ рдХреЗ 1D int32 рдЯреЗрдВрд╕рд░ рдХреА рдПрдХ рд╕реВрдЪреА [batch_size]ред
рд╕реЗрд▓: tf.nn.rnn_cell.RNNCрд╕реЗрд▓ рд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЖрдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред
num_encoder_symbols: рдкреВрд░реНрдгрд╛рдВрдХ; рдПрдиреНрдХреЛрдбрд░ рдкрдХреНрд╖ рдкрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
num_decoder_symbols: рдкреВрд░реНрдгрд╛рдВрдХ; рдбрд┐рдХреЛрдбрд░ рдкрдХреНрд╖ рдкрд░ рдкреНрд░рддреАрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рд╕рд╛рдЗрдЬрд╝: рдкреВрд░реНрдгрд╛рдВрдХ, рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХ рдХреЗ рд▓рд┐рдП рдПрдореНрдмреЗрдбрд┐рдВрдЧ рд╡реЗрдХреНрдЯрд░ рдХреА рд▓рдВрдмрд╛рдИред
num_heads: рдЕрдЯреЗрдВрд╢рди_рд╕реНрдЯреЗрдЯреНрд╕ рд╕реЗ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдЕрдЯреЗрдВрд╢рди рд╣реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди: рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╡реЗрдЯ рдХрд╛ рдХреЛрдИ рдирд╣реАрдВ рдпрд╛ рдПрдХ рдЬреЛрдбрд╝реА (рдбрдмреНрд▓реНрдпреВ, рдмреА) рдФрд░
рдкрдХреНрд╖рдкрд╛рдд; W рдХрд╛ рдЖрдХрд╛рд░ рд╣реИ [output_size x num_decoder_symbols] рдФрд░ B рдХрд╛ рд╣реИ
рдЖрдХрд╛рд░ [num_decoder_symbols]; рдпрджрд┐ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ Feed_previous=True, рдкреНрд░рддреНрдпреЗрдХ
рдЦрд┐рд▓рд╛рдпрд╛ рдЧрдпрд╛ рдкрд┐рдЫрд▓рд╛ рдЖрдЙрдЯрдкреБрдЯ рдкрд╣рд▓реЗ W рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ B рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред
Feed_previous: рдмреВрд▓рд┐рдпрди рдпрд╛ рдЕрджрд┐рд╢ рдмреВрд▓рд┐рдпрди рдЯреЗрдВрд╕рд░; рдЕрдЧрд░ рд╕рдЪ рд╣реИ, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛
decoder_inputs ("GO" рдкреНрд░рддреАрдХ), рдФрд░ рдЕрдиреНрдп рд╕рднреА рдбрд┐рдХреЛрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдЗрдирдкреБрдЯ рдкрд┐рдЫрд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рд▓рд┐рдП рдЬрд╛рдПрдВрдЧреЗ (рдЬреИрд╕рд╛ рдХрд┐ рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рдЖрд░рдПрдирдПрди_рдбрд┐рдХреЛрдбрд░ рдореЗрдВ рд╣реИ)ред
рдпрджрд┐ рдЧрд▓рдд рд╣реИ, рддреЛ decoder_inputs рджрд┐рдП рдЧрдП (рдорд╛рдирдХ рдбрд┐рдХреЛрдбрд░ рдХреЗрд╕) рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
dtype: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрд░рдПрдирдПрди рд░рд╛рдЬреНрдп рдХрд╛ рдкреНрд░рдХрд╛рд░ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ: tf.float32)ред
рджрд╛рдпрд░рд╛: рдмрдирд╛рдП рдЧрдП рд╕рдмрдЧреНрд░рд╛рдл рдХреЗ рд▓рд┐рдП рд╡реЗрд░рд┐рдПрдмрд▓рд╕реНрдХреЛрдк; рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреВрдХ
"embedding_attention_seq2seq"ред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ_рд╕реНрдЯреЗрдЯ_рдЕрдЯреЗрдВрд╢рди: рдпрджрд┐ рдЧрд▓рдд (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдзреНрдпрд╛рди рд╢реВрдиреНрдп рд╣реИред
рдпрджрд┐ рд╕рд╣реА рд╣реИ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рд╕реЗ рдзреНрдпрд╛рди рдЖрд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдзреНрдпрд╛рди рджреЗрдВ
рд░рд╛рдЬреНрдпреЛрдВред

рд░рд┐рдЯрд░реНрди:
рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдЯрдкрд▓ (рдЖрдЙрдЯрдкреБрдЯ, рд░рд╛рдЬреНрдп), рдЬрд╣рд╛рдВ:
рдЖрдЙрдЯрдкреБрдЯ: 2D Tensors рдХреЗ decoder_inputs рдХреЗ рд╕рдорд╛рди рд▓рдВрдмрд╛рдИ рдХреА рдПрдХ рд╕реВрдЪреА
рдЖрдХрд╛рд░ [рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝ x num_decoder_symbols] рдЬрд┐рд╕рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ
рдЖрдЙрдЯрдкреБрдЯ
рд░рд╛рдЬреНрдп: рдЕрдВрддрд┐рдо рд╕рдордп-рдЪрд░рдг рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдбрд┐рдХреЛрдбрд░ рд╕реЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ред
рдпрд╣ рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ 2D рдЯреЗрдВрд╕рд░ рд╣реИ [batch_size x cell.state_size]ред
"""
рд╡реЗрд░рд┐рдПрдмрд▓_рд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рдеред рд╡реЗрд░рд┐рдПрдмрд▓_рд╕реНрдХреЛрдк (
рд╕реНрдХреЛрдк рдпрд╛ "embedding_attention_seq2seq", dtype=dtype) рд╕реНрдХреЛрдк рдХреЗ рд░реВрдк рдореЗрдВ:
dtype = рд╕реНрдХреЛрдк.dtype
# рдПрдирдХреЛрдбрд░ред

encoder_cell = enc_cell

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

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

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

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

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

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

```

@fabiofumarola рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрджрдЧрд╛рд░ рд▓рдЧрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реИред рдореИрдВ рдЕрднреА рднреА рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд░рд┐рд▓реАрдЬ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдирдИ рдПрдкреАрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдирдП рдПрдкреАрдЖрдИ рдкрд░ рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдХрд┐рд╕реА рднреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж :)

@ syw2014 рдХреНрдпрд╛ рдЖрдкрдиреЗ рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдареАрдХ рдХреА?

@ w268wang рдЕрднреА рддрдХ рдирд╣реАрдВ, рдЕрднреА рднреА рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди @Miopas рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдореИрдВ @fabiofumarola рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

рдпрд╣ рдХрд╣рддрд╛ рд╣реИ TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'
рдЕрджреНрдпрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж @fabiofumarola рдиреЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдЖрдк рд▓реЛрдЧ рдХреГрдкрдпрд╛ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣рд╛рдВ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдЕрдкрдбреЗрдЯ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
Embedding_attention_seq2seq рд╕рдорд╛рд░реЛрд╣ред рдпрджрд┐ рдЖрдк рдЖрдк рдореЗрдВ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ
рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд░рд┐рд▓реАрдЬрд╝ рдЖрдк рд╕реНрд╡рдпрдВ рдХреА рд╡рд┐рдзрд┐ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рд░рд╡рд┐рд╡рд╛рд░, 2 рдЬреБрд▓рд╛рдИ 2017 рдХреЛ 18:15 рдмрдЬреЗ, sachinh35 [email protected] trote

рдпрд╣ рдХрд╣рддрд╛ рд╣реИ TypeError: Embedding_attention_seq2seq() рд▓рд╛рдкрддрд╛ 1 рдЖрд╡рд╢реНрдпрдХ
рд╕реНрдерд┐рддреАрдп рддрд░реНрдХ: 'dec_cell'

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312500996 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABepUEc3W8m5CVDQGnCLu4dcJVFwwLDZks5sJ8IOgaJpZM4MWl4f
.

>

рдЬреАрдореЗрд▓ рдореЛрдмрд╛рдЗрд▓ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

рд╣рд╛рдБ рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ seq2seq.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред рдлрд┐рд░ рднреА рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рддрд░реНрдХ рд╣реИ?

рд╣рд╛рдВ, рдЕрдм рдЖрдкрдХреЗ рдХреЛрдб рдореЗрдВ рдЖрдкрдХреЛ rnn_cells рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдиреНрдХреЛрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ
рдФрд░ рджреВрд╕рд░рд╛ рдбрд┐рдХреЛрдбрд░ рдХреЗ рд▓рд┐рдПред

рд╕реВрд░реНрдп, 2 рдЬреБрд▓рд╛рдИ 2017 рдХреЛ 20:54 рдмрдЬреЗ, fabio fumarola [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдВ

рд░рд╡рд┐рд╡рд╛рд░, 2 рдЬреБрд▓рд╛рдИ 2017 рдХреЛ 18:50 рдмрдЬреЗ, sachinh35 [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдБ рдореИрдВрдиреЗ рд╡рд╣реА рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ seq2seq.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ
рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд░рд┐рд▓реАрдЬрд╝ред рдлрд┐рд░ рднреА рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рд╣реИ
рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рддрд░реНрдХ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312503106 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABepUOXTQC_mzLuhcwW0iZRVkLmmr8yIks5sJ8pugaJpZM4MWl4f
.

>

рдЬреАрдореЗрд▓ рдореЛрдмрд╛рдЗрд▓ рд╕реЗ рднреЗрдЬрд╛ рдЧрдпрд╛

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рд╕рд╡рд╛рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдбрд┐рдХреЛрдбрд░ рд╕реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреМрди рд╕рд╛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ? рдореИрдВ seq2seq рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

`
__рднрд╡рд┐рд╖реНрдп__ рд╕реЗ рдирд┐рд░рдкреЗрдХреНрд╖_рдЖрдпрд╛рдд рдЖрдпрд╛рдд рдХрд░реЗрдВ
__рднрд╡рд┐рд╖реНрдп__ рдЖрдпрд╛рдд рдкреНрд░рднрд╛рдЧ рд╕реЗ
__рднрд╡рд┐рд╖реНрдп__ рд╕реЗ рдкреНрд░рд┐рдВрдЯ_рдлрдВрдХреНрд╢рди рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдпрд╛рдд рдХрд░реЗрдВ

np . рдХреЗ рд░реВрдк рдореЗрдВ numpy рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдЫрд╣ рд╕реЗред рдЖрдпрд╛рдд xrange # рдкрд╛рдЗрд▓рд┐рдВрдЯ: рдЕрдХреНрд╖рдо = рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд-рдмрд┐рд▓реНрдЯрд┐рди
tf . рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЖрдпрд╛рдд data_utils

рд╡рд░реНрдЧ Seq2SeqModel (рд╡рд╕реНрддреБ):
def __init__(рд╕реНрд╡рдпрдВ,
рд╕реНрд░реЛрдд_рд╡реЛрдХреИрдм_рдЖрдХрд╛рд░,
рд▓рдХреНрд╖реНрдп_рд╡реЛрдХреИрдм_рдЖрдХрд╛рд░,
рдмрд╛рд▓реНрдЯреА,
рдЖрдХрд╛рд░,
num_layers,
max_gradient_norm,
рдмреИрдЪ рдХрд╛ рдЖрдХрд╛рд░,
рд╕реАрдЦрдиреЗ рдХреА рджрд░,
Learning_rate_decay_factor,
use_lstm=рдЧрд▓рдд,
num_samples=512,
рдЖрдЧреЗ_рдХреЗрд╡рд▓=рдЧрд▓рдд,
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())

рдбреАрдИрдПрдлрд╝ рдЪрд░рдг (рд╕реНрд╡рдпрдВ, рд╕рддреНрд░, рдПрдиреНрдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдЯрд╛рд░рдЧреЗрдЯ_рд╡реЗрдЯреНрд╕,
рдмрдХреЗрдЯ_рдЖрдИрдбреА, рдлреЙрд░рд╡рд░реНрдб_рдУрдирд▓реА):

# 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 (рд╕реНрд╡рдпрдВ, рдбреЗрдЯрд╛, рдмрд╛рд▓реНрдЯреА_рдЖрдИрдбреА):

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

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

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

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

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

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

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

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

рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рд╣реИред

3 рдЬреБрд▓рд╛рдИ, 2017 рдХреЛ рд╕реБрдмрд╣ 8:46 рдмрдЬреЗ, " sachinh35 " [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдирдпрд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдмреБрдирд┐рдпрд╛рджреА рд╕рд╡рд╛рд▓ рд╣реИ рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдмрддрд╛рдПрдВ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдбрд┐рдХреЛрдбрд░ рд╕реЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХреМрди рд╕рд╛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ? рдореИрдВ рд╣реВрдВ
seq2seq рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЦреБрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдбрд╛рдЯрд╛рд╕реЗрдЯред
`# рдХреЙрдкреАрд░рд╛рдЗрдЯ 2015 TensorFlow рд▓реЗрдЦрдХред рд╕рд░реНрд╡рд╛рдзрд┐рдХрд╛рд░ рд╕реБрд░рдХреНрд╖рд┐рддред
рдЕрдкрд╛рдЪреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕, рд╕рдВрд╕реНрдХрд░рдг 2.0 ("рд▓рд╛рдЗрд╕реЗрдВрд╕") рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд; рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдЖрдк рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
http://www.apache.org/licenses/LICENSE-2.0 рдкрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдкреНрд░рддрд┐ рдЬрдм рддрдХ
рд▓рд╛рдЧреВ рдХрд╛рдиреВрди рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдпрд╛ рд▓рд┐рдЦрд┐рдд рд░реВрдк рдореЗрдВ рд╕рд╣рдордд, рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╡рд┐рддрд░рд┐рдд
рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд╛рд░рдВрдЯреА рдХреЗ рдмрд┐рдирд╛ "рдЬреИрд╕рд╛ рд╣реИ" рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╢рд░реНрддреЗрдВ, рдпрд╛ рддреЛ рд╡реНрдпрдХреНрдд рдпрд╛ рдирд┐рд╣рд┐рддред рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреЗрдЦреЗрдВ
рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдФрд░ рд╕реАрдорд╛рдУрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛

рд▓рд╛рдЗрд╕реЗрдВрд╕ред ============================================ ==========

"" "рдПрдХ рдзреНрдпрд╛рди рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдиреБрдХреНрд░рдо-рд╕реЗ-рдЕрдиреБрдХреНрд░рдо рдореЙрдбрд▓ред" ""

рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдпрд╛рдд рд╕реЗ рдирд┐рд░рдкреЗрдХреНрд╖_рдЖрдпрд╛рдд
рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдпрд╛рдд рд╡рд┐рднрд╛рдЧ рд╕реЗ
рднрд╡рд┐рд╖реНрдп рдХреЗ рдЖрдпрд╛рдд рд╕реЗ print_function

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЖрдпрд╛рдд рдХрд░реЗрдВ

np . рдХреЗ рд░реВрдк рдореЗрдВ numpy рдЖрдпрд╛рдд рдХрд░реЗрдВ
рдЫрд╣ рд╕реЗред рдЖрдпрд╛рдд xrange # рдкрд╛рдЗрд▓рд┐рдВрдЯ: рдЕрдХреНрд╖рдо = рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд-рдмрд┐рд▓реНрдЯрд┐рди
tf . рдХреЗ рд░реВрдк рдореЗрдВ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдЖрдпрд╛рдд рдХрд░реЗрдВ

рдЖрдпрд╛рдд data_utils

рд╡рд░реНрдЧ Seq2SeqModel (рд╡рд╕реНрддреБ):
"" "рдЕрдиреБрдХреНрд░рдо-рд╕реЗ-рдЕрдиреБрдХреНрд░рдо рдореЙрдбрд▓ рдзреНрдпрд╛рди рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХрд╛рдзрд┐рдХ рдмрд╛рд▓реНрдЯреА рдХреЗ рд▓рд┐рдПред

рдпрд╣ рд╡рд░реНрдЧ рдПрдиреНрдХреЛрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдмрд╣реБ-рдкрд░рдд рдЖрд╡рд░реНрддрдХ рддрдВрддреНрд░рд┐рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ,
рдФрд░ рдПрдХ рдзреНрдпрд╛рди рдЖрдзрд╛рд░рд┐рдд рдбрд┐рдХреЛрдбрд░ред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореЙрдбрд▓ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ
рдпрд╣ рдкреЗрдкрд░: http://arxiv.org/abs/1412.7449 - рдХреГрдкрдпрд╛ рд╡рд╣рд╛рдВ рджреЗрдЦреЗрдВ
рд╡рд┐рд╡рд░рдг,
рдпрд╛ рдкреВрд░реНрдг рдореЙрдбрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП seq2seq рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВред
рдпрд╣ рд╡рд░реНрдЧ LSTM рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ GRU рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░
рдмрдбрд╝реЗ рдЖрдЙрдЯрдкреБрдЯ рд╢рдмреНрджрд╛рд╡рд▓реА рдЖрдХрд╛рд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирдореВрдирд╛ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ред рдПрдХ рд╕рд┐рдВрдЧрд▓-рд▓реЗрдпрд░
рдЗрд╕ рдореЙрдбрд▓ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг, рд▓реЗрдХрд┐рди рджреНрд╡рд┐-рджрд┐рд╢рд╛рддреНрдордХ рдПрдиреНрдХреЛрдбрд░ рдХреЗ рд╕рд╛рде, рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛
http://arxiv.org/abs/1409.0473
рдФрд░ рдирдореВрдирд╛ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреЗрдкрд░ рдХреА рдзрд╛рд░рд╛ 3 рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
http://arxiv.org/abs/1412.2007
"""

рдбреАрдИрдПрдлрд╝ рдЗрдирд┐рдЯ (рд╕реНрд╡рдпрдВ,
рд╕реНрд░реЛрдд_рд╡реЛрдХреИрдм_рдЖрдХрд╛рд░,
рд▓рдХреНрд╖реНрдп_рд╡реЛрдХреИрдм_рдЖрдХрд╛рд░,
рдмрд╛рд▓реНрдЯреА,
рдЖрдХрд╛рд░,
num_layers,
max_gradient_norm,
рдмреИрдЪ рдХрд╛ рдЖрдХрд╛рд░,
рд╕реАрдЦрдиреЗ рдХреА рджрд░,
Learning_rate_decay_factor,
use_lstm=рдЧрд▓рдд,
num_samples=512,
рдЖрдЧреЗ_рдХреЗрд╡рд▓=рдЧрд▓рдд,
dtype=tf.float32):
"" "рдореЙрдбрд▓ рдмрдирд╛рдПрдВред

рдЖрд░реНрдЧреНрд╕:
source_vocab_size: рд╕реНрд░реЛрдд рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЖрдХрд╛рд░ред
target_vocab_size: рд▓рдХреНрд╖реНрдп рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЖрдХрд╛рд░ред
рдмрд╛рд▓реНрдЯреА: рдЬреЛрдбрд╝реЗ рдХреА рдПрдХ рд╕реВрдЪреА (I, O), рдЬрд╣рд╛рдВ рдореИрдВ рдЕрдзрд┐рдХрддрдо рдЗрдирдкреБрдЯ рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ
рдЙрд╕ рдмрд╛рд▓реНрдЯреА рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдУ рдЕрдзрд┐рдХрддрдо рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ
рд▓рдВрдмрд╛рдИред рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдЬрд┐рдирдореЗрдВ I рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рд╣реИрдВ
O рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЛ рдЕрдЧрд▓реА рдмрд╛рд▓реНрдЯреА рдореЗрдВ рдзрдХреЗрд▓рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдЧрджреНрджреЗрджрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реВрдЪреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, [(2, 4), (8, 16)]ред
рдЖрдХрд╛рд░: рдореЙрдбрд▓ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдкрд░рдд рдореЗрдВ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
num_layers: рдореЙрдбрд▓ рдореЗрдВ рдкрд░рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
max_gradient_norm: рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ рдХреЛ рдЗрд╕ рдорд╛рдирджрдВрдб рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝: рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рджреМрд░рд╛рди рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмреИрдЪреЛрдВ рдХрд╛ рдЖрдХрд╛рд░;
рдореЙрдбрд▓ рдирд┐рд░реНрдорд╛рдг рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдПред
Learning_rate: рд╕реАрдЦрдиреЗ рдХреА рджрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
Learning_rate_decay_factor: рдЬрд░реВрд░рдд рдкрдбрд╝рдиреЗ рдкрд░ рд╕реАрдЦрдиреЗ рдХреА рджрд░ рдХреЛ рдЗрддрдирд╛ рдХрдо рдХрд░рдирд╛ред
use_lstm: рдпрджрд┐ рд╕рд╣реА рд╣реИ, рддреЛ рд╣рдо GRU рд╕реЗрд▓ рдХреЗ рдмрдЬрд╛рдп LSTM рд╕реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
num_samples: рдирдореВрдирд╛ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
Forward_only: рдпрджрд┐ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдореЙрдбрд▓ рдореЗрдВ рдмреИрдХрд╡рд░реНрдб рдкрд╛рд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
dtype: рдЖрдВрддрд░рд┐рдХ рдЪрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ред
"""
self.source_vocab_size = source_vocab_size
self.target_vocab_size = target_vocab_size
рд╕реНрд╡рдпрдВ рдмрд╛рд▓реНрдЯреА = рдмрд╛рд▓реНрдЯреА
рд╕реНрд╡рдпрдВ.рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝ = рдмреИрдЪ_рд╕рд╛рдЗрдЬрд╝
self.learning_rate = tf.Variable(
рдлреНрд▓реЛрдЯ (рд▓рд░реНрдирд┐рдВрдЧ_рд░реЗрдЯ), рдЯреНрд░реЗрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп = рдЧрд▓рдд, dtype = dtype)
self.learning_rate_decay_op = self.learning_rate.assign(
self.learning_rate * Learning_rate_decay_factor)
self.global_step = tf.Variable(0, рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреЛрдЧреНрдп=рдЧрд▓рдд)

рдпрджрд┐ рд╣рдо рдирдореВрдирд╛ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди = рдХреЛрдИ рдирд╣реАрдВ
softmax_loss_function = рдХреЛрдИ рдирд╣реАрдВ

рдирдореВрдирд╛ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЬрдм рд╣рдо рд╢рдмреНрджрд╛рд╡рд▓реА рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдХрдо рдХрд╛ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВред

рдЕрдЧрд░ num_samples > 0 рдФрд░ num_samples < self.target_vocab_size:
w_t = tf.get_variable("proj_w", [self.target_vocab_size, size], dtype=dtype)
w = tf. рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг (w_t)
b = tf.get_variable("proj_b", [self.target_vocab_size], dtype=dtype)
рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди = (рдбрдмреНрд▓реНрдпреВ, рдмреА)

def рдирдореВрдирд╛_рд▓реЙрд╕ (рд▓реЗрдмрд▓, рдЗрдирдкреБрдЯ):
рд▓реЗрдмрд▓ = tf.reshape (рд▓реЗрдмрд▓, [-1, 1])
# рд╣рдореЗрдВ 32 рдмрд┐рдЯ рдлреНрд▓реЛрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирдореВрдирд╛_рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
#рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдЕрд╕реНрдерд┐рд░рддрд╛ рд╕реЗ рдмрдЪреЗрдВред
local_w_t = tf.cast (w_t, tf.float32)
local_b = tf.cast(b, tf.float32)
local_inputs = tf.cast (рдЗрдирдкреБрдЯ, tf.float32)
рд╡рд╛рдкрд╕реА tf.cast(
tf.nn.sampled_softmax_loss(local_w_t, local_b, local_inputs, рд▓реЗрдмрд▓,
num_samples, self.target_vocab_size),
рдбреАрдЯрд╛рдЗрдк)
softmax_loss_function = sampled_loss

рд╣рдорд╛рд░реЗ рдЖрд░рдПрдирдПрди рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рдмрд╣реБ-рдкрд░рдд рд╕реЗрд▓ рдмрдирд╛рдПрдВред

рдбреАрдИрдПрдлрд╝ рд╕рд┐рдВрдЧрд▓_рд╕реЗрд▓ ():
рд╡рд╛рдкрд╕реА tf.nn.rnn_cell.GRUCрд╕реЗрд▓ (рдЖрдХрд╛рд░)
рдЕрдЧрд░ use_lstm:
рдбреАрдИрдПрдлрд╝ рд╕рд┐рдВрдЧрд▓_рд╕реЗрд▓ ():
рд╡рд╛рдкрд╕реА tf.nn.rnn_cell.BasicLSTMCell(рдЖрдХрд╛рд░)
рд╕реЗрд▓ = рд╕рд┐рдВрдЧрд▓_рд╕реЗрд▓ ()
рдЕрдЧрд░ num_layers> 1:
рд╕реЗрд▓ = tf.nn.rnn_cell.MultiRNNCell([single_cell() for _ in range(num_layers)])

Seq2seq рдлрд╝рдВрдХреНрд╢рди: рд╣рдо рдЗрдирдкреБрдЯ рдФрд░ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

def seq2seq_f (encoder_inputs, decoder_inputs, do_decode):
рд╡рд╛рдкрд╕реА tf.contrib.legacy_seq2seq.embedding_attention_seq2seq(
рдПрдиреНрдХреЛрдбрд░_рдЗрдирдкреБрдЯ,
рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕,
рдХрдХреНрд╖,
num_encoder_symbols=source_vocab_size,
num_decoder_symbols=target_vocab_size,
рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рд╕рд╛рдЗрдЬрд╝ = рдЖрдХрд╛рд░,
рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди = рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди,
Feed_previous=do_decode,
рдбреАрдЯрд╛рдЗрдк = рдбреАрдЯрд╛рдЗрдк)

рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдлрд╝реАрдбред

self.encoder_inputs = []
self.decoder_inputs = []
рд╕реНрд╡.рд▓рдХреНрд╖реНрдп_рд╡рдЬрди = []
for i in xrange(buckets[-1][0]): # рд▓рд╛рд╕реНрдЯ рдмрдХреЗрдЯ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣реИред
self.encoder_inputs.append(tf.placeholder(tf.int32, рдЖрдХрд╛рд░=[рдХреЛрдИ рдирд╣реАрдВ],
name="encoder{0}".format(i)))
рдореИрдВ xrange рдореЗрдВ (рдмрд╛рд▓реНрдЯреА [-1] [1] + 1) рдХреЗ рд▓рд┐рдП:
self.decoder_inputs.append(tf.placeholder(tf.int32, рдЖрдХрд╛рд░ = [рдХреЛрдИ рдирд╣реАрдВ],
рдирд╛рдо = "рдбрд┐рдХреЛрдбрд░{0}"ред рдкреНрд░рд╛рд░реВрдк (i)))
self.target_weights.append(tf.placeholder(dtype, рдЖрдХрд╛рд░=[рдХреЛрдИ рдирд╣реАрдВ],
рдирд╛рдо = "рд╡рдЬрди{0}"ред рдкреНрд░рд╛рд░реВрдк (i)))

рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓рдХреНрд╖реНрдп = [self.decoder_inputs[i + 1]
рдореИрдВ рдХреЗ рд▓рд┐рдП xrange рдореЗрдВ (рд▓реЗрди (self.decoder_inputs) - 1)]

рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╣рд╛рдирд┐рдпрд╛рдБред

рдЕрдЧрд░ рдЖрдЧреЗ_рдХреЗрд╡рд▓:
self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
self.encoder_inputs, self.decoder_inputs, рд▓рдХреНрд╖реНрдп,
self.target_weights, рдмрдХреЗрдЯ, рд▓реИрдореНрдмреНрдбрд╛ x, y: seq2seq_f(x, y, True),
рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕_рдлрдВрдХреНрд╢рди = рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕_рдлрдВрдХреНрд╢рди)
# рдпрджрд┐ рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдЧрд░ output_projection рдХреЛрдИ рдирд╣реАрдВ рд╣реИ:
b рдХреЗ рд▓рд┐рдП xrange (рд▓реЗрди (рдмрд╛рд▓реНрдЯреА)) рдореЗрдВ:
рд╕реНрд╡рдпрдВ рдЖрдЙрдЯрдкреБрдЯ [рдмреА] = [
tf.matmul (рдЖрдЙрдЯрдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди [0]) + рдЖрдЙрдЯрдкреБрдЯ_рдкреНрд░реЛрдЬреЗрдХреНрд╢рди [1]
рд╕реНрд╡рдпрдВ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП [рдмреА]
]
рдЕрдиреНрдпрдерд╛:
self.outputs, self.losses = tf.contrib.legacy_seq2seq.model_with_buckets(
self.encoder_inputs, self.decoder_inputs, рд▓рдХреНрд╖реНрдп,
self.target_weights, рдмрдХреЗрдЯ,
рд▓реИрдореНрдмреНрдбрд╛ рдПрдХреНрд╕, рд╡рд╛рдИ: seq2seq_f (рдПрдХреНрд╕, рд╡рд╛рдИ, рдЧрд▓рдд),
рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕_рдлрдВрдХреНрд╢рди = рд╕реЙрдлреНрдЯрдореИрдХреНрд╕_рд▓реЙрд╕_рдлрдВрдХреНрд╢рди)

рдореЙрдбрд▓ рдХреЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдФрд░ рдПрд╕рдЬреАрдбреА рдЕрдкрдбреЗрдЯ рдСрдкрд░реЗрд╢рдиред

рдкреИрд░рд╛рдореНрд╕ = tf.trainable_variables ()
рдЕрдЧрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдХреЗрд╡рд▓:
рд╕реНрд╡.рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ_рдиреЙрд░реНрдореНрд╕ = []
рд╕реНрд╡рдпрдВ рдЕрдкрдбреЗрдЯ = []
рдСрдкреНрдЯ = tf.train.GradientDescentOptimizer(self.learning_rate)
b рдХреЗ рд▓рд┐рдП xrange (рд▓реЗрди (рдмрд╛рд▓реНрдЯреА)) рдореЗрдВ:
рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ = tf.gradients(self.losses[b], params)
рдХреНрд▓рд┐рдкреНрдб_рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕, рдорд╛рдирджрдВрдб = tf.clip_by_global_norm (рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕,
max_gradient_norm)
self.gradient_norms.append (рдорд╛рдирджрдВрдб)
self.updates.append(opt.apply_gradients(
zip(clipped_gradients, params), global_step=self.global_step))

рд╕реЗрд▓реНрдл.рд╕реЗрд╡рд░ = tf.train.Saver (tf.global_variables ())

рдбреАрдИрдПрдлрд╝ рдЪрд░рдг (рд╕реНрд╡рдпрдВ, рд╕рддреНрд░, рдПрдиреНрдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдЯрд╛рд░рдЧреЗрдЯ_рд╡реЗрдЯреНрд╕,
рдмрдХреЗрдЯ_рдЖрдИрдбреА, рдлреЙрд░рд╡рд░реНрдб_рдУрдирд▓реА):
"""рджрд┐рдП рдЧрдП рдЗрдирдкреБрдЯ рдХреЛ рдлреАрдб рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЪрд░рдг рдЪрд▓рд╛рдПрдБред

рдЖрд░реНрдЧреНрд╕:
рд╕рддреНрд░: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рд╕рддреНрд░ред
encoder_inputs: рдПрдиреНрдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдлреАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП numpy int рд╡реИрдХреНрдЯрд░ рдХреА рд╕реВрдЪреАред
decoder_inputs: рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдлреАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП numpy int рд╡реИрдХреНрдЯрд░ рдХреА рд╕реВрдЪреАред
target_weights: рд▓рдХреНрд╖реНрдп рд╡рдЬрд╝рди рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝реАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрди рдлреНрд▓реЛрдЯ рд╡реИрдХреНрдЯрд░ рдХреА рд╕реВрдЪреАред
рдмрд╛рд▓реНрдЯреА_рдЖрдИрдбреА: рдореЙрдбрд▓ рдХреА рдХрд┐рд╕ рдмрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред
Forward_only: рдмреИрдХрд╡рд░реНрдб рд╕реНрдЯреЗрдк рдХрд░рдирд╛ рд╣реИ рдпрд╛ рд╕рд┐рд░реНрдл рдлреЙрд░рд╡рд░реНрдб рдХрд░рдирд╛ рд╣реИред

рд░рд┐рдЯрд░реНрди:
рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдорд╛рдирджрдВрдб рд╕реЗ рдпреБрдХреНрдд рдПрдХ рдЯреНрд░рд┐рдкрд▓ (рдпрд╛ рдХреЛрдИ рдирд╣реАрдВ рдЕрдЧрд░ рд╣рдо рдкрд┐рдЫрдбрд╝рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ),
рдФрд╕рдд рдкрд░реЗрд╢рд╛рдиреА, рдФрд░ рдЖрдЙрдЯрдкреБрдЯред

рдЙрдард╛рддрд╛ рд╣реИ:
ValueError: рдЕрдЧрд░ encoder_inputs рдХреА рд▓рдВрдмрд╛рдИ, decoder_inputs, рдпрд╛
рд▓рдХреНрд╖реНрдп_рд╡реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрдХреЗрдЯ_рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдмрдХреЗрдЯ рдЖрдХрд╛рд░ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВред
"""

рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдХрд╛рд░ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

encoder_size, decoder_size = self.buckets[bucket_id]
рдЕрдЧрд░ рд▓реЗрди (рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕) != рдПрдирдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝:
ValueError рдмрдврд╝рд╛рдПрдБ ("рдПрдирдХреЛрдбрд░ рдХреА рд▓рдВрдмрд╛рдИ рдмрд╛рд▓реНрдЯреА рдореЗрдВ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП,"
"%d!=%d." % (рд▓реЗрди (рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯ), рдПрдиреНрдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝))
рдЕрдЧрд░ рд▓реЗрди (рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕)! = рдбрд┐рдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝:
ValueError рдмрдврд╝рд╛рдПрдБ ("рдбрд┐рдХреЛрдбрд░ рдХреА рд▓рдВрдмрд╛рдИ рдмрд╛рд▓реНрдЯреА рдореЗрдВ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП,"
"%d!=%d." % (рд▓реЗрди (рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯ), рдбрд┐рдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝))
рдЕрдЧрд░ рд▓реЗрди (target_weights) != decoder_size:
ValueError рдмрдврд╝рд╛рдПрдБ ("рд╡рдЬрди рдХреА рд▓рдВрдмрд╛рдИ рдмрд╛рд▓реНрдЯреА рдореЗрдВ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП,"
"%d!=%d." % (рд▓реЗрди(target_weights), decoder_size))

рдЗрдирдкреБрдЯ рдлрд╝реАрдб: рдПрдиреНрдХреЛрдбрд░ рдЗрдирдкреБрдЯ, рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ, рдЯрд╛рд░рдЧреЗрдЯ_рд╡реЗрдЯ, рдЬреИрд╕рд╛ рдХрд┐ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЗрдирдкреБрдЯ_рдлреАрдб = {}
l рдХреЗ рд▓рд┐рдП xrange(encoder_size) рдореЗрдВ:
input_feed[self.encoder_inputs[l].name] = encoder_inputs[l]
l рдХреЗ рд▓рд┐рдП xrange (рдбрд┐рдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝) рдореЗрдВ:
input_feed[self.decoder_inputs[l].name] = decoder_inputs[l]
input_feed[self.target_weights[l].name] = target_weights[l]

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдп рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рд╣реИрдВ рдЬреЛ рдПрдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ, рд╣рдореЗрдВ рдПрдХ рдФрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рдЖрдЙрдЯрдкреБрдЯ рдлреАрдб: рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмреИрдХрд╡рд░реНрдб рд╕реНрдЯреЗрдк рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдЕрдЧрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдХреЗрд╡рд▓:
output_feed = [self.updates[bucket_id], # Update Op рдЬреЛ SGD рдХрд░рддрд╛ рд╣реИред
self.gradient_norms[bucket_id], # рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдорд╛рдирджрдВрдбред
self.losses[bucket_id]] # рдЗрд╕ рдмреИрдЪ рдХреЗ рд▓рд┐рдП рдиреБрдХрд╕рд╛рдиред
рдЕрдиреНрдпрдерд╛:
output_feed = [self.losses[bucket_id]] # рдЗрд╕ рдмреИрдЪ рдХреЗ рд▓рд┐рдП рдиреБрдХрд╕рд╛рдиред
l рдХреЗ рд▓рд┐рдП xrange(decoder_size) рдореЗрдВ: # рдЖрдЙрдЯрдкреБрдЯ logits.
output_feed.append(self.outputs[bucket_id][l])

рдЖрдЙрдЯрдкреБрдЯ = рд╕рддреНрд░ред рд░рди (рдЖрдЙрдЯрдкреБрдЯ_рдлреАрдб, рдЗрдирдкреБрдЯ_рдлреАрдб)
рдЕрдЧрд░ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдХреЗрд╡рд▓:
рд░рд┐рдЯрд░реНрди рдЖрдЙрдЯрдкреБрдЯ [1], рдЖрдЙрдЯрдкреБрдЯ [2], рдХреЛрдИ рдирд╣реАрдВ # рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдорд╛рдирджрдВрдб, рд╣рд╛рдирд┐, рдХреЛрдИ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВред
рдЕрдиреНрдпрдерд╛:
рдХреЛрдИ рдирд╣реАрдВ, рдЖрдЙрдЯрдкреБрдЯ [0], рдЖрдЙрдЯрдкреБрдЯ [1:] # рдХреЛрдИ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдорд╛рдирджрдВрдб, рд╣рд╛рдирд┐, рдЖрдЙрдЯрдкреБрдЯ рдирд╣реАрдВред

def get_batch (рд╕реНрд╡рдпрдВ, рдбреЗрдЯрд╛, рдмрд╛рд▓реНрдЯреА_рдЖрдИрдбреА):
"""рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмрдХреЗрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреИрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЪрд░рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░реЗрдВред

рд╕реНрдЯреЗрдк (..) рдореЗрдВ рдбреЗрдЯрд╛ рдлреАрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмреИрдЪ-рдореЗрдЬрд░ рд╡реИрдХреНрдЯрд░ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрдмрдХрд┐
рдпрд╣рд╛рдВ рдбреЗрдЯрд╛ рдореЗрдВ рдПрдХрд▓ рд▓рдВрдмрд╛рдИ-рдкреНрд░рдореБрдЦ рдорд╛рдорд▓реЗ рд╣реИрдВред рддреЛ рдЗрд╕рдХрд╛ рдореБрдЦреНрдп рддрд░реНрдХ
рдХрд╛рд░реНрдп рдбреЗрдЯрд╛ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреБрди: рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЖрд░реНрдЧреНрд╕:
рдбреЗрдЯрд╛: рдЖрдХрд╛рд░ len(self.buckets) рдХрд╛ рдПрдХ рдЯрдкрд▓ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИ
рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЬреЛрдбрд╝реЗ рдХреА рд╕реВрдЪреА рдЬреЛ рд╣рдо рдПрдХ рдмреИрдЪ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдмрд╛рд▓реНрдЯреА_рдЖрдИрдбреА: рдкреВрд░реНрдгрд╛рдВрдХ, рдХрд┐рд╕ рдмрд╛рд▓реНрдЯреА рдХреЗ рд▓рд┐рдП рдмреИрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИред

рд░рд┐рдЯрд░реНрди:
рдЯреНрд░рд┐рдкрд▓ (рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдЯрд╛рд░рдЧреЗрдЯ_рд╡реЗрдЯреНрд╕) рдХреЗ рд▓рд┐рдП
рдирд┐рд░реНрдорд┐рдд рдмреИрдЪ рдЬрд┐рд╕рдореЗрдВ рдмрд╛рдж рдореЗрдВ рдЪрд░рдг (...) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рдкреНрд░рд╛рд░реВрдк рд╣реИред
"""
encoder_size, decoder_size = self.buckets[bucket_id]
encoder_inputs, decoder_inputs = [], []

рдбреЗрдЯрд╛ рд╕реЗ рдПрдиреНрдХреЛрдбрд░ рдФрд░ рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмреИрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ,

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЙрдиреНрд╣реЗрдВ рдкреИрдб рдХрд░реЗрдВ, рдПрдиреНрдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд░реЗрдВ рдФрд░ рдбрд┐рдХреЛрдбрд░ рдореЗрдВ GO рдЬреЛрдбрд╝реЗрдВред

xrange рдореЗрдВ _ рдХреЗ рд▓рд┐рдП (self.batch_size):
encoder_input, decoder_input = random.choice(data[bucket_id])

# рдПрдирдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЛ рдЧрджреНрджреЗрджрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрд▓рдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
encoder_pad = [data_utils.PAD_ID] * (encoder_size - len(encoder_input))
encoder_inputs.append (рд╕реВрдЪреА (рдЙрд▓рдЯ (рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯ + рдПрдиреНрдХреЛрдбрд░_рдкреИрдб)))

# рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд "GO" рдкреНрд░рддреАрдХ рдорд┐рд▓рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЧрджреНрджреЗрджрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред
рдбрд┐рдХреЛрдбрд░_рдкреИрдб_рд╕рд╛рдЗрдЬрд╝ = рдбрд┐рдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝ - рд▓реЗрди (рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯ) - 1
decoder_inputs.append([data_utils.GO_ID] + decoder_input +
[data_utils.PAD_ID] * decoder_pad_size)

рдЕрдм рд╣рдо рдКрдкрд░ рдЪреБрдиреЗ рдЧрдП рдбреЗрдЯрд╛ рд╕реЗ рдмреИрдЪ-рдореЗрдЬрд░ рд╡реИрдХреНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВред

рдмреИрдЪ_рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдмреИрдЪ_рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕, рдмреИрдЪ_рд╡реЗрдЯреНрд╕ = [], [], []

рдмреИрдЪ рдПрдиреНрдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдХреЗрд╡рд▓ рдПрдиреНрдХреЛрдбрд░_рдЗрдирдкреБрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

xrange рдореЗрдВ length_idx рдХреЗ рд▓рд┐рдП (рдПрдирдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝):
рдмреИрдЪ_рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕ред рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ (
np.array([encoder_inputs[batch_idx][length_idx]
рдмреИрдЪ_рдЖрдИрдбреАрдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП xrange(self.batch_size)], dtype=np.int32))

рдмреИрдЪ рдбрд┐рдХреЛрдбрд░ рдЗрдирдкреБрдЯ рдкреБрди: рдЕрдиреБрдХреНрд░рдорд┐рдд рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯ рд╣реИрдВ, рд╣рдо рд╡рдЬрд╝рди рдмрдирд╛рддреЗ рд╣реИрдВред

xrange рдореЗрдВ length_idx рдХреЗ рд▓рд┐рдП (рдбрд┐рдХреЛрдбрд░_рд╕рд╛рдЗрдЬрд╝):
рдмреИрдЪ_рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕ред рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ (
np.array([decoder_inputs[batch_idx][length_idx]
рдмреИрдЪ_рдЖрдИрдбреАрдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП xrange(self.batch_size)], dtype=np.int32))

# рдкреИрдбрд┐рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП target_weights 0 рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдВред
рдмреИрдЪ_рд╡реЗрдЯ = np.ones (self.batch_size, dtype=np.float32)
рдмреИрдЪ_рдЖрдИрдбреАрдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП xrange (self.batch_size) рдореЗрдВ:
# рд╣рдо рд╡рдЬрди рдХреЛ 0 рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд▓рдХреНрд╖реНрдп PAD рдкреНрд░рддреАрдХ рд╣реИред
# рд╕рдВрдмрдВрдзрд┐рдд рд▓рдХреНрд╖реНрдп рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯ рд╣реИ рдЬрд┐рд╕реЗ 1 рдЖрдЧреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдЧрд░ рд▓рдВрдмрд╛рдИ_рдЖрдИрдбреАрдПрдХреНрд╕ <рдбрд┐рдХреЛрдбрд░_рд╕рд╛рдЗрдЬ -1:
рд▓рдХреНрд╖реНрдп = рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯреНрд╕ [рдмреИрдЪ_рдЖрдИрдбреАрдПрдХреНрд╕] [рд▓рдВрдмрд╛рдИ_рдЖрдИрдбреАрдПрдХреНрд╕ + 1]
рдЕрдЧрд░ length_idx == decoder_size - 1 рдпрд╛ рд▓рдХреНрд╖реНрдп == data_utils.PAD_ID:
рдмреИрдЪ_рд╡реЗрдЯ [рдмреИрдЪ_рдЖрдИрдбреАрдПрдХреНрд╕] = 0.0
рдмреИрдЪ_рд╡реЗрдЯреНрд╕.рдПрдкреЗрдВрдб (рдмреИрдЪ_рд╡реЗрдЯ)
рд╡рд╛рдкрд╕реА рдмреИрдЪ_рдПрдирдХреЛрдбрд░_рдЗрдирдкреБрдЯ, рдмреИрдЪ_рдбрд┐рдХреЛрдбрд░_рдЗрдирдкреБрдЯ, рдмреИрдЪ_рд╡реЗрдЯ `

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312679587 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim0l5UMHHtbL1sz7meXserV8NVS7cks5sKQzXgaJpZM4MWl4f
.

рдареАрдХ! рд╣рд╛рд▓рд╛рдВрдХрд┐ рдзрдиреНрдпрд╡рд╛рдж! :)

@ebrevdo рдХреНрдпрд╛ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ рдЬрдм рдирдИ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ seq2seq рдХрд╛ рдирдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕рд╛рдордиреЗ рдЖрдПрдЧрд╛?
рд╢реБрдХреНрд░рд┐рдпрд╛ред рдЕрджреНрднреБрдд рдХрд╛рд░реНрдп!ред

рд╣рд╛рдБ рдирдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ ... рдпрд╣ рдЬрд╛рдирдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ .. @ebrevdo

рдХрд░реНрдиреЗрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХреЛрдб рд▓реЗрдиреЗ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд seq2seq рдХреЗ рд╕рд╛рде рдмреАрдо рдЦреЛрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдерд╛ ...

рд╣рдо рдЗрд╕ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдкреНрддрд╛рд╣ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣реЗ рд╣реИрдВ!

3 рдЬреБрд▓рд╛рдИ 2017 рдХреЛ рд╕реБрдмрд╣ 10:16 рдмрдЬреЗ "prashantserai" [email protected] рдиреЗ рд▓рд┐рдЦрд╛:

рд╣рд╛рдБ, рдирдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ... рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╣реИ
рдЬрд▓реНрдж рд╣реА рдХрднреА рднреА рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ.. @ebrevdo
https://github.com/ebrevdo

рдХрд░реНрдиреЗрд▓ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХреЛрдб рд▓реЗрдиреЗ рдФрд░ рдмреАрдо рдЦреЛрдЬ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА
рд╡рд┐рд░рд╛рд╕рдд seq2seq, рд▓реЗрдХрд┐рди рдпрд╣ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рд▓рдЧ рд░рд╣рд╛ рдерд╛ ...

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-312697274 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtim45-HTuQrIRDhphqqHjqkKOKTe53ks5sKSHYgaJpZM4MWl4f
.

рд╣рд╛рдп рджреЛрд╕реНрддреЛрдВ,

рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдЕрдкрдбреЗрдЯ, рдореИрдВ рдореИрдХ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ 1.1-рдЬреАрдкреАрдпреВ рдкрд░ рд╕рдорд╛рди рдЕрдиреБрднрд╡ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ

@tshi1983
рдореБрдЭреЗ рдЙрдмрдВрдЯреВ рдХреЗ рд▓рд┐рдП рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ 1.1-рдЬреАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред
рдореИрдВ рдЯреАрдПрдл 1.2 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВред рдпрд╣ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд░ рдореИрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдореНрдмреЗрдбрд┐рдВрдЧ_рдЕрдЯреЗрдВрд╢рди_seq2seq рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓рддрд╛ рд╣реВрдВ
tensorflow/contrib/legacy_seq2seq/python/ops/seq2seq.py
рдЬреИрд╕рд╛ рдХрд┐ @fabiofumarola рдиреЗ рдКрдкрд░ рд╕реБрдЭрд╛рдпрд╛ рд╣реИред
рдЕрдм рдЗрд╕рдХреА рдЯреНрд░реЗрдирд┐рдВрдЧ рд╢реБрд░реВ рд╣реЛ рдЧрдИ рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рд╕реЗрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдХреЛрдб рдХреЛ seq2seq_f рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ:

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

рдлрд┐рд░ "python translation.py --data_dir data/ --train_dir checkpoint/ --size=256 --num_layers=2 --steps_per_checkpoint=50" рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

@huxuanlai рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдХрдо рд╕реЗ рдХрдо рдпрд╣ рдЕрднреА рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд▓реЗ рд░рд╣рд╛ рд╣реИ, thx!

@huxuanlai рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рд╡рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛ рд░рд╣рд╛ рд╣реИ AttributeError: 'NoneType' object has no attribute 'update' рд▓реЗрдХрд┐рди рд╕рд╛рде рдореЗрдВ tf.contrib.legacy_seq2seq.model_with_buckets ред рдореИрдВ ubuntu 16.04 lts рдкрд░ tf 1.2.1 (GPU) рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВред

рдпрд╣ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореЗрд░реЗ рдкрд╛рд╕ 1 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд▓реНрдЯреА рд╣реЛрддреА рд╣реИред

рдкреВрд░реНрдг рдЯреНрд░реЗрд╕рдмреИрдХ:

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

@Tshzzz @jtubert
thx, рдЖрдкрдХреЗ рд╕рдорд╛рдзрд╛рди рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред рдореЗрд░рд╛ tf рд╡рд░реНрдЬрди 1.1.0 рд╣реИред

рдореИрдВ рд╕реЗ рдмрджрд▓ рдЧрдпрд╛:

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

рдкреНрд░рддрд┐:

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

рдпрд╣ рдЕрднреА рднреА рддрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдзрд╛рдЧреЗ рдФрд░ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдпрд╣ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ 1.3 рдпрд╛ 1.2 рдпрд╛ 1.1 рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдореБрдЭреЗ рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ:
TypeError: embedding_attention_seq2seq() missing 1 required positional argument: 'dec_cell'

рддреНрд░реБрдЯрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ seq2seq_model.py рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдЬреЛ seq2seq_model.py рдореЗрдВ рдкрдВрдХреНрддрд┐ 142 рд╣реИ:

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

рдЬреЛ рдХреЛрдИ рднреА рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рдХреГрдкрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░реЗрдВред

ValueError: рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рдеред рд╕реЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпреЛрдЧ рд╕реНрдХреЛрдк 'rnn/multi_rnn_cell/cell_0/gru_cell' рдХреЗ рд╕рд╛рде рдерд╛, рдпрд╣ рдкреНрд░рдпрд╛рд╕ 'rnn/multi_rnn_cell/cell_1/gru_cell' рд╕реНрдХреЛрдк рдХреЗ рд╕рд╛рде рд╣реИред рдХреГрдкрдпрд╛ рд╕реЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рдЬрди рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ: MultiRNNCell([GRUCell(...)] * num_layers), рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ: MultiRNNCell([GRUCell(...) for _ in range(num_layers)])ред рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рд╣реА рд╕реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рджреНрд╡рд┐рджрд┐рд╢ рдЖрд░рдПрдирдПрди рдХреЗ рдлреЙрд░рд╡рд░реНрдб рдФрд░ рд░рд┐рд╡рд░реНрд╕ рд╕реЗрд▓ рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдмрд╕ рджреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ (рдПрдХ рдлреЙрд░рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП)ред рдордИ 2017 рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реЗрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдЬрдм рдЗрд╕реЗ рд╕реНрдХреЛрдк = рдХреЛрдИ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рд╕реЗ рдореВрдХ рдореЙрдбрд▓ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рддрдХ рдмрдиреА рд░рд╣реЗрдЧреАред)

рдореВрд▓ рдХреЛрдб:
tensorflow.contrib рд╕реЗ рдЖрдпрд╛рдд rnn
рдЗрдирдкреБрдЯреНрд╕ = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (dtype=tf.int32, рдЖрдХрд╛рд░=[рдХреЛрдИ рдирд╣реАрдВ, рдХреЛрдИ рдирд╣реАрдВ], рдирд╛рдо = "рдЗрдирдкреБрдЯреНрд╕")
Keep_prob = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (dtype=tf.float32, name="keep_prob")
рд╕реЗрд▓ = rnn.GRUCрд╕реЗрд▓(10)
рд╕реЗрд▓ = rnn.DropoutWrapper (рд╕реЗрд▓ = рд╕реЗрд▓, input_keep_prob=keep_prob)
рд╕реЗрд▓ = rnn.MultiRNNCell([рд╢реНрд░реЗрдгреА рдореЗрдВ _ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓(5)], State_is_tuple=True)

рдмрд╛рд╣рд░реА, рд░рд╛рдЬреНрдп = tf.nn.dynamic_rnn (рд╕реЗрд▓ = рд╕реЗрд▓, рдЗрдирдкреБрдЯ = рд▓реБрдХ_рдЕрдк, dtype = tf.float32)
рдЙрдкрд╛рдп:
рдЗрдирдкреБрдЯреНрд╕ = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (dtype=tf.int32, рдЖрдХрд╛рд░=[рдХреЛрдИ рдирд╣реАрдВ, рдХреЛрдИ рдирд╣реАрдВ], рдирд╛рдо = "рдЗрдирдкреБрдЯреНрд╕")
Keep_prob = tf.рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ (dtype=tf.float32, name="keep_prob")
рд╕реЗрд▓ = rnn.MultiRNNCell([rnn.DropoutWrapper(rnn.GRUCell(10), input_keep_prob=keep_prob) _рдЗрди рд░реЗрдВрдЬ(5)] рдХреЗ рд▓рд┐рдП, State_is_tuple=True)

рдХреНрдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ tf рдирд╛рдЗрдЯрд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдпрд╣ рд╕рдорд╕реНрдпрд╛ рд╣реИ?

1 рдЕрдХреНрдЯреВрдмрд░, 2017 рдХреЛ рд╕реБрдмрд╣ 8:34 рдмрдЬреЗ, "рдмрд╛рдУрд╣реБрдЖ рдЭреЛрдЙ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдЖрдИрдУрдПрд╕ рдХреЗ рд╕рд╛рде рд╕реАрдкреАрдпреВ рдкрд░ рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ 1.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/tensorflow/tensorflow/issues/8191#issuecomment-333384725 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABtimwOv7vf5vvFXBllbZryjCFwmJcU6ks5sn7DxgaJpZM4MWl4f
.

рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'рдХреЛрдИ рдирд╣реАрдВ' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'рдЕрдкрдбреЗрдЯ'

рдЯреАрдПрдл = 1.3 . рдореЗрдВ

ValueError: рдЖрд░рдПрдирдПрдирд╕реЗрд▓ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рдеред рд╕реЗрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рдкреНрд░рдпреЛрдЧ 'embedding_attention_seq2seq/rnn/multi_rnn_cell/cell_0/gru_cell' рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рдерд╛, рдпрд╣ рдкреНрд░рдпрд╛рд╕ 'embedding_attention_seq2seq/rnn/multi_rnn_cell/cell_1/gru_cell' рдХреЗ рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╛рде рд╣реИред рдХреГрдкрдпрд╛ рд╕реЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рдЬрди рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рдереЗ: MultiRNNCell([GRUCell(...)] * num_layers), рдЗрд╕рдореЗрдВ рдмрджрд▓реЗрдВ: MultiRNNCell([GRUCell(...) for _ in range(num_layers)])ред рдпрджрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдПрдХ рд╣реА рд╕реЗрд▓ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рджреНрд╡рд┐рджрд┐рд╢ рдЖрд░рдПрдирдПрди рдХреЗ рдлреЙрд░рд╡рд░реНрдб рдФрд░ рд░рд┐рд╡рд░реНрд╕ рд╕реЗрд▓ рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣реЗ рдереЗ, рддреЛ рдмрд╕ рджреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВ (рдПрдХ рдлреЙрд░рд╡рд░реНрдб рдХреЗ рд▓рд┐рдП, рдПрдХ рд░рд┐рд╡рд░реНрд╕ рдХреЗ рд▓рд┐рдП)ред рдордИ 2017 рдореЗрдВ, рд╣рдо рдореМрдЬреВрджрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рдЬрд╝рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реЗрд▓ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗ, рдпрджрд┐ рдХреЛрдИ рд╣реЛ, рдЬрдм рдЗрд╕реЗ рд╕реНрдХреЛрдк = рдХреЛрдИ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд┐рд╕рд╕реЗ рдореВрдХ рдореЙрдбрд▓ рдЧрд┐рд░рд╛рд╡рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рддрдХ рдмрдиреА рд░рд╣реЗрдЧреАред)

рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ 14 рджрд┐рди рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ awaiting tensorflower рд▓реЗрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреГрдкрдпрд╛ рддрджрдиреБрд╕рд╛рд░ рд▓реЗрдмрд▓ рдФрд░/рдпрд╛ рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

TensorFlower рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ: рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ 14 рджрд┐рди рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ awaiting tensorflower рд▓реЗрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреГрдкрдпрд╛ рддрджрдиреБрд╕рд╛рд░ рд▓реЗрдмрд▓ рдФрд░/рдпрд╛ рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред

рд╕рдорд╛рдзрд╛рди TF рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬрд╛рдирд╛ рд╣реИред рдпрд╣ рдзрд╛рдЧрд╛ рдЕрдкрдиреЗ рдореВрд▓ рдореБрджреНрджреЗ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╕рдорд╛рдкрдиред

рдпрджрд┐ рдЖрдк рддрддреНрдХрд╛рд▓ рд╕рдорд╛рдзрд╛рди рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЬреЛ рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕реЗ рдЖрдЬрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ:

pip install tensorflow==1.0
рдореБрджреНрджрд╛ рдЯреЗрдиреЙрд░рдлрд╝реНрд▓реЛ 1.1 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд╣реИ, рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

3rduncle picture 3rduncle  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Billy4195 picture Billy4195  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aerointern16 picture aerointern16  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

RahulKulhari picture RahulKulhari  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jacobma-create picture jacobma-create  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ