2016-11-30 4 views
0

TensorFlowにjavacpp-presetsを使用して、JavaでTensorFlowトレーニングを実行しようとしています。私は以下のようにtf.train.write_graph(sess.graph_def, '.', 'example.pb', as_text=False)を使用して.pbファイルを生成しました。インポートを実行するTensorFlowグラフが初期化されていない変数で失敗する

import tensorflow as tf 
import numpy as np 

x_data = np.random.rand(100).astype(np.float32) 
y_data = x_data * 0.1 + 0.3 
Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name='Weights') 
biases = tf.Variable(tf.zeros([1]), name='biases') 
y = Weights * x_data + biases 
loss = tf.reduce_mean(tf.square(y - y_data)) #compute the loss 
optimizer = tf.train.GradientDescentOptimizer(0.5) 
train = optimizer.minimize(loss, name='train') 
init = tf.global_variables_initializer() 

with tf.Session() as sess: 
    print(sess.run(Weights), sess.run(biases)) 
    tf.train.write_graph(sess.graph_def, '.', 'example.pb', as_text=False) 

は、私が得た:スレッドで

例外 "メイン" のjava.lang.Exception:

:私は実行する初期化されていない値の重み」

を使用しようとすると、

tensorflow.Status s = session.Run(new StringTensorPairVector(new String[] {}, new Tensor[] {}), new tensorflow.StringVector(), new tensorflow.StringVector("train"), outputs); 

グラフをロードした後、tensorflow.ReadBinaryProto(Env.Default(), "./example.pb", def);

init = tf.global_variables_initializer()と同じ作業を行うjavacpp-presets apiはありますか?
またはすべてのC++ TensorFlow APIを使用してすべての変数を初期化できますか?あなたのPythonプログラムで

答えて

1

inittf.global_variables_initializer()の結果は)sess.run()に渡され、tf.Operationです。 Pythonグラフを作成するときにinit.nameという値を取得する場合は、トレーニングステップを実行する前に、その名前をJavaプログラムのsession.Run()に渡すことができます。

私はjavacpp-presetsためのAPIがどのように見えるかを100%わからないんだけど、私はあなたにこれを行うことができるだろうと思う:value_of_init_dot_nameはあなたが得られinit.nameの値が

tensorflow.Status s = session.Run(
    new StringTensorPairVector(new String[] {}, new Tensor[] {}), 
    new tensorflow.StringVector(), 
    new tensorflow.StringVector(value_of_init_dot_name), 
    outputs); 

を... Pythonプログラムから。

+0

ありがとうございました!私はあなたの答えとしてこれを固定しました。 – linfeng

関連する問題