假设我已经训练了我的模型并做出了预测。
我的问题是......如何在不从头开始重新训练模型的情况下将一些新数据附加到我的预训练模型中。
假设我已经训练了我的模型并做出了预测。
我的问题是......如何在不从头开始重新训练模型的情况下将一些新数据附加到我的预训练模型中。
这完全取决于您使用的特定算法。其中一些支持增量学习,而另一些则不支持。
例如,在 的情况下scikit-learn
,fit()
在同一个模型上多次使用只会覆盖模型的权重(更多详细信息请参见此处)。
但是,您可以做的是寻找实现partial_fit
api 的算法,并使用它来重新训练现有模型 - 请参阅文档以获取支持增量学习并因此实现此 api 的算法列表。
另一种解决方案是寻找支持warm_start
参数的算法,例如LogisticRegression。请注意,warm_start
这也可能会受到其他参数的影响,因此您也需要注意它们的值 - 例如,在 LogisticRegression 的情况下,如果您使用求解器(这是默认设置)warm_start
将不起作用。liblinear
我想说这取决于您使用的 ML 框架。我曾在 Scikit 和 Tensorflow 上工作过。
两者都以不同的方式工作。
科学:
Tensorflow:考虑一个基本的 TF 代码,如下所述:
import numpy as np
import tensorflow as tf
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler
housing = fetch_california_housing()
m, n = housing.data.shape
target = housing.target.reshape(-1,1)
scaler = StandardScaler()
scaled_housing_data = scaler.fit_transform(housing.data)
housing_data_plus_bias = np.c_[np.ones((m, 1)), scaled_housing_data]
n_epochs = 1000
learning_rate = 0.01
X = tf.placeholder(shape = (None, n+1), dtype=tf.float32, name="X")
y = tf.placeholder(shape=(None,1), dtype=tf.float32, name="y")
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0, seed=42), name="theta")
y_pred = tf.matmul(X, theta, name="predictions")
error = y_pred - y
mse = tf.reduce_mean(tf.square(error), name="mse")
gradients = 2/m * tf.matmul(tf.transpose(X), error)
training_op = tf.assign(theta, theta - learning_rate * gradients)
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
for epoch in range(n_epochs):
fn,wights, loss, pred, op = sess.run((error, theta, mse, y_pred,training_op), feed_dict={X:housing_data_plus_bias, y:target})
print(loss)
best_theta = theta.eval()
print(best_theta)
考虑我已经训练并部署了这个模型(作为 tf.saver() 对象)。现在,如果我想预测新值,我必须为我的模型提供新的X 值并识别“y_pred”。. 此过程不会更新我的theta(权重)值(张量图,仅评估其依赖张量),并且预测模型将使用现有的theta。如果我想使用新样本更新theta,我必须评估training_op。
通过这种方式,我们可以在以后使用新数据改进 TF 模型。
注意:training_op,依赖于theta和gradient。
我还不能发表评论。如果您只是加载模型并使用 fit 方法,它将更新权重,而不是重新实例化所有权重。它只会使用新数据执行一些您可以选择的权重更新。