首页 文章

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

提问于
浏览
1

我想根据几个批次的损失值之和来训练模型的权重 . 但是,似乎一旦为每个批次运行图形,返回的对象只是一个常规的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

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

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

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

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

相关问题