2017-04-20 74 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,)