簡體   English   中英

Java中的模型優化器張量流

[英]model optimizer tensorflow in Java

我正在嘗試在Java中創建TensorFlow模型而不使用Python。 我設法對Java執行了很多Python代碼,但是我缺少一些要完成的元素。 我阻止了優化器。 Python中的原始代碼是一個非常簡單的模型。

import tensorflow as tf

# Batch of input and target output (1x1 matrices)
x = tf.placeholder(tf.float32, shape=[None, 1, 1], name='input')
y = tf.placeholder(tf.float32, shape=[None, 1, 1], name='target')

# Trivial linear model
y_ = tf.identity(tf.layers.dense(x, 1), name='output')

# Optimize loss
loss = tf.reduce_mean(tf.square(y_ - y), name='loss')
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train_op = optimizer.minimize(loss, name='train')

init = tf.global_variables_initializer()

我開始了向Java的轉換,雖然還算是最后一步,但是我仍然停留在優化程序上。

try (Graph g = new Graph()) {
   //# Batch of input and target output (1x1 matrices)
   //x = tf.placeholder(tf.float32, shape=[None, 1, 1], name='input')
   Output<OperationBuilder> x = g.opBuilder("Placeholder", "input")
                .setAttr("dtype", DataType.FLOAT)
                .build().output(0);
   //y = tf.placeholder(tf.float32, shape=[None, 1, 1], name=target')
   Output<OperationBuilder> y = g.opBuilder("Placeholder", "target")
                .setAttr("dtype", DataType.FLOAT)
                .build().output(0);
   //# Trivial linear model
   //y_ = tf.identity(tf.layers.dense(x, 1), name='output')
   Tensor t = Tensor.create(new int[] {0});
   Output reductionIndices = g.opBuilder("Const", "layer")
                .setAttr("dtype", t.dataType()).setAttr("value", t)
                .build().output(0);
   Output dense = g.opBuilder("layersdense", "dense")
                .setAttr("T", DataType.FLOAT)
                .setAttr("Tidx", DataType.INT32)
                .addInput(input).addInput(reductionIndices)
                .build().output(0);

   Tensor<?> t2 = Tensor.create(dense);
   Output<OperationBuilder> y_ = g.opBuilder("Identity", "output")
                .setAttr("value", t2)
                .build().output(0);
   //# Optimize loss
   //loss = tf.reduce_mean(tf.square(y_ - y), name='loss')
   Output<OperationBuilder> sub=g.opBuilder("Sub","sub")
        .addInput(y_).addInput(y)
        .build().output(0);
   Output<OperationBuilder> sq = g.opBuilder("Square", "Square")
        .addInput(sub)
        .build().output(0);
   //optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
   Code java ???
   //train_op = optimizer.minimize(loss, name='train')
   Code java ???

}

在推斷輸出的某些后期處理過程中,我也遇到很多麻煩。 我建議的解決方案是導入整個圖.pb文件(包括優化器和損失函數的必要節點),該文件是使用python定義的,並在2個“ for”循環中運行s.runner,該循環將為您的批次提供數據並執行時代。 請注意,我還沒有嘗試過這種方法,但是根據我的經驗,避免使用Java特定的圖形生成器將對您有很大幫助。 祝您好運

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM