我有一个简单的线性模型,它输入(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(...),它将加载变量并继续运行您定义的训练步骤。
| 归档时间: |
|
| 查看次数: |
2286 次 |
| 最近记录: |