【问题标题】:How to implement the time sequence shown as following如何实现如下所示的时序
【发布时间】:2018-08-03 04:55:32
【问题描述】:

ST(空间变换)有两个输入。第一个是Fi,它是固定的。另一个是 M,它根据最后一个 LSTM 的输出而变化。 LTSM 的输入取决于 ST 的输出和最后一个 LSTM 的状态。

【问题讨论】:

    标签: tensorflow lstm


    【解决方案1】:

    最简单的方法可能是编写自己的 RNN 单元。另一种方法是使用tf.raw_rnn。查看this post 或此excellent article

    【讨论】:

      【解决方案2】:

      其实我的网络实现如下:

        def build_model(self):
      
          lstm_cell = tf.contrib.rnn.BasicLSTMCell(
              num_units=self.config.num_lstm_units, state_is_tuple=True, reuse=True)
          if self.mode == "train":
            lstm_cell = tf.contrib.rnn.DropoutWrapper(
                lstm_cell,
                input_keep_prob=self.config.lstm_dropout_keep_prob,
                output_keep_prob=self.config.lstm_dropout_keep_prob)
      
          with tf.variable_scope("lstm", initializer=self.initializer) as lstm_scope:
      
            zero_state = lstm_cell.zero_state(
                batch_size=self.image_embeddings.get_shape()[0], dtype=tf.float32)
      
            K = 5
            C = 80
      
            scores = tf.Variable(tf.random_normal(shape=[K, self.config.batch_size, C]), name="scores")
      
            M = tf.Variable(tf.random_normal(shape=[K+1, self.config.batch_size, 2, 3]), name="M")
            tf.assign(M[0], tf.convert_to_tensor([[1., 0., 0.], [0., 1., 0.]]))
      
            lstm_input_size = 14
            zk_size = 4096
      
            hidden = zero_state
      
            for k in range(0, K+1):
                # Allow the LSTM variables to be reused.
                if k > 0:
                    lstm_scope.reuse_variables()
                f_k = spatial_transformer_network.spatial_transformer_network(self.image_embeddings, M[k])
      
                f_k = tf.nn.max_pool(f_k, [1,2,2,1], [1,1,1,1], padding='VALID')
      
                f_k = tf.layers.dense(tf.reshape(f_k, [self.config.batch_size, int(lstm_input_size * lstm_input_size / 4 * 512)]), 4096)
      
                lstm_outputs, hidden = lstm_cell(f_k, hidden)
      
                z_k = tf.layers.dense(hidden[0], zk_size, activation=tf.nn.relu)
      
                if k != 0:
                    tf.assign(scores[k - 1], (tf.layers.dense(z_k, C)))
      
                if k != K:
                    tf.assign(M[k + 1], (tf.reshape(tf.layers.dense(z_k, 6), [self.config.batch_size, 2, 3])))
                    tf.assign(M[k + 1, :, 0, 1], (tf.convert_to_tensor(0.)))
                    tf.assign(M[k + 1, :, 1, 0], (tf.convert_to_tensor(0.)))
      

      但是运行时会报错

      lstm_outputs, hidden = lstm_cell(f_k, hidden).
      

      错误信息是: ValueError:变量 lstm/basic_lstm_cell/kernel 不存在,或者不是使用 tf.get_variable() 创建的。您的意思是在 VarScope 中设置 reuse=tf.AUTO_REUSE 吗?

      那么问题是什么?

      【讨论】:

      • 请仅使用发布答案按钮获取实际答案。您应该 edit 您的原始问题以添加更多信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 2011-03-10
      相关资源
      最近更新 更多