我有一个简单的线性模型,它输入(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)我的想法是记住经过如此远的训练的系数,在其中加入一个模型,然后再用数据的新部分重复训练。每次输入重复。这是个正确的方法吗?这个模型可能会在以后推广到更复杂的东西。
发布于 2017-06-20 13:19:10
听起来你说的是在线培训,即在同时使用输入数据的同时,不断地训练一个模型。你是对的,你应该能够拿起你停下来的地方,输入新的数据。您需要的是一种在培训期间保存和加载变量的方法。您可以使用tf.Saver在“原始”tensorflow中执行此操作。
您还可以使用tf.contrib.learn.Estimator为您完成此操作。您只需给它一个构造模型的model_fn,并给它一个model_dir来保存模型,它就会处理剩下的部分。当然,在tf.contrib.learn.LinearEstimator中已经有了一个线性模型。使用估值器,您只需调用fit(.)每当您有新数据时,它将加载您的变量,并继续运行您定义的培训步骤。
https://stackoverflow.com/questions/41522364
复制相似问题