Python 3.x 如何处理TensorFlow中的可变形状偏差?
我只是修改了一个LSTM网络,我写了打印出测试错误。我意识到,问题在于我定义的模型取决于批量大小 具体来说,输入是形状张量[批次大小、时间步长、特征]。输入进入LSTM单元,输出,我将其转换为时间步长2D张量列表,每个2D张量都有形状[批大小,隐藏单位]。然后将每个2D张量乘以形状[隐藏单位]的权重向量,得到形状[批次大小]的向量,该向量添加了形状[批次大小]的偏差向量 换句话说,我给出了模型N序列,我希望它为每个序列的每个时间步输出一个标量。也就是说,输出是N个向量的列表,每个时间步长一个 对于培训,我给出了大小为13的模型批次。对于测试数据,我提供了整个数据集,其中包括400多个示例。因此,由于偏差具有固定的形状批次大小,因此误差增大 我还没有找到一种方法,使它的形状变量不引起错误 如果需要,我可以添加完整的代码。添加了代码 谢谢Python 3.x 如何处理TensorFlow中的可变形状偏差?,python-3.x,tensorflow,Python 3.x,Tensorflow,我只是修改了一个LSTM网络,我写了打印出测试错误。我意识到,问题在于我定义的模型取决于批量大小 具体来说,输入是形状张量[批次大小、时间步长、特征]。输入进入LSTM单元,输出,我将其转换为时间步长2D张量列表,每个2D张量都有形状[批大小,隐藏单位]。然后将每个2D张量乘以形状[隐藏单位]的权重向量,得到形状[批次大小]的向量,该向量添加了形状[批次大小]的偏差向量 换句话说,我给出了模型N序列,我希望它为每个序列的每个时间步输出一个标量。也就是说,输出是N个向量的列表,每个时间步长一个 对
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
您希望偏差为批量大小的形状 例如,使用零代替tf.constant但类似的问题,我能够将形状指定为单个整数:
biases = tf.Variable(tf.zeros(10,dtype=tf.float32))
print(biases.shape)
印刷品:
(10,)
您希望偏差为批量大小的形状 例如,使用零代替tf.constant但类似的问题,我能够将形状指定为单个整数:
biases = tf.Variable(tf.zeros(10,dtype=tf.float32))
print(biases.shape)
印刷品:
(10,)