2017-09-29 8 views
0

モデルをテンソルフローで一度トレーニングしてから、いくつかの機能を予測するために訓練されたモデルを使用したいと考えています。我々は詳細に入る前に、機能のいくつかを定義することができます...ここで再トレーニングのないテンソルフロー計算

def runTF(func, inpDict): 
    sess = tf.Session() 
    init = tf.global_variables_initializer() 
    sess.run(init) 
    result = sess.run(func, feed_dict = inpDict) 
    sess.close() 
    return result 

def optTF(opt, res, others, inpDict, nSteps, printSteps=50): 

    os, re = [], [] 

    sess = tf.Session() 
    init = tf.global_variables_initializer() 
    sess.run(init) 

    for i in range(nSteps): 

     # First run the optimizer ... 
     sess.run(opt, feed_dict = inpDict) 

     # Save all the data you want to save 
     temp = sess.run([res] + others, feed_dict = inpDict) 
     re.append(temp[0]) 
     os.append(temp[1:]) 

     if (i%printSteps) == 0: 
      print('{:5d}'.format(i)) 

    sess.close() 

    return re, os 

は私がやっているものを...

A.ためのステップのカップルですいくつかのデータの生成

N  = 500 
features = 2 
nSteps = 1000 

X = np.array([np.random.random(N), np.random.random(N)]) 
data = [X.T, X[0].reshape(-1, 1)] 

B.は、単純な線形モデルを作成

d = tf.placeholder(shape = np.shape(data[0]), dtype = tf.float32, name='d') # input layer 
dOut = tf.placeholder(shape = np.shape(data[1]), dtype = tf.float32, name='dOut') # output layer 

W = tf.Variable( np.random.randn(features, 1), dtype = tf.float32, name='W') 
b = tf.Variable(    np.zeros((1,1)), dtype = tf.float32, name='b') 

result = tf.matmul(d, W)+b 
cost = tf.reduce_mean((dOut - result)**2) 

optimizer = tf.train.AdamOptimizer(learning_rate = 0.1).minimize(cost) 

C.は、私は結果をチェックして、ここでオプティマイザ

inpDict = {d: data[0], dOut:data[1]} 
ot = optTF(optimizer, result, [W, cost], inpDict, 200, 50) 

を実行し、それは私が欲しいものであることを確認できます。したがって、オプティマイザは正常に動作しています。モデルは最適化されています。さて、私はいくつかの他のデータで予測をしたいと思います。だから、私は...

r = runTF(result, inpDict) 

この新しい結果は、私は同じ訓練を受けたモデルから期待されるものではありません。

今、私が同じtf.Session()の中にいる限り、私たちは大丈夫です。しかし、私はセッションを終えても予測をしたいと思っています。だから私の質問は、私たちが別のセッションで1つのセッションでそれを訓練したらどのようにモデルを使用するのですか?

注:全体的なことは、私が別のセッションで行ったことですか?

編集:

ot = optTF(optimizer, result, [cost]+weights+biases, inpDict, 200, 50) 
r = runTF([result], inpDict, 'models/temp.ckpt') 

私は...節約を組み込むために

def runTF(func, inpDict, modelFile=None): 

    if modelFile is not None: 
     saver = tf.train.Saver() 

    sess = tf.Session() 

    init = tf.global_variables_initializer() 
    sess.run(init) 

    if modelFile is not None: 
     ckpt = tf.train.get_checkpoint_state(modelFile) 
     print(modelFile, ckpt) 
     if ckpt and ckpt.model_checkpoint_path: 
      saver.restore(sess, ckpt.model_checkpoint_path) 
      print('Session restored') 

    result = sess.run(func, feed_dict = inpDict) 
    sess.close() 
    return result 

def optTF(opt, res, others, inpDict, nSteps, printSteps=50, modelFile='models/temp.ckpt'): 

    os, re = [], [] 
    saver = tf.train.Saver() 

    sess = tf.Session() 
    init = tf.global_variables_initializer() 
    sess.run(init) 

    for i in range(nSteps): 

     # First run the optimizer ... 
     sess.run(opt, feed_dict = inpDict) 

     # Save all the data you want to save 
     temp = sess.run([res] + others, feed_dict = inpDict) 
     re.append(temp[0]) 
     os.append(temp[1:]) 

     if (i%printSteps) == 0: 
      print('{:5d}'.format(i)) 

    path = saver.save(sess, modelFile) 
    print('Model saved in: {}'.format(path)) 
    sess.close() 

    return re, os 

そして、モデルを実行している2つの機能を編集しました

まだ何もありません!

  • チェックポイント
  • temp.ckpt.index
  • temp.ckpt.data-:

    • ckptの値は、モデルフォルダには、次のファイルを持っているNone
    • です:私がいることを確認しました00000-of-00001
    • temp.ckpt.meta

答えて

0

作成およびトレーニングするセッションを保存して復元する必要があります。

init = tf.initialize_all_variables() 
saver = tf.train.Saver() 
with tf.Session() as sess: 
    sess.run(init) 
    if restore: 
     ckpt = tf.train.get_checkpoint_state(save_path) 
     if ckpt and ckpt.model_checkpoint_path: 
      saver.restore(sess, ckpt.model_checkpoint_path) 
    else: 
     # ... training code omitted ... 
     saver.save(sess, save_path) 

チェックアウトのようにもhttps://www.tensorflow.org/programmers_guide/saved_modelフルestimatorとモデルの代わりに、ただ一つのセッションを作成する場合。

+0

ありがとう@andresbravog。私はあなたが言及したように状態を保存しようとしました。私は自分の答えを編集しました。上記をご覧ください – ssm

関連する問題