2017-04-20 67 views
0

我只是修改了一些我写过的打印出测试错误的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 

回答

-1

你想要的偏见成为的形状(batch_size时,)

例如(使用零代替tf.constant但类似的问题),我是能够指定形状作为一个整数:

biases = tf.Variable(tf.zeros(10,dtype=tf.float32)) 
print(biases.shape) 

打印:

(10,)