我刚刚修改了一些我编写的LSTM网络来打印测试错误。我意识到,问题在于我定义的模型取决于批量大小。
具体而言,输入是形状[batch_size, time_steps, features]
的张量。输入进入LSTM单元和输出,我将其转换为time_steps
2D张量列表,每个2D张量具有形状[batch_size, hidden_units]
。然后将每个2D张量乘以形状[hidden_units]
的权重向量,以产生形状[batch_size]
的向量,其向其添加形状[batch_size]
的偏向量。
总之,我给出了模型N
序列,我希望它为每个序列的每个时间步输出一个标量。也就是说,输出是N
向量的列表,每个时间步长一个。
对于培训,我给出了大小为13的模型批次。对于测试数据,我提供了整个数据集,其中包含400多个示例。因此,会产生错误,因为偏差具有固定的形状batch_size
。
我还没有找到一种方法来改变它的形状变量。
我可以根据要求添加完整的代码。 无论如何都添加了代码。
感谢。
def basic_lstm(inputs, number_steps, number_features, number_hidden_units, batch_size):
weights = {
'out': tf.Variable(tf.random_normal([number_hidden_units, 1]))
}
biases = {
'out': tf.Variable(tf.constant(0.1, shape=[batch_size, 1]))
}
lstm_cell = rnn.BasicLSTMCell(number_hidden_units)
init_state = lstm_cell.zero_state(batch_size, dtype=tf.float32)
hidden_layer_outputs, states = tf.nn.dynamic_rnn(lstm_cell, inputs,
initial_state=init_state, dtype=tf.float32)
results = tf.squeeze(tf.stack([tf.matmul(output, weights['out'])
+ biases['out'] for output
in tf.unstack(tf.transpose(hidden_layer_outputs, (1, 0, 2)))], axis=1))
return results