代码之家  ›  专栏  ›  技术社区  ›  noname7619

使用tensorflow的增量模型训练

  •  3
  • noname7619  · 技术社区  · 9 年前

    我有一个简单的线性模型,它输入(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)
    

    我的想法是记住迄今为止训练的系数,用它们初始化模型,然后用新的数据部分再次重复训练。对每个输入重复。这条路对吗?该模型稍后可能会升级为更复杂的模型。。

    1 回复  |  直到 5 年前
        1
  •  5
  •   Gilbert Hendry    9 年前

    听起来像是在谈论在线培训,即在使用输入数据的同时不断地培训模型。你是对的,你应该能够从你停止的地方开始,然后输入新的数据。您需要的是一种在培训课程之间保存和加载变量的方法。你可以使用tf。Saver在“原始”tensorflow中执行此操作。

    您也可以使用tf.contrib.learn。估计员为您做这件事。你只需要给它一个model_fn来构建你的模型,以及一个mode_dir来保存模型,它会处理其余的。当然,tf.contrib.learn.LinearEstimator中已经有一个线性模型。使用估计器,每当您有新数据时,您只需调用fit(…),它将加载变量并继续运行您定义的训练步骤。

    推荐文章