如何处理TensorFlow中的可变形状偏差?

时间:2017-04-20 21:50:44

标签: python-3.x tensorflow

我刚刚修改了一些我编写的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

0 个答案:

没有答案