我只是修改了一些我写过的打印出测试错误的LSTM网络。我意识到的问题是我定义的模型取决于批量大小。如何处理TensorFlow中的变量形状偏差?
具体而言,输入是形状为[batch_size, time_steps, features]
的张量。输入进入LSTM单元和输出,我把它变成一个列表time_steps
二维张量,每个二维张量的形状为[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