使用张量流进行增量模型训练

Vla*_*nin 2 python tensorflow

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

        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)
Run Code Online (Sandbox Code Playgroud)

我的想法是记住经过长时间训练的系数,并使用它们初始化一个模型,然后再次使用新的数据部分重复训练。对每个输入重复此操作。这是正确的方法吗?该模型可能稍后会升级为更复杂的模型。

小智 5

听起来您正在谈论在线训练,即在同时使用输入数据的情况下连续训练模型。您是对的,您应该能够从上次停下来的地方继续学习,只需要输入新数据即可。您需要的是一种在培训课程之间保存和加载变量的方法。您可以使用tf.Saver在“原始”张量流中执行此操作。

您也可以使用tf.contrib.learn.Estimator为您执行此操作。您只需为其提供一个用于构建模型的model_fn,以及一个用于将模型保存到其中的model_dir,其余的工作将由它来完成。当然,tf.contrib.learn.LinearEstimator中已经存在线性模型。使用估算器,只要有新数据,您就只需调用fit(...),它将加载变量并继续运行您定义的训练步骤。