具有张量流的增量模型训练

时间:2017-01-07 14:15:31

标签: python tensorflow

我有一个简单的线性模型,它输入(x,y)对并推导出y = b0 + b1 * x中的b0和b1;关键代码如下。 它训练已知大小的数据集。现在我想添加不断训练它的能力:即添加每隔一批(x,y),并根据新数据更新cofficients。将有无限量的输入。

        x = tf.placeholder(tf.float32, [data_len], name="x")
        y = ...
        b0 = tf.Variable([0.8], trainable=True)
        b1 = ...
        #the model
        y = tf.add(tf.mul(x, b1), b0)
        y_act = tf.placeholder(tf.float32, [data_len], name="y_act")
        error = tf.sqrt((y - y_act) * (y - y_act))
        train_step = tf.train.AdamOptimizer(0.01).minimize(error)
        x_in = ...
        y_in = ...
        init = tf.initialize_all_variables()
        sess.run(init)
        feed_dict = { ... }
        fetches_in = { b0: b0, b1: b1, y: y, train_step: train_step }
        for i in range(0, 50):
            fetches = sess.run(fetches_in, feed_dict)

我的想法是记住迄今为止训练有素的系数,用它们创建模型,然后再用新的数据部分重复训练。对每个输入重复。这是一个正确的方法吗?该模型可能会在稍后推广到更复杂的东西..

1 个答案:

答案 0 :(得分:5)

听起来你在谈论在线培训,即在使用它的同时不断训练带有输入数据的模型。你是对的,你应该能够从你离开的地方拿起并输入新的数据。您需要的是一种在训练课程之间保存和加载变量的方法。您可以使用tf.Saver在" raw"中执行此操作。 tensorflow。

您也可以使用tf.contrib.learn.Estimator为您执行此操作。你只需要给它一个构造你的模型的model_fn和一个用于保存模型的model_dir,它将负责其余的工作。当然,tf.contrib.learn.LinearEstimator中已有线性模型。使用估算工具,只要您有新数据,就可以调用fit(...),它会加载变量并继续运行您已定义的训练步骤。