Python 3.x 如何处理TensorFlow中的可变形状偏差?

Python 3.x 如何处理TensorFlow中的可变形状偏差?,python-3.x,tensorflow,Python 3.x,Tensorflow,我只是修改了一个LSTM网络,我写了打印出测试错误。我意识到,问题在于我定义的模型取决于批量大小 具体来说,输入是形状张量[批次大小、时间步长、特征]。输入进入LSTM单元,输出,我将其转换为时间步长2D张量列表,每个2D张量都有形状[批大小,隐藏单位]。然后将每个2D张量乘以形状[隐藏单位]的权重向量,得到形状[批次大小]的向量,该向量添加了形状[批次大小]的偏差向量 换句话说,我给出了模型N序列,我希望它为每个序列的每个时间步输出一个标量。也就是说,输出是N个向量的列表,每个时间步长一个 对

我只是修改了一个LSTM网络,我写了打印出测试错误。我意识到,问题在于我定义的模型取决于批量大小

具体来说,输入是形状张量[批次大小、时间步长、特征]。输入进入LSTM单元,输出,我将其转换为时间步长2D张量列表,每个2D张量都有形状[批大小,隐藏单位]。然后将每个2D张量乘以形状[隐藏单位]的权重向量,得到形状[批次大小]的向量,该向量添加了形状[批次大小]的偏差向量

换句话说,我给出了模型N序列,我希望它为每个序列的每个时间步输出一个标量。也就是说,输出是N个向量的列表,每个时间步长一个

对于培训,我给出了大小为13的模型批次。对于测试数据,我提供了整个数据集,其中包括400多个示例。因此,由于偏差具有固定的形状批次大小,因此误差增大

我还没有找到一种方法,使它的形状变量不引起错误

如果需要,我可以添加完整的代码。添加了代码

谢谢

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,)