2017-01-07 5 views
0

私はy = b0 + b1 * xの(x、y)ペアを入力して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) 

私の考えでは、彼らとモデルINIT、それまでの訓練を受けた係数を覚えて、その後もう一度データの新しい部分とトレーニングを繰り返すことです。各入力に対して繰り返します。これは正しい方法ですか?モデルはおそらくより複雑なものに後で昇格されるでしょう。

答えて

2

あなたはオンライントレーニングについて話しているように聞こえます。あなたは、中断したところから拾い上げて、新しいデータをフィードするだけでよいはずです。必要なのは、トレーニングセッションの間に変数を保存して読み込む方法です。 tf.Saverを使用して、これを「生の」テンソルフローで行うことができます。

tf.contrib.learn.Estimatorを使用してこれを行うこともできます。モデルを構築するmodel_fnとモデルを保存するmodel_dirを与えれば、それは残りの部分を処理します。もちろん、tf.contrib.learn.LinearEstimatorにはすでに線形モデルがあります。見積もりを使用すると、新しいデータがある場合にはフィット(...)を呼び出すだけで、変数がロードされ、定義したトレーニングステップが引き続き実行されます。

関連する問題