我有一个简单的线性模型,它输入(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)
我的想法是记住迄今为止训练有素的系数,用它们创建模型,然后再用新的数据部分重复训练。对每个输入重复。这是一个正确的方法吗?该模型可能会在稍后推广到更复杂的东西..
答案 0 :(得分:5)
听起来你在谈论在线培训,即在使用它的同时不断训练带有输入数据的模型。你是对的,你应该能够从你离开的地方拿起并输入新的数据。您需要的是一种在训练课程之间保存和加载变量的方法。您可以使用tf.Saver在" raw"中执行此操作。 tensorflow。
您也可以使用tf.contrib.learn.Estimator为您执行此操作。你只需要给它一个构造你的模型的model_fn和一个用于保存模型的model_dir,它将负责其余的工作。当然,tf.contrib.learn.LinearEstimator中已有线性模型。使用估算工具,只要您有新数据,就可以调用fit(...),它会加载变量并继续运行您已定义的训练步骤。