我只是修改了一些我寫過的打印出測試錯誤的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