在Tensorflow中为LSTM / dynamic_rnn提供补充序列

时间:2017-05-04 21:23:51

标签: tensorflow lstm

我有一个网络,它接受一系列单热编码观察,并将其分批和预定长度的序列输入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提供一系列“附加信息”,这将反映序列中每个元素的一些额外信息。

0 个答案:

没有答案