训练张量流模型,最大限度地减少几批次的损失

时间:2016-02-20 13:56:11

标签: python tensorflow

我想根据几个批次的损失值之和来训练模型的权重。但是,似乎一旦为每个批次运行图形,返回的对象只是一个常规的numpy数组。因此,当您尝试使用像GradientDescentOptimizer这样的优化器时,它不再具有用于计算损失总和的变量的信息,因此无法找到有助于最小化损失的权重的梯度。这是一个示例tensorflow脚本来说明我在说什么:

weights = tf.Variable(tf.ones([num_feature_values], tf.float32))
feature_values = tf.placeholder(tf.int32, shape=[num_feature_values])
labels  = tf.placeholder(tf.int32, shape=[1])

loss_op = some_loss_function(weights, feature_values, labels)

with tf.Session() as sess:
    for batch in batches:
        feed_dict = fill_feature_values_and_labels(batch)

        #Calculates loss for one batch
        loss = sess.run(loss_op, feed_dict=feed_dict)
        #Adds it to total loss
        total_loss += loss

# Want to train weights to minimize total_loss, however this 
# doesn't work because the graph has already been run.
optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(total_loss)

with tf.Session() as sess:
    for step in xrange(num_steps):
        sess.run(optimizer)

total_loss是一个numpy数组,因此无法在优化器中使用。有没有人知道解决问题的方法,我希望在多个批次中使用信息,但仍然需要图表完整,以保留total_loss是权重函数的事实?

1 个答案:

答案 0 :(得分:0)

你在任何培训师中优化的东西必须是图表的一部分,这里你训练的是实际的实现结果,所以它不起作用。

我认为您应该这样做的方法是将输入构建为一批批次,例如

intput = tf.placeholder("float", (number_of_batches, batch_size, input_size)

然后你的目标也是一个可以训练的3d张量。