我正在尝试在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之间交替,每次交替意味着再次按下音调。
我需要在这里手动计算交叉熵吗?