如何在每个时间步中实现带矢量输入的LSTM网络?

时间:2017-05-18 08:19:30

标签: python input tensorflow lstm

我正在尝试在Tensorflow中创建一个生成LSTM网络。我有这样的输入向量:

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

此矩阵中的每个向量都是一个时间步长,换句话说,每个向量应该是LSTM的一个输入。输出将是相同的,除了它们将向右移动一步(我试图预测下一个输出)。然后我列出了这些矩阵,其中有五个 - 这是一批。最后我列出了这些批次,这基本上就是我的培训数据。所以基本上我有4D张量。

我试图做这样的事情,但显然它不起作用,我不太清楚我明白如何解决它:

def LSTM(x_, weights, biases):
    cell = tf.contrib.rnn.BasicLSTMCell(RNN_HIDDEN)

    # initial state
    batch_size = tf.shape(x_)[1]
    initial_state = cell.zero_state(batch_size, tf.float32)

    rnn_outputs, rnn_states = tf.nn.dynamic_rnn(cell,
                                                x_,
                                                initial_state=initial_state,
                                                time_major=False)
    return tf.matmul(rnn_outputs[-1], weights['out']) + biases['out']

那么,我应该如何表示数据,以便网络能够处理它?<​​/ p>

另外,我不太确定在这种情况下如何定义损失。我的向量是88维,其中每个索引代表一个音调。 &#39; 1&#39;表示播放音调,&#39; 0&#39; 0 - 音调已关闭。此外,当播放特定音调,然后再次播放时,我用&#39; 2&#39;标记。 (为简洁而截断的载体):

[0 0 1 0]
[0 0 1 0]
[0 0 2 0]
[0 0 2 0]

如果这里只有一个,我将无法区分它是一个长音,还是两个(或三个或四个)短音。这样我在1s和2s之间交替,每次交替意味着再次按下音调。

我需要在这里手动计算交叉熵吗?

0 个答案:

没有答案