0

TensorFlow を使用して Java で TensorFlow トレーニングを実行しようとしていますjavacpp-presets。以下を使用して .pb ファイルを生成しましたtf.train.write_graph(sess.graph_def, '.', 'example.pb', as_text=False)

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);

javacpp-presetsと同じ作業を行う APIはありますinit = tf.global_variables_initializer()か?
または、すべての変数を初期化するために使用できる C++ TensorFlow API はありますか?

4

1 に答える 1

1

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

API がどのように見えるかは 100% わかりませんjavacpp-presetsが、次のようにできると思います。

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

...ここでPython プログラムから取得しvalue_of_init_dot_nameた値です。init.name

于 2016-12-05T22:28:05.057 に答える