Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
向Tensorflow中的LSTM/动态rnn馈送补充序列_Tensorflow_Lstm - Fatal编程技术网

向Tensorflow中的LSTM/动态rnn馈送补充序列

向Tensorflow中的LSTM/动态rnn馈送补充序列,tensorflow,lstm,Tensorflow,Lstm,我有一个网络,它接收一个热编码的观测序列,并将其分批和预定长度的序列输入LSTM 我试图引入一个修改,在提供实际观测序列的同时,我还可以提供一个“补充”序列,它将反映序列中每个相应观测的某些内容。例如,如果我输入一个[1,2,3,4,5]序列,我还想输入另一个序列,比如[0,0,1,0,0],以表明原始序列中的“3”具有特定属性,而其他序列则没有 根据某人的建议,我试图将一个热编码的原始序列与这个补充序列(我称之为“模式”)连接起来,但虽然运行正常,但我最终似乎要实现的是在一个热向量中添加一个额

我有一个网络,它接收一个热编码的观测序列,并将其分批和预定长度的序列输入LSTM

我试图引入一个修改,在提供实际观测序列的同时,我还可以提供一个“补充”序列,它将反映序列中每个相应观测的某些内容。例如,如果我输入一个[1,2,3,4,5]序列,我还想输入另一个序列,比如[0,0,1,0,0],以表明原始序列中的“3”具有特定属性,而其他序列则没有

根据某人的建议,我试图将一个热编码的原始序列与这个补充序列(我称之为“模式”)连接起来,但虽然运行正常,但我最终似乎要实现的是在一个热向量中添加一个额外的元素,而这个热向量不再那么热了)

我已将实验代码减少到以下最小值:

BATCH = 2
SEQ = 3
VOCAB = 5
CELL_SIZE = 4

X = tf.placeholder(tf.int32, [BATCH, SEQ])
X_hot = tf.one_hot(X, VOCAB, 1.0, 0.0)
X_mode = tf.placeholder(tf.float32, [BATCH, SEQ])
X_mode_exp = tf.expand_dims(X_mode, axis=2)
X_tuple = tf.concat([X_hot, X_mode_exp], axis=2)

Hin = tf.placeholder(tf.float32, [BATCH, CELL_SIZE])

cell = rnn.GRUCell(CELL_SIZE)
Y, H = tf.nn.dynamic_rnn(cell, X_tuple, dtype=tf.float32)

with tf.Session() as sess:
    gInit = tf.global_variables_initializer().run()

    h = np.zeros([BATCH, CELL_SIZE])
    x = np.array([[1,2,3],[3,2,1]])
    x_mode = np.array([[0,1,0],[1,0,1]])
    x_h_out, x_tuple_out, hout = sess.run([X_hot, X_tuple, H], feed_dict={X:x, X_mode: x_mode, Hin: h})
    print('x_hot:\n{}\n'.format(x_h_out))
    print('x_tuple:\n{}'.format(x_tuple_out))
将生成以下输出:

x_hot:
[[[ 0.  1.  0.  0.  0.]
  [ 0.  0.  1.  0.  0.]
  [ 0.  0.  0.  1.  0.]]

 [[ 0.  0.  0.  1.  0.]
  [ 0.  0.  1.  0.  0.]
  [ 0.  1.  0.  0.  0.]]]

x_tuple:
[[[ 0.  1.  0.  0.  0.  0.]
  [ 0.  0.  1.  0.  0.  1.]
  [ 0.  0.  0.  1.  0.  0.]]

 [[ 0.  0.  0.  1.  0.  1.]
  [ 0.  0.  1.  0.  0.  0.]
  [ 0.  1.  0.  0.  0.  1.]]]

实现这一目标的更好替代方法是什么?再一次,我想要的是向LSTM中输入一行“附加信息”,这将反映序列中每个元素的附加信息。

为什么这种方法不好?你把额外的信息作为额外的输入传递到网络上,这似乎是唯一合乎逻辑的做法。我不知道这是否一定是坏事。我只是担心通常被认为是“一个热”的向量不再是一个热,它本质上是“两个热”。接下来的优化器和精度评估操作是否能够正确解释这意味着什么?例如,tf.argmax()将为以下内容返回0:[1,0,0,1]。那么向量中最后一个1有什么用呢?没有人说神经网络输入必须是一个热向量。对于计算来说,向量只是一个数字向量,它最终将学习每个神经元的正确解释。为什么这种方法不好?你把额外的信息作为额外的输入传递到网络上,这似乎是唯一合乎逻辑的做法。我不知道这是否一定是坏事。我只是担心通常被认为是“一个热”的向量不再是一个热,它本质上是“两个热”。接下来的优化器和精度评估操作是否能够正确解释这意味着什么?例如,tf.argmax()将为以下内容返回0:[1,0,0,1]。那么向量中最后一个1有什么用呢?没有人说神经网络输入必须是一个热向量。对于计算来说,向量只是一个数字向量,它最终将学习每个神经元的正确解释。