From ef0ce67a2e79628380729cf16fb0cd4d99cbe6a3 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 28 Jul 2020 16:26:34 -0400 Subject: [PATCH 01/55] Initial checkin of Keras Optimzers and helper classes. Fixed dependencies in pom.xml --- tensorflow-keras/pom.xml | 140 ++- .../java/org/tensorflow/keras/backend/K.java | 713 +++++++++++ .../keras/backend/tf/ConfusionMatrix.java | 193 +++ .../keras/backend/tf/ControlDependencies.java | 84 ++ .../org/tensorflow/keras/backend/tf/NN.java | 134 +++ .../keras/backend/tf/SparseTensor.java | 64 + .../tensorflow/keras/backend/tf/Tuple.java | 109 ++ .../keras/backend/tf/WeightsBroadcastOps.java | 158 +++ .../tensorflow/keras/optimizer/AdaDelta.java | 202 ++++ .../tensorflow/keras/optimizer/AdaGrad.java | 167 +++ .../tensorflow/keras/optimizer/AdaGradDA.java | 191 +++ .../org/tensorflow/keras/optimizer/Adam.java | 182 +++ .../tensorflow/keras/optimizer/Adamax.java | 283 +++++ .../org/tensorflow/keras/optimizer/Ftrl.java | 360 ++++++ .../org/tensorflow/keras/optimizer/Nadam.java | 402 +++++++ .../keras/optimizer/OptimizerInterface.java | 59 + .../keras/optimizer/Optimizers.java | 124 ++ .../tensorflow/keras/optimizer/RMSProp.java | 201 ++++ .../org/tensorflow/keras/optimizer/SGD.java | 199 +++ .../java/org/tensorflow/keras/utils/ND.java | 717 +++++++++++ .../keras/utils/PlaceholderStringFormat.java | 81 ++ .../tensorflow/keras/utils/PrintUtils.java | 152 +++ .../tensorflow/keras/utils/ProgressBar.java | 311 +++++ .../tensorflow/keras/utils/ShapeUtils.java | 110 ++ .../org/tensorflow/keras/utils/SmartCond.java | 107 ++ .../tensorflow/keras/utils/SymbolicShape.java | 92 ++ .../keras/utils/SymbolicShapeDict.java | 58 + .../org/tensorflow/keras/utils/TypeUtils.java | 98 ++ .../keras/optimizers/AdaDeltaTest.java | 226 ++++ .../keras/optimizers/AdaGradDATest.java | 126 ++ .../keras/optimizers/AdaGradTest.java | 170 +++ .../tensorflow/keras/optimizers/AdamTest.java | 263 ++++ .../keras/optimizers/AdamaxTest.java | 242 ++++ .../tensorflow/keras/optimizers/FtrlTest.java | 352 ++++++ .../keras/optimizers/NadamTest.java | 286 +++++ .../keras/optimizers/RMSPropTest.java | 307 +++++ .../tensorflow/keras/optimizers/SGDTest.java | 227 ++++ .../keras/utils/EagerTestSession.java | 747 ++++++++++++ .../keras/utils/GraphTestSession.java | 1066 +++++++++++++++++ .../tensorflow/keras/utils/SmartCondTest.java | 247 ++++ .../tensorflow/keras/utils/TestSession.java | 618 ++++++++++ .../tensorflow/keras/utils/TypeUtilTest.java | 234 ++++ 42 files changed, 10760 insertions(+), 42 deletions(-) create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adam.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adamax.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/RMSProp.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java create mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java create mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java diff --git a/tensorflow-keras/pom.xml b/tensorflow-keras/pom.xml index 4dd41d6a36b..c314b53bcc0 100644 --- a/tensorflow-keras/pom.xml +++ b/tensorflow-keras/pom.xml @@ -14,53 +14,109 @@ limitations under the License. ======================================================================= --> - + - 4.0.0 + 4.0.0 - - org.tensorflow - tensorflow-java - 0.2.0-SNAPSHOT - - tensorflow-keras - jar + + org.tensorflow + tensorflow-java + 0.2.0-SNAPSHOT + + tensorflow-keras + jar - TensorFlow Keras Library - Java implementation of the TensorFlow Keras API + TensorFlow Keras Library + + + + Java implementation of the TensorFlow Keras API - - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - + + + org.tensorflow + tensorflow-core-api + ${project.version} + + + org.tensorflow + tensorflow-core-generator + ${project.version} + + + org.tensorflow + tensorflow-framework + ${project.version} + + + org.tensorflow + ndarray + ${project.version} + + + + com.google.protobuf + protobuf-java + 3.11.4 + - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.22.2 - - 1 - false - -Xmx2G -XX:MaxPermSize=256m - false - - **/*Test.java - - - - - + + org.json + json + 20190722 + + + + org.apache.commons + commons-csv + 1.8 + + + + org.tensorflow + tensorflow-core-platform + ${project.version} + + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + + + org.tensorflow + tensorflow-core-platform${javacpp.platform.extension} + ${project.version} + test + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + 1 + false + -Xmx2G -XX:MaxPermSize=256m + false + + **/*Test.java + + + + + diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java new file mode 100644 index 00000000000..51a5fdaa5ff --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java @@ -0,0 +1,713 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.backend; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import org.tensorflow.DataType; +import org.tensorflow.EagerSession; +import org.tensorflow.ExecutionEnvironment; +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Session; +import org.tensorflow.Tensor; +import org.tensorflow.keras.backend.tf.ConfusionMatrix; +import org.tensorflow.keras.backend.tf.NN; +import org.tensorflow.keras.backend.tf.Tuple; +import org.tensorflow.ndarray.NdArraySequence; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.ReduceSum; +import org.tensorflow.op.core.Squeeze; +import org.tensorflow.op.core.Variable; +import org.tensorflow.op.math.Mean; +import org.tensorflow.op.nn.SoftmaxCrossEntropyWithLogits; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TUint8; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** Keras backend methods */ +public class K { + + public static final double Epsilon = 1e-7; + public static final float EpsilonF = 1e-7F; + + public static final double epsilon() { + return Epsilon; + } + + public static final Operand epsilonConstant(Ops tf) { + return tf.constant(Epsilon); + } + + public static final Operand epsilonConstant(Ops tf, DataType dtype) { + return tf.dtypes.cast(tf.constant(Epsilon), dtype); + } + + public static final Operand one(Ops tf) { + return tf.constant(1); + } + + public static final Operand one(Ops tf, DataType dtype) { + return tf.dtypes.cast(tf.constant(1), dtype); + } + + public static final Operand minusOne(Ops tf) { + return tf.constant(-1); + } + + public static final Operand minusOne(Ops tf, DataType dtype) { + return tf.dtypes.cast(tf.constant(-1), dtype); + } + + public static final Operand zero(Ops tf) { + return tf.constant(0); + } + + public static final Operand zero(Ops tf, DataType dtype) { + return tf.dtypes.cast(tf.constant(0), dtype); + } + + public static final Operand constant(Ops tf, double number, DataType dtype) { + return tf.dtypes.cast(tf.constant(number), dtype); + } + + public static Operand clip(Ops tf, Operand x, double minValue, double maxValue) { + assert x != null : "Operand x must not be null"; + DataType dtype = x.asOutput().dataType(); + if (maxValue < minValue) { + double tmp = maxValue; + maxValue = minValue; + minValue = tmp; + } + Operand minValueConstant = tf.dtypes.cast(tf.constant(minValue), dtype); + Operand maxValueConstant = tf.dtypes.cast(tf.constant(maxValue), dtype); + return tf.clipByValue(x, minValueConstant, maxValueConstant); + } + + public static Operand mean(Ops tf, Operand x) { + return mean(tf, x, null, false); + } + + public static Operand mean(Ops tf, Operand x, Operand axis) { + return mean(tf, x, axis, false); + } + + public static Operand mean(Ops tf, Operand x, boolean keepDims) { + return mean(tf, x, null, keepDims); + } + + public static Operand mean(Ops tf, Operand x, Operand axis, boolean keepDims) { + if (x.asOutput().dataType() == TBool.DTYPE) { + x = tf.dtypes.cast(x, TFloat32.DTYPE); + } + if (axis == null) { + axis = allAxis(tf, x); + } + return tf.math.mean(x, axis, Mean.keepDims(keepDims)); + } + + // alias for mean + public static Operand reduceMean(Ops tf, Operand x, Operand axis, boolean keepDims) { + return mean(tf, x, axis, keepDims); + } + + public static Operand maximum(Ops tf, Operand x, Operand y) { + y = tf.dtypes.cast(y, x.asOutput().dataType()); + return tf.math.maximum(x, y); + } + + public static Operand sqrt(Ops tf, Operand x) { + DataType dType = x.asOutput().dataType(); + Operand zero = tf.dtypes.cast(tf.constant(0), dType); + Operand inf = tf.dtypes.cast(tf.constant(Float.POSITIVE_INFINITY), dType); + x = tf.clipByValue(x, zero, inf); + return tf.math.sqrt(x); + } + + public static Shape merge(Shape a, Shape b) { + assert a.numDimensions() == b.numDimensions() + : String.format("Shapes %s and %s are incompatible", a, b); + long[] array = new long[a.numDimensions()]; + for (int i = 0; i < a.numDimensions(); i++) { + if (a.size(i) != Shape.UNKNOWN_SIZE) { + if (b.size(i) != Shape.UNKNOWN_SIZE) { + assert a.size(i) == b.size(i) : String.format("Shapes %s and %s are incompatible", a, b); + } + array[i] = a.size(i); + } else { + array[i] = b.size(i); + } + } + return Shape.of(array); + } + + // this is from nn in Python, I could not find it in the Java frameworks. + public static Operand sigmoidCrossEntropyWithLogits(Ops tf, Operand labels, Operand logits) { + Shape lablesShape = labels.asOutput().shape(); + Shape logitsShape = logits.asOutput().shape(); + Shape newShape = merge(lablesShape, logitsShape); + + Operand zeros = tf.dtypes.cast(tf.zerosLike(logits), logits.asOutput().dataType()); + Operand cond = tf.math.greaterEqual(logits, zeros); + + Operand relu_logits = tf.select(cond, logits, zeros); + Operand neg_abs_logits = tf.select(cond, tf.math.neg(logits), logits); + return tf.math.add( + tf.math.sub(relu_logits, tf.math.mul(logits, labels)), + tf.math.log1p(tf.math.exp(neg_abs_logits))); + } + + // TODO need to walk back identity until it hits something else + // not sure how to get the input nodes for the Operand. + private static Operand backtrackIdentity(Operand output) { + // while(!output.op().type().equals("Identity")) + // output = output.op().output(0); + return output; + } + + public static Operand binary_crossentropy( + Ops tf, Operand target, Operand output, boolean fromLogits) { + if (fromLogits) { + return sigmoidCrossEntropyWithLogits(tf, target, output); + } + + if (!(output instanceof Variable) && (!tf.scope().env().isEager())) { + // output = backtrackIdentity(output); // TODO - this does not work, goes infinite loop + if (output.op().type().equals("Sigmoid")) { + assert output.op().numOutputs() == 1; + output = output.op().output(0); + return sigmoidCrossEntropyWithLogits(tf, target, output); + } + } + DataType dtype = output.asOutput().dataType(); + Operand one = one(tf, dtype); + Operand epsilonConst = K.epsilonConstant(tf, dtype); + Operand oneMinusEpsilonConst = tf.math.sub(one, epsilonConst); + output = tf.clipByValue(output, epsilonConst, oneMinusEpsilonConst); + + // Compute cross entropy from probabilities. + Operand bce = tf.math.mul(target, tf.math.log(tf.math.add(output, epsilonConst))); + bce = + tf.math.add( + bce, + tf.math.mul( + tf.math.sub(one, target), + tf.math.log(tf.math.add(tf.math.sub(one, output), epsilonConst)))); + Operand result = tf.math.neg(bce); + return result; + } + + public static Operand categorical_crossentropy( + Ops tf, Operand target, Operand output, boolean fromLogits) { + return categorical_crossentropy(tf, target, output, fromLogits, -1); + } + + public static Operand categorical_crossentropy( + Ops tf, Operand target, Operand output, boolean fromLogits, int axis) { + + if (fromLogits) { + return softmax_cross_entropy_with_logits(tf, target, output); + } + if (!(output instanceof Variable) && (!tf.scope().env().isEager())) { + // TODO output = backtrackIdentity(output); doesn't seem to work with Java version. + if (output.op().type().equals("Softmax")) { + assert output.op().numOutputs() == 1; + output = output.op().output(0); + Operand op = softmax_cross_entropy_with_logits(tf, target, output); + return op; + } + } + DataType dtype = output.asOutput().dataType(); + Operand one = one(tf, dtype); + Operand epsilonConst = K.epsilonConstant(tf, dtype); + Operand oneMinusepsilonConst = tf.math.sub(one, epsilonConst); + output = + tf.math.div( + output, tf.reduceSum(output, tf.constant(axis), ReduceSum.keepDims(Boolean.TRUE))); + output = tf.clipByValue(output, epsilonConst, oneMinusepsilonConst); + + // Compute cross entropy from probabilities. + Operand cce = + tf.reduceSum( + tf.math.mul(target, tf.math.log(output)), + tf.constant(axis), + ReduceSum.keepDims(Boolean.FALSE)); + return tf.math.neg(cce); + } + + public static Operand flatten(Ops tf, Operand t) { + Shape shape = Shape.of(1L); + return tf.reshape(t, tf.constant(shape)); + } + + public static Operand sparse_categorical_crossentropy( + Ops tf, Operand target, Operand output, boolean fromLogits, int axis) { + DataType dType = output.asOutput().dataType(); + if (!(output instanceof Variable) && (!tf.scope().env().isEager())) { + // TODO output = backtrackIdentity(output); doesn't seem to work with Java version. + if (output.op().type().equals("Softmax")) { + // assert output.op().numOutputs() == 1; + // When softmax activation function is used for output operation, we + // use logits from the softmax function directly to compute loss in order + // to prevent collapsing zero when training. + // TODO assert len(output.op.inputs) == 1 + // TODO output = output.op.inputs[0] + fromLogits = true; + } + } + if (!fromLogits) { + Operand epsilonConst = epsilonConstant(tf, dType); + Operand one = one(tf, dType); + Operand oneMinusEpsilonConst = tf.math.sub(one, epsilonConst); + output = tf.clipByValue(output, epsilonConst, oneMinusEpsilonConst); + output = tf.math.log(output); + } + Shape outputShape = output.asOutput().shape(); + int outputRank = outputShape.numDimensions(); + axis %= outputRank; + if (axis < 0) { + axis += outputRank; + } + if (axis != outputRank - 1) { + int[] axisNew = moveAxisToEnd(axis, outputRank); + output = tf.linalg.transpose(output, tf.constant(axisNew)); + } + + target = tf.dtypes.cast(target, TInt64.DTYPE); + // TODO Try to adjust the shape so that rank of labels = rank of logits - 1. + outputShape = output.asOutput().shape(); + Shape targetShape = target.asOutput().shape(); + int targetRank = targetShape.numDimensions(); + + boolean updateShape = targetRank != outputRank - 1; + if (updateShape) { // TODO check to see if this is right + target = tf.reshape(target, tf.constant(-1L)); // flatten + output = + tf.reshape( + output, + tf.constant(new long[] {-1L, outputShape.size(outputShape.numDimensions() - 1)})); + } + + // call nn.nn.sparse_softmax_cross_entropy_with_logits_v2 + Operand loss = NN.sparse_softmax_cross_entropy_with_logits(tf, target, output); + if (updateShape && outputRank >= 3) { + long[] dims = outputShape.asArray(); + long[] newDims = new long[dims.length - 1]; + System.arraycopy(dims, 0, newDims, 0, newDims.length); + loss = tf.reshape(loss, tf.constant(newDims)); + } + return loss; + } + + private static int[] allAxis(Operand op) { + int rank = op.asOutput().shape().numDimensions(); + int[] ranks = new int[rank]; + for (int i = 0; i < rank; i++) { + ranks[i] = i; + } + return ranks; + } + + public static Operand allAxis(Ops tf, Operand op) { + int[] ranks = allAxis(op); + return tf.constant(ranks); + } + + // TODO shouldn't these be in tensorflow itself under nn? + private static Operand moveDimToEnd( + Ops tf, Operand tensor, int dim_index, Operand rank) { + Operand one = one(tf, TInt32.DTYPE); + List> concatList = + Arrays.asList( + tf.range(tf.constant(dim_index), one, one), + tf.range(tf.constant(dim_index + 1), rank, one)); + return tf.linalg.transpose( + tensor, + (Operand) tf.concat((Iterable>) concatList, (Operand) tf.constant(0))); + } + + private static Operand flattenOuterDims( + Ops tf, Operand logits) { + Operand zero = zero(tf, TInt64.DTYPE); + Operand one = one(tf, TInt64.DTYPE); + Operand minusOne = tf.constant(-1); + + // Shape logitsShape = logits.asOutput().shape(); + // long lastDimSize = logitsShape.size(logitsShape.numDimensions()-1); + // if(!tf.scope().env().isEager()) { + Shape shape = logits.asOutput().shape(); + int ndims = shape.numDimensions(); + if (!shape.hasUnknownDimension()) { + long product = 1L; + boolean productValid = true; + for (int i = ndims - 2; i >= 0; i--) { + long d = shape.size(i); + if (d == Shape.UNKNOWN_SIZE) { + productValid = false; + break; + } + product *= d; + } + if (productValid) { + Shape outputShape = Shape.of(product, shape.size(ndims - 1)); + return tf.reshape(logits, tf.constant(outputShape.asArray())); + } + } + // } + + Operand rank = tf.dtypes.cast(tf.rank(logits), TInt64.DTYPE); + Operand rankMinusOne = tf.math.sub(rank, one); + + Operand last_dim_size = tf.slice(tf.shape(logits), rankMinusOne, tf.constant(1)); + Operand concat = + tf.concat(Arrays.asList(tf.constant(new int[] {-1}), last_dim_size), tf.constant(0)); + return tf.reshape(zero, concat); + } + + private static int[] moveAxisToEnd(int axis, int outputRank) { + int[] axisNew = new int[outputRank]; + for (int i = 0; i < axis; i++) { + axisNew[i] = i; + } + for (int i = axis + 1; i < outputRank; i++) { + axisNew[i - 1] = i; + } + axisNew[outputRank - 1] = axis; + return axisNew; + } + + // TODO, maybe part of Shape ?? + private static boolean shapeIsCompatible(Shape a, Shape b) { + if (a.numDimensions() != b.numDimensions()) { + return false; + } + for (int i = 0; i < a.numDimensions(); i++) { + long aSize = a.size(i); + long bSize = b.size(i); + if (aSize != Shape.UNKNOWN_SIZE && bSize != Shape.UNKNOWN_SIZE && aSize != bSize) { + return false; + } + } + return true; + } + + // TODO these are "nn" ops + public static Operand softmax_cross_entropy_with_logits(Ops tf, Operand labels, Operand logits) { + return softmax_cross_entropy_with_logits(tf, labels, logits, -1); + } + + public static Operand softmax_cross_entropy_with_logits( + Ops tf, Operand labels, Operand logits, int axis) { + axis = axis % logits.asOutput().shape().numDimensions(); + if (axis < 0) { + axis += logits.asOutput().shape().numDimensions(); + } + + Operand minusOne = tf.constant(-1); + Operand precise_logits = logits; + Operand one = tf.constant(1L); + + boolean convertToFloat32 = + logits.asOutput().dataType() == TFloat16.DTYPE + || logits.asOutput().dataType() == TBfloat16.DTYPE; + if (convertToFloat32) { + precise_logits = tf.dtypes.cast(logits, TFloat32.DTYPE); + } + DataType dtype = precise_logits.asOutput().dataType(); + labels = tf.dtypes.cast(labels, dtype); + Operand inputRank = tf.dtypes.cast(tf.rank(precise_logits), TInt64.DTYPE); + Operand inputRankMinusOne = tf.dtypes.cast(tf.math.sub(inputRank, one), TInt64.DTYPE); + Shape shape = logits.asOutput().shape(); + + // Move the dim to the end if dim is not the last dimension. + if (axis != -1 && axis != precise_logits.asOutput().shape().numDimensions() - 1) { + precise_logits = moveDimToEnd(tf, precise_logits, axis, inputRank); + labels = moveDimToEnd(tf, labels, axis, inputRank); + } + + Shape inputShape = precise_logits.asOutput().shape(); + precise_logits = flattenOuterDims(tf, precise_logits); + labels = flattenOuterDims(tf, labels); + SoftmaxCrossEntropyWithLogits smax = + tf.nn.softmaxCrossEntropyWithLogits(precise_logits, labels); + Operand cost = smax.loss(); + Operand outputShape = + tf.slice( + tf.constant(inputShape.asArray()), + tf.constant(new long[] {0}), + tf.constant(new long[] {inputShape.numDimensions() - 1})); + cost = tf.reshape(cost, outputShape); + if (tf.scope().env().isGraph() && !shape.hasUnknownDimension()) { + long[] array = shape.asArray(); + long[] newArray = new long[array.length - 1]; + if (axis < 0) { + axis = shape.numDimensions() + axis; + } + for (int i = 0; i < axis; i++) { + newArray[i] = shape.size(i); + } + for (int i = axis + 1; i < shape.numDimensions(); i++) { + newArray[i - 1] = shape.size(i); + } + Shape newShape = Shape.of(newArray); + cost = tf.reshape(cost, tf.constant(newShape.asArray())); + } + + if (convertToFloat32) { + cost = tf.dtypes.cast(cost, logits.asOutput().dataType()); + } + return cost; + } + + public static Operand map( + Operand input, Function, Operand> mapFunc) { + return null; + } + + public static long[] concatenate(long first, long... remaining) { + long[] dims = new long[remaining.length + 1]; + System.arraycopy(remaining, 0, dims, 1, remaining.length); + dims[0] = first; + return dims; + } + + private static Map> uidMap = new HashMap<>(); + + /** + * Associates a string prefix with an integer counter in a TensorFlow graph. + * + *

Example: + * + *

+   * get_uid('dense')
+   * 1
+   * get_uid('dense')
+   * 2
+   * 
+ * + * @param tf the TensorFlow Ops + * @param prefix String prefix to index. + * @return Unique integer ID. + */ + public static int getUid(Ops tf, String prefix) { + ExecutionEnvironment env = tf.scope().env(); + Map uids = uidMap.get(env); + if (uids == null) { + uids = new HashMap<>(); + uidMap.put(env, uids); + } + Integer id = uids.get(prefix); + if (id == null) { + id = 0; + } else { + id++; + } + + uids.put(prefix, id); + return id; + } + + /** + * returns the larger DataType between the two. + * + * @param a the first DataType to compare + * @param b the second DataType to compare + * @return the wider DataType + */ + public DataType wider(DataType a, DataType b) { + return a.byteSize() < b.byteSize() ? b : a; + } + + /** + * returns the smaller DataType between the two. + * + * @param a the first DataType to compare + * @param b the second DataType to compare + * @return the smaller DataType + */ + public DataType narrower(DataType a, DataType b) { + return a.byteSize() > b.byteSize() ? b : a; + } + + public NdArraySequence getTensorValue(Ops tf, Operand operand) { + DataType dtype = operand.asOutput().dataType(); + if (tf.scope().env().isGraph()) { + try (Session session = new Session((Graph) tf.scope().env())) { + if (dtype.equals(TInt32.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TInt32.DTYPE)) { + return result.data().scalars(); + } + } else if (dtype.equals(TInt64.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TInt64.DTYPE)) { + return result.data().scalars(); + } + } else if (dtype.equals(TUint8.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TUint8.DTYPE)) { + return result.data().scalars(); + } + } else if (dtype.equals(TBfloat16.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TBfloat16.DTYPE)) { + return result.data().scalars(); + } + } else if (dtype.equals(TFloat16.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TFloat16.DTYPE)) { + return result.data().scalars(); + } + } else if (dtype.equals(TFloat32.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TFloat32.DTYPE)) { + return result.data().scalars(); + } + } else if (dtype.equals(TFloat64.DTYPE)) { + try (Tensor result = + session.runner().fetch(operand).run().get(0).expect(TFloat64.DTYPE)) { + return result.data().scalars(); + } + } else { + return null; + } + } + } else { + try (EagerSession session = EagerSession.create()) { + if (dtype.equals(TInt32.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else if (dtype.equals(TInt64.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else if (dtype.equals(TUint8.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else if (dtype.equals(TBfloat16.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else if (dtype.equals(TFloat16.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else if (dtype.equals(TFloat32.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else if (dtype.equals(TFloat64.DTYPE)) { + return ((Operand) operand).data().scalars(); + } else { + return null; + } + } + } + } + + /** + * Squeeze or expand last dimension if needed. 1. Squeezes last dim of `y_pred` or `y_true` if + * their rank differs by 1 (using `confusion_matrix.remove_squeezable_dimensions`). 2. Squeezes or + * expands last dim of `sample_weight` if its rank differs by 1 from the new rank of `y_pred`. If + * `sample_weight` is scalar, it is kept scalar. + * + * @param tf the TensorVlow Ops + * @param yPred Predicted values, a `Tensor` of arbitrary dimensions. + * @param yTrue Optional label `Tensor` whose dimensions match `y_pred`. + * @return Tuple of `y_pred`, `y_true` and `sample_weight`. Each of them possibly has the last + * dimension squeezed, `sample_weight` could be extended by one dimension. If `sample_weight` + * is null, (y_pred, y_true) is returned. + */ + public static Tuple squeezeOrExpandDimensions(Ops tf, Operand yTrue, Operand yPred) { + return squeezeOrExpandDimensions(tf, yTrue, yPred, null); + } + + /** + * Squeeze or expand last dimension if needed. 1. Squeezes last dim of `y_pred` or `y_true` if + * their rank differs by 1 (using `confusion_matrix.remove_squeezable_dimensions`). 2. Squeezes or + * expands last dim of `sample_weight` if its rank differs by 1 from the new rank of `y_pred`. If + * `sample_weight` is scalar, it is kept scalar. + * + * @param tf the TensorVlow Ops + * @param yPred Predicted values, a `Tensor` of arbitrary dimensions. + * @param yTrue Optional label `Tensor` whose dimensions match `y_pred`. + * @param sampleWeight Optional weight scalar or `Tensor` whose dimensions match `y_pred`. + * @return Tuple of `y_pred`, `y_true` and `sample_weight`. Each of them possibly has the last + * dimension squeezed, `sample_weight` could be extended by one dimension. If `sample_weight` + * is null, (y_pred, y_true) is returned. + */ + public static Tuple squeezeOrExpandDimensions( + Ops tf, Operand yTrue, Operand yPred, Operand sampleWeight) { + Tuple tuple = new Tuple(yTrue, yPred); + Shape ypredShape = yPred.asOutput().shape(); + long ypredRank = ypredShape.numDimensions(); + + if (yTrue != null) { + Shape ytrueShape = yTrue.asOutput().shape(); + long ytrueRank = ytrueShape.numDimensions(); + if (ytrueRank != Shape.UNKNOWN_SIZE && ypredRank != Shape.UNKNOWN_SIZE) { + // Use static rank for `y_true` and `y_pred`. + if (ypredRank - ytrueRank != 1 || ypredShape.size(-1) == 1) { + // y_true, y_pred = confusion_matrix.remove_squeezable_dimensions(y_true, y_pred) + tuple = ConfusionMatrix.removeSqueezableDimensions(tf, yTrue, yPred); + } + } else { // use dynamic rank + tuple = ConfusionMatrix.removeSqueezableDimensions(tf, yTrue, yPred); + } + } + if (sampleWeight == null) { + return tuple; + } + Shape weightsShape = sampleWeight.asOutput().shape(); + long weightsRank = weightsShape.numDimensions(); + if (weightsRank == 0) { // scalar + return new Tuple(yTrue, yPred, sampleWeight); + } + + if (ypredRank != Shape.UNKNOWN_SIZE && weightsRank != Shape.UNKNOWN_SIZE) { + + if (weightsRank - ypredRank == 1) { + sampleWeight = tf.squeeze(sampleWeight); + } else if (ypredRank - weightsRank == 1) { + sampleWeight = tf.expandDims(sampleWeight, tf.constant(-1L)); + } + return new Tuple(yTrue, yPred, sampleWeight); + } + // Use dynamic rank. + Operand weightsRankTensor = tf.rank(sampleWeight); + Operand rankDiff = tf.math.sub(weightsRankTensor, tf.rank(yPred)); + sampleWeight = + tf.select( + tf.math.equal(weightsRankTensor, tf.constant(0)), + sampleWeight, + maybeAdjustWeights(tf, sampleWeight, rankDiff)); + return new Tuple(yTrue, yPred, sampleWeight); + } + + private static Operand maybeAdjustWeights(Ops tf, Operand sampleWeight, Operand rankDiff) { + return tf.select( + tf.math.equal(rankDiff, tf.constant(1)), + tf.squeeze(sampleWeight, Squeeze.axis(Arrays.asList(-1L))), + maybeExpandWeights(tf, sampleWeight, rankDiff)); + } + + private static Operand maybeExpandWeights(Ops tf, Operand sampleWeight, Operand rankDiff) { + return tf.select( + tf.math.equal(rankDiff, tf.constant(-1)), + tf.expandDims(sampleWeight, tf.constant(-1)), + sampleWeight); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java new file mode 100644 index 00000000000..2860adb9d8b --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java @@ -0,0 +1,193 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.backend.tf; + +import org.tensorflow.keras.backend.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.keras.utils.ShapeUtils; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Squeeze; +import org.tensorflow.op.core.Stack; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** ConfusionMatrix operations */ +public class ConfusionMatrix { + + /** + * Squeeze last dim if ranks differ from expected by exactly 1. + * + * @param tf the TensorFlowOps + * @param labels Label values, a `Tensor` whose dimensions match `predictions`. + * @param predictions Predicted values, a `Tensor` of arbitrary dimensions. + * @return `labels` and `predictions`, possibly with last dim squeezed. + */ + public static Tuple removeSqueezableDimensions(Ops tf, Operand labels, Operand predictions) { + return removeSqueezableDimensions(tf, labels, predictions, 0); + } + + /** + * Squeeze last dim if ranks differ from expected by exactly 1. + * + * @param tf the TensorFlowOps + * @param labels Label values, a `Tensor` whose dimensions match `predictions`. + * @param predictions Predicted values, a `Tensor` of arbitrary dimensions. + * @param expectedRankDiff Expected result of `rank(predictions) - rank(labels)`. + * @return `labels` and `predictions`, possibly with last dim squeezed. + */ + public static Tuple removeSqueezableDimensions( + Ops tf, Operand labels, Operand predictions, int expectedRankDiff) { + + tf = tf.withSubScope("removeSqueezableDimensions"); + Shape predictionsShape = predictions.asOutput().shape(); + int predictionsRank = predictionsShape.numDimensions(); + Shape labelsShape = labels.asOutput().shape(); + int labelsRank = labelsShape.numDimensions(); + + if (predictionsRank != Shape.UNKNOWN_SIZE && labelsRank != Shape.UNKNOWN_SIZE) { + // Use static rank. + int rankDiff = predictionsRank - labelsRank; + if (rankDiff == expectedRankDiff + 1 + && ShapeUtils.isCompatible(predictionsShape.size(-1), 1)) { + predictions = tf.squeeze(predictions); + } else if (rankDiff == expectedRankDiff - 1 + && ShapeUtils.isCompatible(labelsShape.size(-1), 1)) { + labels = tf.squeeze(labels); + } + return new Tuple(labels, predictions); + } + // Use dynamic rank. + Operand rankDiff = tf.math.sub(tf.rank(predictions), tf.rank(labels)); + if (predictionsRank == Shape.UNKNOWN_SIZE + && ShapeUtils.isCompatible(predictionsShape.size(-1), 1)) { + /** + * TODO, if we ever get a select that does lazy evaluation, but for now do the tf.squeeze + * predictions = tf.select( tf.math.equal(tf.constant(expectedRankDiff+1),rankDiff ), + * tf.squeeze(predictions, Squeeze.axis(Arrays.asList(-1L))), predictions ); * + */ + predictions = tf.squeeze(predictions, Squeeze.axis(Arrays.asList(-1L))); + } + if (labelsRank == Shape.UNKNOWN_SIZE && ShapeUtils.isCompatible(labelsShape.size(-1), 1)) { + /** + * TODO, if we ever get a select that does lazy evaluation labels = tf.select( + * tf.math.equal(tf.constant(expectedRankDiff+1),rankDiff ), tf.squeeze(labels, + * Squeeze.axis(Arrays.asList(-1L))), predictions ); * + */ + labels = tf.squeeze(labels, Squeeze.axis(Arrays.asList(-1L))); + } + return new Tuple(labels, predictions); + } + + /** + * Computes the confusion matrix from predictions and labels. + * + * @param tf the TensorFlow Ops + * @param labels 1-D `Tensor` of real labels for the classification task. + * @param predictions 1-D `Tensor` of predictions for a given classification. + * @param numClasses The possible number of labels the classification task can have. + * @param weights optional weights to be applied to the confusion matris + * @param dtype Data type of the confusion matrix. + * @param the type of Operands + * @param the data type. + * @return A `Tensor` of type `dtype` with shape `[n, n]` representing the confusion matrix, where + * `n` is the number of possible labels in the classification task. + * @throws IllegalArgumentException If both predictions and labels are not 1-D vectors and have + * mismatched shapes, or if `weights` is not `None` and its shape doesn't match `predictions`. + */ + public static Operand confusionMatrix( + Ops tf, + Operand labels, + Operand predictions, + Operand numClasses, + Operand weights, + DataType dtype) { + tf = tf.withSubScope("confusion_matrix"); + Tuple ops = K.squeezeOrExpandDimensions(tf, predictions, labels, null); + predictions = tf.dtypes.cast(ops.getPredictions(), TInt64.DTYPE); + labels = tf.dtypes.cast(ops.getLabels(), TInt64.DTYPE); + + List labelControls = new ArrayList<>(); + List predictionControls = new ArrayList<>(); + + labelControls.add( + tf.assertThat( + tf.reduceAny( + tf.math.greaterEqual((Operand) labels, tf.constant(0L)), + K.allAxis(tf, labels)), + Arrays.asList(tf.constant("`labels` contains negative values")))); + + predictionControls.add( + tf.assertThat( + tf.reduceAny( + tf.math.greaterEqual((Operand) predictions, tf.constant(0L)), + K.allAxis(tf, labels)), + Arrays.asList(tf.constant("`predictions` contains negative values")))); + if (numClasses == null) { + numClasses = + tf.math.maximum( + tf.reduceMax(predictions, K.allAxis(tf, predictions)), + tf.reduceMax(labels, K.allAxis(tf, labels))); + } else { + labelControls.add( + tf.assertThat( + tf.reduceAny( + tf.math.less((Operand) labels, numClasses), K.allAxis(tf, labels)), + Arrays.asList(tf.constant("``labels` out of bound")))); + predictionControls.add( + tf.assertThat( + tf.reduceAny( + tf.math.less((Operand) predictions, numClasses), + K.allAxis(tf, predictions)), + Arrays.asList(tf.constant("``predictions` out of bound")))); + } + + if (weights != null) { + if (!ShapeUtils.isCompatibleWith( + predictions.asOutput().shape(), weights.asOutput().shape())) { + throw new IllegalArgumentException( + String.format( + "Prediction shape %s is not compatible with weights shaope %s", + predictions.asOutput().shape(), weights.asOutput().shape())); + } + } + final Operand labelsFinal = labels; + labels = + ControlDependencies.addControlDependencies( + tf, tfc -> tfc.identity(labelsFinal), "confusionMatrix", labelControls); + final Operand predictionsFinal = predictions; + predictions = + ControlDependencies.addControlDependencies( + tf, tfc -> tfc.identity(predictionsFinal), "confusionMatrix", labelControls); + + Operand shape = tf.stack(Arrays.asList(numClasses, numClasses)); + Operand indices = tf.stack(Arrays.asList(labels, predictions), Stack.axis(1L)); + Operand values = + weights == null + ? tf.dtypes.cast(tf.onesLike(predictions), dtype) + : tf.dtypes.cast(weights, dtype); + SparseTensor cmSparse = new SparseTensor(indices, values, shape); + Operand zeroMatrix = tf.zeros(shape, dtype); + + return tf.sparse.sparseTensorDenseAdd( + cmSparse.getIndices(), cmSparse.getValues(), cmSparse.getDenseShape(), zeroMatrix); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java new file mode 100644 index 00000000000..5b323a79ea9 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java @@ -0,0 +1,84 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.backend.tf; + +import org.tensorflow.keras.backend.*; +import java.util.Arrays; +import java.util.List; +import java.util.function.Function; +import org.tensorflow.Operand; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TType; + +/** Container for ControlDepencies, so that the primary Operand is remembered. */ +public class ControlDependencies { + + /** + * Create a control dependency for the operand; + * + * @param tf the TensorFlow Ops + * @param createOperand a function that creates an operand with the control dependency context + * @param name the scope name to use + * @param dependencies a list of control ops. + * @param the type of Operand + * @return the Operand with control dependency scope + */ + public static Operand addControlDependencies( + Ops tf, Function> createOperand, String name, Op... dependencies) { + return addControlDependencies(tf, createOperand, name, Arrays.asList(dependencies)); + } + + /** + * Create a control dependency for an operand. + * + * @param tf the TensorFlow Ops + * @param createOperand function that creates an operand with the control dependency context + * @param name the scope name to use + * @param dependencies a list of control ops. + * @param the type of Operand + * @return the Operand with control dependency scope + */ + public static Operand addControlDependencies( + Ops tf, Function> createOperand, String name, List dependencies) { + tf = tf.withSubScope(name).withControlDependencies(dependencies); + return createOperand.apply(tf); + } + + /** + * Create a control dependency as a NoOp + * + * @param tf the TensorFlow Ops + * @param name the scope name to use + * @param dependencies a list of control ops. + * @return NoOp with control dependency scope + */ + public static Op addControlDependencies(Ops tf, String name, Op... dependencies) { + return addControlDependencies(tf, name, Arrays.asList(dependencies)); + } + + /** + * Create a control dependency as a NoOp + * + * @param tf the TensorFlow Ops + * @param name the scope name to use + * @param dependencies a list of control ops. + * @return NoOp with control dependency scope + */ + public static Op addControlDependencies(Ops tf, String name, List dependencies) { + tf = tf.withSubScope(name).withControlDependencies(dependencies); + return tf.noOp(); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java new file mode 100644 index 00000000000..e49fed5ba95 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java @@ -0,0 +1,134 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.backend.tf; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.tensorflow.Operand; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; + +/** NN Operations */ +public class NN { + + /** + * Computes sparse softmax cross entropy between `logits` and `labels`. + * + * @param tf + * @param labels `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of `labels` and + * result) and dtype `int32` or `int64`. Each entry in `labels` must be an index in `[0, + * num_classes)`. Other values will raise an exception when this op is run on CPU, and return + * `NaN` for corresponding loss and gradient rows on GPU. + * @param logits Per-label activations (typically a linear output) of shape `[d_0, d_1, ..., + * d_{r-1}, num_classes]` and dtype `float16`, `float32`, or `float64`. These activation + * energies are interpreted as unnormalized log probabilities. + * @return A `Tensor` of the same shape as `labels` and of the same type as `logits` with the + * softmax cross entropy loss. + */ + public static Operand sparse_softmax_cross_entropy_with_logits( + Ops tf, Operand labels, Operand logits) { + // assert shapeIsCompatible(labels.asOutput().shape(), logits.asOutput().shape()): + // String.format("Shapes %s and %s are incompatible", + // labels.asOutput().shape(), logits.asOutput().shape()); + tf = tf.withSubScope("SparseSoftmaxCrossEntropyWithLogits"); + Operand precise_logits = logits; + boolean convertToFloat32 = + logits.asOutput().dataType() == TFloat16.DTYPE + || logits.asOutput().dataType() == TBfloat16.DTYPE; + if (convertToFloat32) { + precise_logits = tf.dtypes.cast(logits, TFloat32.DTYPE); + } + Shape labelsStaticShape = labels.asOutput().shape(); + org.tensorflow.op.core.Shape labelsShape = tf.shape(labels); + Shape logitsShape = logits.asOutput().shape(); + Operand labels_shape = tf.shape(labels); + Shape logitsShortened = logitsShape.take(logitsShape.numDimensions() - 1); + + boolean staticShapesFullyDefined = + !labelsStaticShape.hasUnknownDimension() && !logitsShortened.hasUnknownDimension(); + if (logitsShape.numDimensions() == 0) { + throw new IllegalArgumentException( + String.format("Logits cannot be scalars - received shape %s.", logitsShape)); + } + if (!logitsShape.hasUnknownDimension() + && !labelsStaticShape.hasUnknownDimension() + && labelsStaticShape.numDimensions() != logitsShape.numDimensions() - 1) { + throw new IllegalArgumentException( + String.format( + "Rank mismatch: Rank of labels (received %s) should equal rank of logits minus 1 (received %s).", + labelsStaticShape.toString(), logitsShape.toString())); + } + + if (staticShapesFullyDefined && !labelsStaticShape.equals(logitsShortened)) { + throw new IllegalArgumentException( + String.format( + "Shape mismatch: The shape of labels (received %s) " + + "should equal the shape of logits except for the last " + + "dimension (received %s).", + labelsStaticShape.toString(), logitsShape.toString())); + } + // Check if no reshapes are required. + if (logitsShape.numDimensions() == 2) { + SparseSoftmaxCrossEntropyWithLogits smax = + tf.nn.sparseSoftmaxCrossEntropyWithLogits(precise_logits, labels); + Operand loss = smax.loss(); + if (logits.asOutput().dataType() == TFloat16.DTYPE) { + loss = tf.dtypes.cast(loss, TFloat16.DTYPE); + } + return loss; + } + + List shapeChecks = new ArrayList<>(); + + if (!staticShapesFullyDefined) { + shapeChecks.add( + tf.assertThat( + tf.math.equal(tf.shape(labels), tf.shape.take(tf.shape(logits), tf.constant(-1))), + Arrays.asList( + tf.constant( + "Shape mismatch: The shape of labels " + + "should equal the shape of logits except for the last " + + "dimension ")))); + } + + // Reshape logits to 2 dim, labels to 1 dim. + long numClassses = logitsShape.size(logitsShape.numDimensions() - 1); + + precise_logits = tf.reshape(precise_logits, tf.constant(new long[] {-1, numClassses})); + labels = tf.reshape(labels, tf.constant(-1)); + SparseSoftmaxCrossEntropyWithLogits smax = + tf.nn.sparseSoftmaxCrossEntropyWithLogits(precise_logits, labels); + + return ControlDependencies.addControlDependencies( + tf, + tfc -> { + Operand cost = smax.loss(); + + cost = tfc.reshape(cost, labels_shape); + if (logits.asOutput().dataType() == TFloat16.DTYPE) { + cost = tfc.dtypes.cast(cost, TFloat16.DTYPE); + } + return cost; + }, + "sparse_softmax_cross_entropy_with_logits", + shapeChecks); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java new file mode 100644 index 00000000000..45d9ec5b071 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java @@ -0,0 +1,64 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.backend.tf; + +import org.tensorflow.Operand; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** + * Represents a sparse tensor. + * + * @param the type of the SparseTensor + */ +public class SparseTensor { + + private final Operand indices; + private final Operand values; + private final Operand denseShape; + + /** + * Create a SparseTensor + * + * @param indices A 2-D int64 tensor of shape `[N, ndims]`, which specifies the indices of the + * elements in the sparse tensor that contain nonzero values + * @param values A 1-D tensor of any type and shape `[N]`, which supplies the values for each + * element in `indices`. + * @param denseShape A 1-D int64 tensor of shape `[ndims]`, which specifies the dense_shape of the + * sparse tensor + * @throws IllegalArgumentException When building an eager SparseTensor if `dense_shape` is + * unknown or contains unknown elements (None or -1). + */ + public SparseTensor(Operand indices, Operand values, Operand denseShape) { + this.indices = indices; + this.values = values; + this.denseShape = denseShape; + } + + /** @return the indices */ + public Operand getIndices() { + return indices; + } + + /** @return the values */ + public Operand getValues() { + return values; + } + + /** @return the denseShape */ + public Operand getDenseShape() { + return denseShape; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java new file mode 100644 index 00000000000..9f2f11285b4 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java @@ -0,0 +1,109 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.backend.tf; + +import org.tensorflow.Operand; +import org.tensorflow.types.family.TType; + +/** + * Returns labels, losses or predictions and sample weights as a Tuple + * + * @param the type of Operand + */ +public class Tuple { + + private final Operand labels; + private final Operand lossesOrPredictions; + private final Operand sampleWeights; + + /** + * Creates a Tuple of Operands for labels, predictions, and sampleWeights + * + * @param labels the labels + * @param lossesOrPredictions the losses or predictions + */ + public Tuple(Operand labels, Operand lossesOrPredictions) { + this(labels, lossesOrPredictions, null); + } + + /** + * Creates a Tuple of Operands for labels, predictions, and sampleWeights + * + * @param labels the labels + * @param lossesOrPredictions the losses or predictions + * @param sampleWeights the sample weights + */ + public Tuple(Operand labels, Operand lossesOrPredictions, Operand sampleWeights) { + this.labels = labels; + this.lossesOrPredictions = lossesOrPredictions; + this.sampleWeights = sampleWeights; + } + + /** + * Indicates whether this Tuple contains Labels + * + * @return true is this Tuple contains Labels + */ + public boolean containsLabels() { + return this.labels != null; + } + + /** + * Indicates whether this Tuple contains Labels + * + * @return true is this Tuple contains Labels + */ + public boolean containsPredictions() { + return this.lossesOrPredictions != null; + } + + /** + * Indicates whether this Tuple contains Labels + * + * @return true is this Tuple contains Labels + */ + public boolean containsLosses() { + return this.lossesOrPredictions != null; + } + + /** + * Indicates whether this Tuple contains Labels + * + * @return true is this Tuple contains Labels + */ + public boolean containsSampleWeights() { + return this.sampleWeights != null; + } + + /** @return the labels */ + public Operand getLabels() { + return labels; + } + + /** @return the predictions */ + public Operand getPredictions() { + return lossesOrPredictions; + } + + /** @return the predictions */ + public Operand getLosses() { + return lossesOrPredictions; + } + + /** @return the sampleWeights */ + public Operand getSampleWeights() { + return sampleWeights; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java new file mode 100644 index 00000000000..391436ff8bd --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java @@ -0,0 +1,158 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +package org.tensorflow.keras.backend.tf; + +import java.util.Arrays; +import java.util.List; +import org.tensorflow.Operand; +import org.tensorflow.keras.utils.ShapeUtils; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + + +/** Weights Broadcast Ops */ +public class WeightsBroadcastOps { + + private static final String ASSERT_BROADCASTABLE_ERROR_PREFIX = + "weights can not be broadcast to values."; + + /** + * Asserts `weights` can be broadcast to `values` + * + * @param + * @param tf the TensorFlow Ops + * @param weights `Tensor` of weights. + * @param values `Tensor` of values to which weights are applied. + * @return `Operation` raising `InvalidArgumentError` if `weights` has incorrect shape. `no_op` if + * static checks determine `weights` has correct shape. + * @param the type of Operand + * @throws IllegalArgumentException If static checks determine `weights` has incorrect shape. + */ + public static Op assertBroadcastable( + Ops tf, Operand weights, Operand values) { + Operand weightsShape = tf.shape(weights); + Operand weightsRank = tf.rank(weights); + Shape weightsShapeStatic = weights.asOutput().shape(); + int weightsRankStatic = weightsShapeStatic.numDimensions(); + + Operand valuesShape = tf.shape(values); + Operand valuesRank = tf.rank(values); + Shape valuesShapeStatic = values.asOutput().shape(); + int valuesRankStatic = valuesShapeStatic.numDimensions(); + + if (weightsRankStatic != -1 && valuesRankStatic != -1) { + if (weightsRankStatic == 0) { + return ControlDependencies.addControlDependencies(tf, "static_scalar_check_success"); + } + if (weightsRankStatic != valuesRankStatic) { + throw new IllegalArgumentException( + String.format( + "", + "%s values.rank=%d. weights.rank=%d. values.shape=%s. weights.shape=%s.", + ASSERT_BROADCASTABLE_ERROR_PREFIX, + valuesRankStatic, + weightsRankStatic, + valuesShapeStatic.toString(), + weightsShapeStatic.toString())); + } + + for (int i = 0; i < valuesRankStatic; i++) { + if (valuesShapeStatic.size(i) != weightsShapeStatic.size(i)) { + throw new IllegalArgumentException( + String.format( + "", + "%s Mismatch at dim %s. values.shape=%s weights.shape=%s.", + ASSERT_BROADCASTABLE_ERROR_PREFIX, + i, + valuesShapeStatic.toString(), + weightsShapeStatic.toString())); + } + } + return ControlDependencies.addControlDependencies(tf, "static_dims_check_success"); + } + // Dynamic checks. + Operand is_scalar = tf.math.equal(weightsRank, tf.constant(0)); + List> data = + Arrays.asList( + tf.constant(ASSERT_BROADCASTABLE_ERROR_PREFIX), + tf.constant("weights.shape="), + weightsShape, + tf.constant("values.shape="), + valuesShape, + tf.constant("is_scalar="), + is_scalar); + + Operand isValidShape = + tf.select( + is_scalar, + is_scalar, + hasValidNonscalarShape(tf, weightsRank, weightsShape, valuesRank, valuesShape)); + + return tf.assertThat(isValidShape, data); + } + + private static Operand hasValidNonscalarShape( + Ops tf, + Operand weightsRank, + Operand weightsShape, + Operand valuesRank, + Operand valuesShape) { + tf = tf.withSubScope("has_valid_nonscalar_shape"); + Operand isSameRank = tf.math.equal(valuesRank, weightsRank); + return tf.select(isSameRank, hasValidDims(tf, weightsShape, valuesShape), isSameRank); + } + + private static Operand hasValidDims( + Ops tf, Operand weightsShape, Operand valuesShape) { + tf = tf.withSubScope("has_invalid_dims"); + Operand diff = tf.reduceSum(tf.math.sub(weightsShape, valuesShape), tf.constant(0)); + return tf.math.equal(tf.constant(0), diff); + } + + /** + * Broadcast `weights` to the same shape as `values`. + * + * @param tf the TensorFlow ops + * @param weights `Tensor` whose shape is broadcastable to `values` + * @param values Tensor` of any shape + * @param the type of Operand + * @return `weights` broadcast to `values` shape + */ + public static Operand broadcastWeights( + Ops tf, Operand weights, Operand values) { + tf = tf.withSubScope("broadcast_weights"); + values = tf.dtypes.cast(values, weights.asOutput().dataType()); + + Shape weightsShape = weights.asOutput().shape(); + Shape valuesShape = values.asOutput().shape(); + + if (!weightsShape.hasUnknownDimension() + && !valuesShape.hasUnknownDimension() + && ShapeUtils.isCompatibleWith(weightsShape, valuesShape)) { + return weights; + } + + weights = tf.math.mul(weights, tf.onesLike(values)); + Op dependencies = assertBroadcastable(tf, weights, values); + final Operand weightsFinal = weights; + return ControlDependencies.addControlDependencies( + tf, tfc -> tfc.identity(weightsFinal), "assertBroadcastable", dependencies); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java new file mode 100644 index 00000000000..f02d2664759 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java @@ -0,0 +1,202 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.tensorflow.keras.backend.tf.ControlDependencies; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; + +/** + * AdaDelta Optimizer that implements the AdaDelta algorithm. Keras wrapper around the Tensorflow + * Framework optimizer. Adadelta optimization is a stochastic gradient descent method that is based + * on adaptive learning rate per dimension to address two drawbacks: 1) the continual decay of + * learning rates throughout training 2) the need for a manually selected global learning rate + * + *

Two accumulation steps are required: 1) the accumulation of gradients squared, 2) the + * accumulation of updates squared. + * + * @param The Type for the call operation + */ +public class AdaDelta extends org.tensorflow.framework.optimizers.AdaDelta + implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String RHO_RATE_KEY = "rho"; + public static final String EPSILON_KEY = "epsilon"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float RHO_DEFAULT = 0.95F; + public static final float EPSILON_DEFAULT = 1e-7F; + + private Map config = new HashMap<>(); + private float learningRate; + + private List initializers = new ArrayList<>(); + + + /** + * Create an Adadelta optimizer with default name="Adadelta", learning_rate=0.001F, rho=0.95F, and + * epsilon=1e-7F + * + * @param tf the tensorflow Ops + */ + public AdaDelta(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adadelta optimizer with default learning_rate=0.001F, rho=0.95F, and epsilon=1e-7F + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adadelta" + */ + public AdaDelta(Ops tf, String name) { + this(tf, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adadelta optimizer with default name="Adadelta", rho=0.95F, and epsilon=1e-7F + * + * @param tf the tensorflow Ops + * @param learningRate The learning rate + */ + public AdaDelta(Ops tf, float learningRate) { + this(tf, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adadelta optimizer with default rho=0.95F, and epsilon=1e-7F + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adadelta" + * @param learningRate The learning rate + */ + public AdaDelta(Ops tf, String name, float learningRate) { + this(tf, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adadelta optimizer with default name="Adadelta", + * + * @param tf the tensorflow Ops + * @param learningRate The learning rate + * @param rho The decay rate. + * @param epsilon A constant epsilon used to better conditioning the grad update. + */ + public AdaDelta(Ops tf, float learningRate, float rho, float epsilon) { + super(assertGraph(tf), learningRate, rho, epsilon); + initConfig(learningRate, rho, epsilon); + } + + /** + * Create an Adadelta optimizer + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adadelta" + * @param learningRate The learning rate + * @param rho The decay rate. + * @param epsilon A constant epsilon used to better conditioning the grad update. + */ + public AdaDelta(Ops tf, String name, float learningRate, float rho, float epsilon) { + super(assertGraph(tf), name, learningRate, rho, epsilon); + initConfig(learningRate, rho, epsilon); + } + + /** {@inheritDoc} */ + @Override + protected Optional prepare(String name) { + switch (initializers.size()) { + case 0: + return Optional.empty(); + case 1: + return Optional.of(initializers.get(0)); + default: + return Optional.of( + ControlDependencies.addControlDependencies(tf, this.getOptimizerName(), initializers)); + } + } + + /** + * Create an Adam Optimizer from a config object + * + * @param graph the tensorflow graph + * @param config a config object to initialize, he config object has keys for "name", + * "learning_rate", "rho" and "epsilon". If a key is missing the default value is used. + */ + public static AdaDelta fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create an Adadelta optimizer + * + * @param graph the tensorflow graph @@param config a config object to initialize, the config + * object has keys for "name", "learning_rate", "rho" and "epsilon". If a key is missing the + * default value is used. + */ + public static AdaDelta create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float rho = (float) config.getOrDefault(RHO_RATE_KEY, RHO_DEFAULT); + float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); + if (name == null) // doe this to get the default name + { + return new AdaDelta(tf, learningRate, rho, epsilon); + } else { + return new AdaDelta(tf, name, learningRate, rho, epsilon); + } + } + + /** + * Initialize the configuration based on which constructor is called. + * + * @param learningRate The learning rate + * @param rho The decay rate. + * @param epsilon A constant epsilon used to better conditioning the grad update. + */ + private void initConfig(float learningRate, float rho, float epsilon) { + this.learningRate = learningRate; + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(RHO_RATE_KEY, rho); + config.put(EPSILON_KEY, epsilon); + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } + + +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java new file mode 100644 index 00000000000..6010a95b199 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java @@ -0,0 +1,167 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.Map; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.op.Ops; + +/** + * AdaGrad Optimizer that implements the AdaGrad algorithm. Adagrad is an optimizer with + * parameter-specific learning rates, which are adapted relative to how frequently a parameter gets + * updated during training. The more updates a parameter receives, the smaller the updates. + */ +public class AdaGrad extends org.tensorflow.framework.optimizers.AdaGrad + implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String INITIAL_ACCUM_KEY = "accumulator"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float INITIAL_ACCUM__DEFAULT = 0.1f; + + private Map config = new HashMap<>(); + private float learningRate; + + /** + * Create an AdaGrad Optimizer with name="Adagrad", learningRate=0.001F, and initial + * accumulator=0.1 + * + * @param tf the tensorflow Ops + */ + public AdaGrad(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, INITIAL_ACCUM__DEFAULT); + } + + /** + * Create an AdaGrad Optimizer with learningRate=0.001F, and initial accumulator=0.1 + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adagrad" + */ + public AdaGrad(Ops tf, String name) { + this(tf, name, LEARNING_RATE_DEFAULT, INITIAL_ACCUM__DEFAULT); + } + + /** + * Create an AdaGrad Optimizer with initial accumulator=0.1 + * + * @param tf the tensorflow Ops + * @param learningRate The learning rate. Defaults to 0.001. + */ + public AdaGrad(Ops tf, float learningRate) { + this(tf, learningRate, INITIAL_ACCUM__DEFAULT); + } + + /** + * Create an AdaGrad Optimizer + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adagrad" + * @param learningRate The learning rate. Defaults to 0.01. + */ + public AdaGrad(Ops tf, String name, float learningRate) { + this(tf, name, learningRate, INITIAL_ACCUM__DEFAULT); + } + + /** + * Create an AdaGrad Optimizer + * + * @param tf the tensorflow Ops + * @param learningRate The learning rate + * @param initialAccumulatorValue initial accumulator value + */ + public AdaGrad(Ops tf, float learningRate, float initialAccumulatorValue) { + super(assertGraph(tf), learningRate, initialAccumulatorValue); + initConfig(learningRate, initialAccumulatorValue); + } + + /** + * Create an AdaGrad Optimizer + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adagrad" + * @param learningRate The learning rate + * @param initialAccumulatorValue initial accumulator value, must be >= 0. + */ + public AdaGrad(Ops tf, String name, float learningRate, float initialAccumulatorValue) { + super(assertGraph(tf), name, learningRate, initialAccumulatorValue); + assert initialAccumulatorValue >= 0.0F + : "initial_accumulator_value must be non-negative: " + initialAccumulatorValue; + initConfig(learningRate, initialAccumulatorValue); + } + + /** + * Create an AdaGrad Optimizer from a config object + * + * @param graph the tensorflow graph + * @param config a config object to initialize, , the config object has keys for "name", + * "learning_rate" and "accumulator". If a key is missing the default value is used. + */ + public static AdaGrad fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create an AdaGrad Optimizer from a config object + * + * @param graph the tensorflow graph + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate" and "accumulator". If a key is missing the default value is used. + */ + public static AdaGrad create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float initialAccumulatorValue = + (float) config.getOrDefault(INITIAL_ACCUM_KEY, INITIAL_ACCUM__DEFAULT); + if (name != null) { + return new AdaGrad(tf, name, learningRate, initialAccumulatorValue); + } else { + return new AdaGrad(tf, learningRate, initialAccumulatorValue); + } + } + + /** + * Initialize the configuration + * + * @param learningRate + * @param initialAccumulatorValue + */ + private void initConfig(float learningRate, float initialAccumulatorValue) { + this.learningRate = learningRate; + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(INITIAL_ACCUM_KEY, initialAccumulatorValue); + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java new file mode 100644 index 00000000000..d7ee03338c8 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java @@ -0,0 +1,191 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.Map; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.op.Ops; + +/** Optimizer that implements the Adagrad Dual-Averaging algorithm. */ +public class AdaGradDA extends org.tensorflow.framework.optimizers.AdaGradDA + implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String INITIAL_ACCUM_KEY = "accumulator"; + public static final String L1STRENGTH_KEY = "l1Strength"; + public static final String L2STRENGTH_KEY = "l2Strength"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; // arbitray number + public static final float INITIAL_ACCUM__DEFAULT = 0.1f; + public static final float L1STRENGTH_DEFAULT = 0.0F; + public static final float L2STRENGTH_DEFAULT = 0.0F; + + private Map config = new HashMap<>(); + private float learningRate; + + /** + * Create an AdagradDA Optimizer with default values name="adagrad-da". learning_rate=.001, + * initial accumulator= 0.1, l1Strength=0.0, l2Strength=0.0; + * + * @param tf the tensorflow tf + */ + public AdaGradDA(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, INITIAL_ACCUM__DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT); + } + + /** + * Create an AdagradDA Optimizer with default values initial accumulator= 0.1, l1Strength=0.0, + * l2Strength=0.0; + * + * @param tf the tensorflow tf + * @param learningRate The learning rate. + */ + public AdaGradDA(Ops tf, float learningRate) { + this(tf, learningRate, INITIAL_ACCUM__DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT); + } + + /** + * Create an AdagradDA Optimizer with default values initial accumulator= 0.1, l1Strength=0.0, + * l2Strength=0.0; + * + * @param tf the tensorflow tf + * @param name the name of the Optimizer, defaults to "adagrad-da" + * @param learningRate The learning rate. + */ + public AdaGradDA(Ops tf, String name, float learningRate) { + this(tf, name, learningRate, INITIAL_ACCUM__DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT); + } + + /** + * Create an AdagradDA Optimizer + * + * @param tf the tensorflow tf + * @param learningRate the learning rate, default is 0.001 + * @param initialAccumulatorValue Starting value for the accumulators, must be >= 0.0. + * @param l1Strength L1 Regularization Strength + * @param l2Strength L2 Regularization Strength + */ + public AdaGradDA( + Ops tf, + float learningRate, + float initialAccumulatorValue, + float l1Strength, + float l2Strength) { + super(assertGraph(tf), learningRate, initialAccumulatorValue, l1Strength, l2Strength); + assert initialAccumulatorValue >= 0.0F + : "initial_accumulator_value must be non-negative: " + initialAccumulatorValue; + assert l1Strength >= 0.0F : "l1Strength must be non-negative: " + l1Strength; + assert l2Strength >= 0.0F : "l2Strength must be non-negative: " + l2Strength; + initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); + } + + /** + * Create an AdagradDA Optimizer + * + * @param tf the tensorflow tf + * @param name the name of the Optimizer, defaults to "adagrad-da" + * @param learningRate the learning rate, default is 0.001 + * @param initialAccumulatorValue Starting value for the accumulators, must be positive. + * @param l1Strength L1 Regularization Strength + * @param l2Strength L2 Regularization Strength + */ + public AdaGradDA( + Ops tf, + String name, + float learningRate, + float initialAccumulatorValue, + float l1Strength, + float l2Strength) { + super(assertGraph(tf), name, learningRate, initialAccumulatorValue, l1Strength, l2Strength); + assert initialAccumulatorValue >= 0.0F + : "initial_accumulator_value must be non-negative: " + initialAccumulatorValue; + assert l1Strength >= 0.0F : "l1Strength must be non-negative: " + l1Strength; + assert l2Strength >= 0.0F : "l2Strength must be non-negative: " + l2Strength; + initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); + } + + /** + * Create an AdaGrad Optimizer from a config object + * + * @param tf the tensorflow tf + * @param config a config object to initialize, , the config object has keys for "name", + * "learning_rate", "accumulator", "l1Strength" and "l2Strength". If a key is missing the + * default value is used. + * @return the new AdaGradDA Optimizer + */ + public static AdaGradDA fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create an AdaGradDA Optimizer from a config object + * + * @param tf the tensorflow tf + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate", "accumulator", "l1Strength" and "l2Strength". If a key is missing the + * default value is used. + * @return the new AdaGradDA Optimizer + */ + public static AdaGradDA create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float initialAccumulatorValue = + (float) config.getOrDefault(INITIAL_ACCUM_KEY, INITIAL_ACCUM__DEFAULT); + float l1Strength = (float) config.getOrDefault(L1STRENGTH_KEY, L2STRENGTH_DEFAULT); + float l2Strength = (float) config.getOrDefault(L2STRENGTH_KEY, L2STRENGTH_DEFAULT); + if (name != null) { + return new AdaGradDA(tf, name, learningRate, initialAccumulatorValue, l1Strength, l2Strength); + } else { + return new AdaGradDA(tf, learningRate, initialAccumulatorValue, l1Strength, l2Strength); + } + } + + /** + * Initialize the Optimizer from a config object based on which constructor is called. + * + * @param learningRate the learning rate, default is 0.001 + * @param initialAccumulatorValue Starting value for the accumulators, must be >= 0.0. + * @param l1Strength L1 Regularization Strength + * @param l2Strength L2 Regularization Strength + */ + private void initConfig( + float learningRate, float initialAccumulatorValue, float l1Strength, float l2Strength) { + this.learningRate = learningRate; + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(INITIAL_ACCUM_KEY, initialAccumulatorValue); + config.put(L1STRENGTH_KEY, l1Strength); + config.put(L2STRENGTH_KEY, l2Strength); + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adam.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adam.java new file mode 100644 index 00000000000..5d74c7e27f4 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adam.java @@ -0,0 +1,182 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.Map; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.op.Ops; + +/** Adam Optimizer that implements the Adam algorithm. */ +public class Adam extends org.tensorflow.framework.optimizers.Adam implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String EPSILON_KEY = "epsilon"; + public static final String BETA_ONE_KEY = "beta_1"; + public static final String BETA_TWO_KEY = "beta_2"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float EPSILON_DEFAULT = 1e-07F; + public static final float BETA_ONE_DEFAULT = 0.9F; + public static final float BETA_TWO_DEFAULT = 0.999F; + + private float learningRate; + private Map config = new HashMap<>(); + + /** + * Create an Adam Optimizer + * + * @param tf the tensorflow Ops + */ + public Adam(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adam Optimizer + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adam" + */ + public Adam(Ops tf, String name) { + this(tf, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adam Optimizer + * + * @param tf the tensorflow Ops + * @param learningRate The learning rate. Defaults to 0.001. + */ + public Adam(Ops tf, float learningRate) { + this(tf, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adam Optimizer + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adam" + * @param learningRate The learning rate. Defaults to 0.001. + */ + public Adam(Ops tf, String name, float learningRate) { + this(tf, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Adam Optimizer + * + * @param tf the tensorflow Ops + * @param learningRate The learning rate. Defaults to 0.001. + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-7. + */ + public Adam(Ops tf, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(assertGraph(tf), learningRate, betaOne, betaTwo, epsilon); + initConfig(learningRate, betaOne, betaTwo, epsilon); + } + + /** + * Create an Adam Optimizer + * + * @param tf the tensorflow Ops + * @param name the name of the Optimizer, defaults to "Adam" + * @param learningRate The learning rate. Defaults to 0.001. + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-7. + */ + public Adam( + Ops tf, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(assertGraph(tf), name, learningRate, betaOne, betaTwo, epsilon); + initConfig(learningRate, betaOne, betaTwo, epsilon); + } + + /** + * Create an Adam Optimizer from a config object + * + * @param tf the tensorflow Ops + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate", "epsilon", "beta_1", "beta_2". If a key is missing the default value is + * used. + */ + public static Adam fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create an Adam Optimizer from a config object + * + * @param tf the tensorflow Ops + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate", "epsilon", "beta_1", "beta_2". If a key is missing the default value is + * used. + */ + public static Adam create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); + float betaOne = (float) config.getOrDefault(BETA_ONE_KEY, BETA_ONE_DEFAULT); + float betaTwo = (float) config.getOrDefault(BETA_TWO_KEY, BETA_TWO_DEFAULT); + if (name == null) { + return new Adam(tf, learningRate, betaOne, betaTwo, epsilon); + } else { + return new Adam(tf, name, learningRate, betaOne, betaTwo, epsilon); + } + } + + /** + * Initialize the Optimizer from a config object based on which constructor is called. + * + * @param learningRate The learning rate. Defaults to 0.001. + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-7. + */ + protected void initConfig(float learningRate, float betaOne, float betaTwo, float epsilon) { + this.learningRate = learningRate; + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(EPSILON_KEY, epsilon); + config.put(BETA_ONE_KEY, betaOne); + config.put(BETA_TWO_KEY, betaTwo); + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adamax.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adamax.java new file mode 100644 index 00000000000..a976a6e51dd --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adamax.java @@ -0,0 +1,283 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.Scope; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.op.train.ApplyAdaMax; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; + +/** Adamax Optimizer that implements the Adamax algorithm. */ +public class Adamax extends org.tensorflow.framework.optimizers.Optimizer + implements OptimizerInterface { + + public static final String FIRST_MOMENT = "m"; + public static final String SECOND_MOMENT = "v"; + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String EPSILON_KEY = "epsilon"; + public static final String BETA_ONE_KEY = "beta_1"; + public static final String BETA_TWO_KEY = "beta_2"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float EPSILON_DEFAULT = 1e-07F; + public static final float BETA_ONE_DEFAULT = 0.9F; + public static final float BETA_TWO_DEFAULT = 0.999F; + + private Scope scope; + private Map config = new HashMap<>(); + + private float learningRate; + private final float betaOne; + private final float betaTwo; + private final float epsilon; + + private Constant learningRateConst; + private Constant epsilonConst; + private Constant betaOneConst; + private Constant betaTwoConst; + private Variable betaOnePower; + + /** + * Create an Optimizer that implements the Adamax algorithm. + * + * @param tf the TensoFlow Ops + */ + public Adamax(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the Adamax algorithm. + * + * @param tf the TensoFlow Ops + * @param name name for the operations Created when applying gradients. Defaults to "Adamax". + */ + public Adamax(Ops tf, String name) { + this(tf, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the Adamax algorithm. + * + * @param tf the TensoFlow Ops + * @param learningRate The learning rate. + */ + public Adamax(Ops tf, float learningRate) { + this(tf, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the Adamax algorithm. + * + * @param tf the TensoFlow Ops + * @param name name for the operations Created when applying gradients. Defaults to "Adamax". + * @param learningRate The learning rate. + */ + public Adamax(Ops tf, String name, float learningRate) { + this(tf, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the Adamax algorithm. + * + * @param tf the TensoFlow Ops + * @param learningRate The learning rate. + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. + * @param epsilon A small constant for numerical stability. + */ + public Adamax(Ops tf, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(assertGraph(tf)); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + this.scope = tf.scope(); + initConfig(learningRate, betaOne, betaTwo, epsilon); + } + + /** + * Create an Optimizer that implements the Adamax algorithm. + * + * @param tf the TensoFlow Ops + * @param name name for the operations Created when applying gradients. Defaults to "Adamax". + * @param learningRate The learning rate. + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. + * @param epsilon A small constant for numerical stability. + */ + public Adamax( + Ops tf, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(assertGraph(tf), name); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + this.scope = tf.scope(); + + initConfig(learningRate, betaOne, betaTwo, epsilon); + } + + /** + * Create an Optimizer that implements the Adamax algorithm from a config object + * + * @param tf the TensoFlow Ops + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate", "epsilon", "beta_1", "beta_2". If a key is missing the default value is + * used. + */ + public static Adamax fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create an Optimizer that implements the Adamax algorithm from a config object + * + * @param tf the TensoFlow Ops + * @param config a config object to initialize + */ + public static Adamax create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); + float betaOne = (float) config.getOrDefault(BETA_ONE_KEY, BETA_ONE_DEFAULT); + float betaTwo = (float) config.getOrDefault(BETA_TWO_KEY, BETA_TWO_DEFAULT); + if (name == null) { + return new Adamax(tf, learningRate, betaOne, betaTwo, epsilon); + } else { + return new Adamax(tf, name, learningRate, betaOne, betaTwo, epsilon); + } + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } + + /** {@inheritDoc} */ + @Override + protected Optional prepare(String scopeName) { + betaOneConst = tf.constant(betaOne); + betaTwoConst = tf.constant(betaTwo); + learningRateConst = tf.constant(learningRate); + epsilonConst = tf.constant(epsilon); + + return Optional.empty(); + } + + /** {@inheritDoc} */ + @Override + protected void createSlots(List> variables) { + for (Output v : variables) { + createAdamaxSlot(v.asOutput()); + } + betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); + Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); + ((Graph) tf.scope().env()).addInitializer(betaOnePowerInit); + } + + /** + * Create the first and second moment slots + * + * @param v the variable + * @param the datatype of the variable + */ + private void createAdamaxSlot(Output v) { + Operand firstMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); + Operand secondMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); + } + + /** {@inheritDoc} */ + @Override + protected Op applyDense(Output gradient, Output variable) { + Variable firstMomentSlot = getSlot(variable, FIRST_MOMENT).get(); + Variable secondMomentSlot = getSlot(variable, SECOND_MOMENT).get(); + return ApplyAdaMax.create( + scope, + (Operand) variable, + (Operand) firstMomentSlot, + (Operand) secondMomentSlot, + (Operand) tf.dtypes.cast(betaOnePower, gradient.dataType()), + (Operand) tf.dtypes.cast(learningRateConst, gradient.dataType()), + (Operand) tf.dtypes.cast(betaOneConst, gradient.dataType()), + (Operand) tf.dtypes.cast(betaTwoConst, gradient.dataType()), + (Operand) tf.dtypes.cast(epsilonConst, gradient.dataType()), + (Operand) gradient); + } + + /** {@inheritDoc} */ + @Override + protected Op finish(List updateOperations, String name) { + updateOperations.add(tf.assign(betaOnePower, tf.math.mul(betaOnePower, betaOneConst))); + return super.finish(updateOperations, name); + } + + /** {@inheritDoc} */ + @Override + public String getOptimizerName() { + return "Adamax"; + } + + /** + * Initialize the Optimizer from a config object based on which constructor is called. + * + * @param learningRate The learning rate. Defaults to 0.001. + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-7. + */ + protected void initConfig(float learningRate, float betaOne, float betaTwo, float epsilon) { + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(EPSILON_KEY, epsilon); + config.put(BETA_ONE_KEY, betaOne); + config.put(BETA_TWO_KEY, betaTwo); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java new file mode 100644 index 00000000000..aec7af8d6c9 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java @@ -0,0 +1,360 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.Session; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Placeholder; +import org.tensorflow.op.core.Variable; +import org.tensorflow.op.train.ApplyFtrl; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; + +/** Ftrl Optimizer that implements the FTRL algorithm. */ +public class Ftrl extends org.tensorflow.framework.optimizers.Optimizer + implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String LEARNING_RATE_POWER_KEY = "learning_rate_power"; + public static final String INITIAL_ACCUM_VALUE_KEY = "initial_accumulator_value"; + public static final String L1STRENGTH_KEY = "l1_regularization_strength"; + public static final String L2STRENGTH_KEY = "l2_regularization_strength"; + public static final String L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY = + "l2_shrinkage_regularization_strength"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float LEARNING_RATE_POWER_DEFAULT = -0.5F; + public static final float INITIAL_ACCUM_VALUE_DEFAULT = 0.1F; + public static final float L1STRENGTH_DEFAULT = 0.0F; + public static final float L2STRENGTH_DEFAULT = 0.0F; + public static final float L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT = 0.0F; + + public static final String ACCUMULATOR = "gradient_accumulator"; + public static final String LINEAR_ACCUMULATOR = "linear_accumulator"; + + private final String name; + private float learningRate; + private final float learningRatePower; + private final float initialAccumulatorValue; + private final float l1RegularizationStrength; + private final float l2RegularizationStrength; + private final float l2ShrinkageRegularizationStrength; + + private Map config = new HashMap<>(); + + private boolean useLocking = true; + + /** + * Create a Ftrl Optimizer + * + * @param tf the TensorFlow Ops + */ + public Ftrl(Ops tf) { + this( + tf, + LEARNING_RATE_DEFAULT, + LEARNING_RATE_POWER_DEFAULT, + INITIAL_ACCUM_VALUE_DEFAULT, + L1STRENGTH_DEFAULT, + L2STRENGTH_DEFAULT, + L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); + } + + /** + * Create a Ftrl Optimizer + * + * @param tf the TensorFlow Ops + * @param name the Optmizer name + */ + public Ftrl(Ops tf, String name) { + this( + tf, + name, + LEARNING_RATE_DEFAULT, + LEARNING_RATE_POWER_DEFAULT, + INITIAL_ACCUM_VALUE_DEFAULT, + L1STRENGTH_DEFAULT, + L2STRENGTH_DEFAULT, + L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); + } + + /** + * Create a Ftrl Optimizer + * + * @param tf the TensorFlow Ops + * @param learningRate the learning rate + */ + public Ftrl(Ops tf, float learningRate) { + this( + tf, + learningRate, + LEARNING_RATE_POWER_DEFAULT, + INITIAL_ACCUM_VALUE_DEFAULT, + L1STRENGTH_DEFAULT, + L2STRENGTH_DEFAULT, + L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); + } + + /** + * Create a Ftrl Optimizer + * + * @param tf the TensorFlow Ops + * @param name the Optmizer name + * @param learningRate the learning rate + */ + public Ftrl(Ops tf, String name, float learningRate) { + this( + tf, + name, + learningRate, + LEARNING_RATE_POWER_DEFAULT, + INITIAL_ACCUM_VALUE_DEFAULT, + L1STRENGTH_DEFAULT, + L2STRENGTH_DEFAULT, + L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); + } + + /** + * Create a Ftrl Optimizer + * + * @param tf the TensorFlow Ops + * @param learningRate the learning rate + * @param learningRatePower + * @param initialAccumulatorValue + * @param l1Strength + * @param l2Strength + * @param l2ShrinkageRegularizationStrength + */ + public Ftrl( + Ops tf, + float learningRate, + float learningRatePower, + float initialAccumulatorValue, + float l1Strength, + float l2Strength, + float l2ShrinkageRegularizationStrength) { + super(assertGraph(tf)); + this.name = getOptimizerName(); + this.learningRate = learningRate; + this.learningRatePower = learningRatePower; + this.initialAccumulatorValue = initialAccumulatorValue; + this.l1RegularizationStrength = l1Strength; + this.l2RegularizationStrength = l2Strength; + this.l2ShrinkageRegularizationStrength = l2ShrinkageRegularizationStrength; + validateParams(); + initConfig(); + } + + /** + * Create a Ftrl Optimizer + * + * @param tf the TensorFlow Ops + * @param name the Optmizer name + * @param learningRate the learning rate + * @param learningRatePower + * @param initialAccumulatorValue + * @param l1Strength + * @param l2Strength + * @param l2ShrinkageRegularizationStrength + */ + public Ftrl( + Ops tf, + String name, + float learningRate, + float learningRatePower, + float initialAccumulatorValue, + float l1Strength, + float l2Strength, + float l2ShrinkageRegularizationStrength) { + super(assertGraph(tf), name); + this.name = name; + this.learningRate = learningRate; + this.learningRatePower = learningRatePower; + this.initialAccumulatorValue = initialAccumulatorValue; + this.l1RegularizationStrength = l1Strength; + this.l2RegularizationStrength = l2Strength; + this.l2ShrinkageRegularizationStrength = l2ShrinkageRegularizationStrength; + validateParams(); + initConfig(); + } + + + + /** + * Create a Ftrl Optmizer + * + * @param tf the TensorFlow Ops + * @param config a config object to initialize + * @return a new Frtl Optimizer + */ + public static Ftrl create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float learningRatePower = + (float) config.getOrDefault(LEARNING_RATE_POWER_KEY, LEARNING_RATE_POWER_DEFAULT); + float initialAccumulatorValue = + (float) config.getOrDefault(INITIAL_ACCUM_VALUE_KEY, INITIAL_ACCUM_VALUE_DEFAULT); + float l1RegularizationStrength = + (float) config.getOrDefault(L1STRENGTH_KEY, L1STRENGTH_DEFAULT); + float l2RegularizationStrength = + (float) config.getOrDefault(L2STRENGTH_KEY, L2STRENGTH_DEFAULT); + float l2ShrinkageRegularizationStrength = + (float) + config.getOrDefault( + L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY, + L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); + + if (name == null) { + return new Ftrl( + tf, + learningRate, + learningRatePower, + initialAccumulatorValue, + l1RegularizationStrength, + l2RegularizationStrength, + l2ShrinkageRegularizationStrength); + } else { + return new Ftrl( + tf, + name, + learningRate, + learningRatePower, + initialAccumulatorValue, + l1RegularizationStrength, + l2RegularizationStrength, + l2ShrinkageRegularizationStrength); + } + } + + /** Initialize the Config object from the current settings */ + protected void initConfig() { + config.put(NAME_KEY, this.name); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(LEARNING_RATE_POWER_KEY, learningRatePower); + config.put(INITIAL_ACCUM_VALUE_KEY, initialAccumulatorValue); + config.put(L1STRENGTH_KEY, l1RegularizationStrength); + config.put(L2STRENGTH_KEY, l2RegularizationStrength); + config.put(L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY, l2ShrinkageRegularizationStrength); + } + + /** Validate all the settings of the Frtl Optmizer */ + private void validateParams() { + if (this.initialAccumulatorValue < 0.0F) { + throw new IllegalArgumentException( + String.format( + "initialAccumulatorValue %f needs to be positive or zero", + this.initialAccumulatorValue)); + } + if (this.learningRatePower > 0.0F) { + throw new IllegalArgumentException( + String.format( + "learningRatePower %f needs to be negative or zero", this.learningRatePower)); + } + if (this.l1RegularizationStrength < 0.0F) { + throw new IllegalArgumentException( + String.format( + "'l1RegularizationStrength %f needs to be positive or zero", + this.l1RegularizationStrength)); + } + if (this.l2RegularizationStrength < 0.0F) { + throw new IllegalArgumentException( + String.format( + "'l2RegularizationStrength %f needs to be positive or zero", + this.l2RegularizationStrength)); + } + if (this.l2ShrinkageRegularizationStrength < 0.0F) { + throw new IllegalArgumentException( + String.format( + "'l2ShrinkageRegularizationStrength %f needs to be positive or zero", + this.l2RegularizationStrength)); + } + } + + /** {@inheritDoc} */ + @Override + protected void createSlots(List> variables) { + for (Output v : variables) { + createFtrlSlot(v); + } + } + + /** + * Create a slot variables for the accumulators + * + * @param v the variable + * @param the data type of the variable + */ + private void createFtrlSlot(Output v) { + Operand initializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(initialAccumulatorValue), v.dataType())); + createSlot(v.asOutput(), ACCUMULATOR, initializer); + Operand linearInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), LINEAR_ACCUMULATOR, linearInitializer); + } + + /** {@inheritDoc} */ + @Override + protected Op applyDense(Output gradient, Output variable) { + Variable accumSlot = getSlot(variable, ACCUMULATOR).get(); + Variable linearSlot = getSlot(variable, LINEAR_ACCUMULATOR).get(); + ApplyFtrl.Options options = ApplyFtrl.useLocking(useLocking); + return this.tf.train.applyFtrl( + variable, + accumSlot, // accum + linearSlot, // linear + gradient, // gradient + tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), // lr + tf.dtypes.cast(tf.constant(l1RegularizationStrength), gradient.dataType()), // l1 + tf.dtypes.cast(tf.constant(l2RegularizationStrength), gradient.dataType()), // l2 + tf.dtypes.cast( + tf.constant(l2ShrinkageRegularizationStrength), gradient.dataType()), // l2Shrinkage + tf.dtypes.cast(tf.constant(learningRatePower), gradient.dataType()), // lrPower + options); + } + + /** {@inheritDoc} */ + @Override + public String getOptimizerName() { + return "Ftrl"; + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java new file mode 100644 index 00000000000..4772c247ef8 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java @@ -0,0 +1,402 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.Scope; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** Nadam Optimizer that implements the NAdam algorithm. */ +public class Nadam extends org.tensorflow.framework.optimizers.Optimizer + implements OptimizerInterface { + + public static final String FIRST_MOMENT = "m"; + public static final String SECOND_MOMENT = "v"; + public static final String MOMENTUM = "momentum"; + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String EPSILON_KEY = "epsilon"; + public static final String BETA_ONE_KEY = "beta_1"; + public static final String BETA_TWO_KEY = "beta_2"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float EPSILON_DEFAULT = 1e-07F; + public static final float BETA_ONE_DEFAULT = 0.9F; + public static final float BETA_TWO_DEFAULT = 0.999F; + + private Scope scope; + private final Map config = new HashMap<>(); + + private float learningRate; + private final float betaOne; + private final float betaTwo; + private final float epsilon; + private final float decayBase = 0.96F; + private final float decay = 0.004F; + + private long iterations = 0; + + private Constant learningRateConst; + private Constant betaOneConst; + private Constant betaTwoConst; + private Constant localStepConst; + private Constant nextStepConst; + + private Constant decayBaseConst; + private Constant decayConst; + private Constant epsilonConst; + + private Variable betaOnePower; + private Variable betaTwoPower; + private Variable momentum; + + private Operand m_t; + private Operand m_t_1; + private Operand m_schedule_new; + private Operand m_schedule_next; + private Operand one_minus_beta_1; + private Operand one_minus_beta_2; + private Operand one_minus_m_t; + private Operand one_minus_m_schedule_new; + private Operand one_minus_m_schedule_next; + private Operand v_t_prime_denominator; + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + */ + public Nadam(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + * @param name name for the operations created when applying gradients. Defaults to "Nadam". + */ + public Nadam(Ops tf, String name) { + this(tf, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. + */ + public Nadam(Ops tf, float learningRate) { + this(tf, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + * @param name name for the operations created when applying gradients. Defaults to "Adamax". + * @param learningRate The learning rate. + */ + public Nadam(Ops tf, String name, float learningRate) { + this(tf, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. + * @param epsilon A small constant for numerical stability. + */ + public Nadam(Ops tf, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(assertGraph(tf)); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + this.scope = tf.scope(); + initConfig(learningRate, betaOne, betaTwo, epsilon); + } + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + * @param name name for the operations created when applying gradients. + * @param learningRate The learning rate. + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. + * @param epsilon A small constant for numerical stability. + */ + public Nadam( + Ops tf, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(assertGraph(tf), name); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + this.scope = tf.scope(); + + initConfig(learningRate, betaOne, betaTwo, epsilon); + } + + /** + * Create an Optimizer that implements the NAdam algorithm. + * + * @param tf the TensorFlow Ops + * @param config a config object to initialize + */ + public static Nadam create(Ops tf, Map config) { + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); + float betaOne = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float betaTwo = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + if (name == null) { + return new Nadam(tf, learningRate, betaOne, betaTwo, epsilon); + } else { + return new Nadam(tf, name, learningRate, betaOne, betaTwo, epsilon); + } + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } + + /** {@inheritDoc} */ + @Override + protected void createSlots(List> variables) { + for (Output v : variables) { + createNadamSlot(v.asOutput()); + } + betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); + Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); + ((Graph) tf.scope().env()).addInitializer(betaOnePowerInit); + + betaTwoPower = tf.withName("beta2_power").variable(Shape.scalar(), TFloat32.DTYPE); + Assign betaTwoPowerInit = tf.assign(betaTwoPower, tf.constant(betaTwo)); + ((Graph) tf.scope().env()).addInitializer(betaTwoPowerInit); + + momentum = tf.withName("momentum").variable(Shape.scalar(), TFloat32.DTYPE); + Assign momentumInit = tf.assign(momentum, tf.constant(1.0F)); + ((Graph) tf.scope().env()).addInitializer(momentumInit); + } + + /** + * Create slots for first and second momements and momentum + * @param v the variable + * @param the data type or the Variable + */ + private void createNadamSlot(Output v) { + Operand firstMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); + Operand secondMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); + + Operand momentumInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(1.0f), v.dataType())); + createSlot(v.asOutput(), MOMENTUM, momentumInitializer); + } + + /** {@inheritDoc} */ + @Override + protected Optional prepare(String scopeName) { + Constant one = tf.constant(1.0F); + Constant point5 = tf.constant(0.5F); + + learningRateConst = tf.constant(learningRate); + betaOneConst = tf.constant(betaOne); + betaTwoConst = tf.constant(betaTwo); + localStepConst = tf.constant(this.iterations + 1); + nextStepConst = tf.constant(this.iterations + 2); + decayConst = tf.constant(decay); + decayBaseConst = tf.constant(this.decayBase); + epsilonConst = tf.constant(this.epsilon); + + // m_t = beta_1_t * (1. - 0.5 * ( math_ops.pow(decay_base, self._initial_decay * local_step))) + m_t = + tf.math.mul( + betaOneConst, + tf.math.sub( + one, + tf.math.mul( + point5, + tf.math.pow( + decayBaseConst, + tf.math.mul(decayConst, tf.dtypes.cast(localStepConst, TFloat32.DTYPE)))))); + // m_t_1 = beta_1_t * (1. - 0.5 * ( math_ops.pow(decay_base, self._initial_decay * next_step))) + m_t_1 = + tf.math.mul( + betaOneConst, + tf.math.sub( + one, + tf.math.mul( + point5, + tf.math.pow( + decayBaseConst, + tf.math.mul(decayConst, tf.dtypes.cast(nextStepConst, TFloat32.DTYPE)))))); + + // m_schedule_new = math_ops.cast(self._m_cache_read, var_dtype) * m_t + m_schedule_new = tf.math.mul(momentum, m_t); + // if var_dtype is self._m_cache.dtype: + // m_schedule_new = array_ops.identity(state_ops.assign( + // self._m_cache, m_schedule_new, use_locking=self._use_locking)) + m_schedule_new = tf.identity(tf.assign(momentum, m_schedule_new, Assign.useLocking(true))); + // m_schedule_next = m_schedule_new * m_t_1 + m_schedule_next = tf.math.mul(m_schedule_new, m_t_1); + + // 1 - beta_1_t + one_minus_beta_1 = tf.math.sub(one, betaOneConst); + // 1 - beta_2_t, + one_minus_beta_2 = tf.math.sub(one, betaTwoConst); + // 1. - m_t, + one_minus_m_t = tf.math.sub(one, m_t); + // 1. - m_schedule_new + one_minus_m_schedule_new = tf.math.sub(one, m_schedule_new); + // 1. - m_schedule_next + one_minus_m_schedule_next = tf.math.sub(one, m_schedule_next); + // 1. - math_ops.pow(beta_2_t, local_step) + v_t_prime_denominator = + tf.math.sub(one, tf.math.pow(betaTwoConst, tf.dtypes.cast(localStepConst, TFloat32.DTYPE))); + return Optional.empty(); + } + + /** {@inheritDoc} */ + @Override + protected Op applyDense(Output gradient, Output variable) { + Variable m = getSlot(variable, FIRST_MOMENT).get(); // first Moment + Variable v = getSlot(variable, SECOND_MOMENT).get(); // Second Moment + + // g_prime = grad / coefficients['one_minus_m_schedule_new'] + Operand g_prime = tf.math.div((Operand) gradient, one_minus_m_schedule_new); + // m_t = (coefficients['beta_1_t'] * m + coefficients['one_minus_beta_1_t'] * grad) + Operand m_t = + tf.math.add( + tf.math.mul(betaOneConst, (Operand) m), + tf.math.mul(one_minus_beta_1, (Operand) gradient)); + // m_t = state_ops.assign(m, m_t, use_locking=self._use_locking) + // update m + m_t = tf.assign(m, m_t, Assign.useLocking(true)); + + // m_t_prime = m_t / coefficients['one_minus_m_schedule_next'] + Operand m_t_prime = tf.math.div(m_t, one_minus_m_schedule_next); + + // v_t = (coefficients['beta_2_t'] * v + coefficients['one_minus_beta_2_t'] * + // math_ops.square(grad)) + Operand v_t = + tf.math.add( + tf.math.mul(betaTwoConst, (Operand) v), + tf.math.mul(one_minus_beta_2, tf.math.square((Operand) gradient))); + // v_t = state_ops.assign(v, v_t, use_locking=self._use_locking) + // update v + v_t = tf.assign(v, v_t, Assign.useLocking(true)); + + // v_t_prime = v_t / coefficients['v_t_prime_denominator'] + Operand v_t_prime = tf.math.div(v_t, v_t_prime_denominator); + + // m_t_bar = (coefficients['one_minus_m_t'] * g_prime + coefficients['m_t_1'] * m_t_prime) + Operand m_t_bar = + tf.math.add(tf.math.mul(one_minus_m_t, g_prime), tf.math.mul(m_t_1, m_t_prime)); + // var_t = var - coefficients['lr_t'] * m_t_bar / (math_ops.sqrt(v_t_prime) + + // coefficients['epsilon']) + Operand var_t = + tf.math.sub( + variable, + tf.math.div( + tf.math.mul(learningRateConst, m_t_bar), + tf.math.add(tf.math.sqrt(v_t_prime), epsilonConst))); + // assign(var, var_t, use_locking=self._use_locking) + return tf.assign(variable, var_t, Assign.useLocking(true)); + } + + /** + * Gathers up the update operations into a single op that can be used as a run target. + * + *

Adds the betaOne, betaTwo and mu updates to the end of the updates list. + * + * @param updateOperations The update operations. + * @param name The name of the run target. + * @return A NoOp with a control dependency on each update operation. + */ + @Override + protected Op finish(List updateOperations, String name) { + iterations++; // increment the step; + updateOperations.add(tf.assign(betaOnePower, tf.math.mul(betaOnePower, betaOneConst))); + updateOperations.add(tf.assign(betaTwoPower, tf.math.mul(betaTwoPower, betaTwoConst))); + return super.finish(updateOperations, name); + } + + /** {@inheritDoc} */ + @Override + public String getOptimizerName() { + return "Nadam"; + } + + /** + * Sets the config object based on the current state of the Optmizer. + * + * @param learningRate The learning rate. Defaults to 0.001. + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-7. + */ + private void initConfig(float learningRate, float betaOne, float betaTwo, float epsilon) { + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(EPSILON_KEY, epsilon); + config.put(BETA_ONE_KEY, betaOne); + config.put(BETA_TWO_KEY, betaTwo); + } + + private float calcM(int iteration) { + return betaOne * (1 - .05F * (float) Math.pow(this.decayBase, this.decay * iteration)); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java new file mode 100644 index 00000000000..9e3223deb80 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java @@ -0,0 +1,59 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.Map; +import org.tensorflow.Graph; +import org.tensorflow.op.Ops; + +/** The main Interface for Keras Optimizers */ +public interface OptimizerInterface { + + /** The value for the name key in the Config object */ + public static final String NAME_KEY = "name"; + + /** + * Get a TensorFlow Graph from the Ops. + * + * @param tf the TensorFlow Ops + * @return the graph + * @throws java.lang.AssertionError if the TensorFlow Ops does not represent Graph mode + */ + public static Graph assertGraph(Ops tf) { + assert tf.scope().env().isGraph() : "Optimizers can only be used in Graph Mode"; + return (Graph) tf.scope().env(); + } + + /** + * Return the config object used to initialize the Optimizer + * + * @return the config object used to initialize the Optimizer + */ + public Map getConfig(); + + /** + * Return the current learning rate + * + * @return the current learning rate + */ + public float getLearningRate(); + + /** + * Set the learning rate + * + * @param learningRate the learning rate; + */ + public void setLearningRate(float learningRate); +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java new file mode 100644 index 00000000000..3892e239dad --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java @@ -0,0 +1,124 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import org.tensorflow.framework.optimizers.Optimizer; +import org.tensorflow.op.Ops; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.function.Supplier; + +/** + * Functions to get an Optimizer based on String name, an Optimizer class, or lambda function. + * + *

Example: + * + *

+ *     Adam instance = Optimizers.get(tf, "adam");
+ *     Ftrl instance = Optimizers.get(tf, ltf -> new Ftrl(ltf, 0.1f);
+ * 
+ */ +public class Optimizers { + + static Map> map = + new HashMap>() { + { + put("adadelta", tf -> new AdaDelta(tf)); + put("adagrad", tf -> new AdaGrad(tf)); + put("adagrad-da", tf -> new AdaGradDA(tf)); + put("adam", tf -> new Adam(tf)); + put("adamax", tf -> new Adamax(tf)); + put("ftrl", tf -> new Ftrl(tf)); + put("nadam", tf -> new Nadam(tf)); + put("rmsprop", tf -> new RMSProp(tf)); + put("sgd", tf -> new SGD(tf)); + } + }; + + /** + * Get an Optimizer + * + * @param optimizerFunction either a String that identifies the Optimizer, an Optimizer class, or + * an Optimizer object. + * @return the Optimizer object or null if not found. + */ + public static Optimizer get(Ops tf, Object optimizerFunction) { + return get(tf, optimizerFunction, null); + } + + /** + * Get an Initializer + * + * @param si a lamda function + * @return the Intializer object + */ + public static Optimizer get(Ops tf, Function func) { + return func.apply(tf); + } + + /** + * Get an Initializer + * + * @param optimizerFunction + * @param custom_functions a map of Initializer lambdas that will be queried if the Optimizer is + * not found in the standard keys + * @return the Optimizer object + */ + public static Optimizer get( + Ops tf, Object optimizerFunction, Map> custom_functions) { + if (optimizerFunction != null) { + if (optimizerFunction instanceof String) { + String s = + optimizerFunction + .toString(); // do this for Java 8 rather than Pattern Matching for instanceof + Function function = map.get(s); + if (function == null && custom_functions != null) { + function = custom_functions.get(s); + } + return function != null ? function.apply(tf) : null; + } else if (optimizerFunction instanceof Class) { + Class c = (Class) optimizerFunction; // do this for Java 8 rather than Pattern Matching for + // instanceof + try { + Constructor ctor = c.getConstructor(Ops.class); + return (Optimizer) ctor.newInstance(tf); + } catch (NoSuchMethodException + | InstantiationException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException ex) { + Logger.getLogger(Optimizers.class.getName()).log(Level.SEVERE, null, ex); + } + } else if (optimizerFunction instanceof Optimizer) { + return (Optimizer) optimizerFunction; + } else if (optimizerFunction instanceof Function) { + return ((Function) optimizerFunction).apply(tf); + } else if (optimizerFunction instanceof Supplier) { + return ((Supplier) optimizerFunction).get(); + } + } else { + return null; + } + + throw new IllegalArgumentException( + "optimizerFunction must be a symbolic name, Optimizer, Function, Supplier or a Class object"); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/RMSProp.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/RMSProp.java new file mode 100644 index 00000000000..c66c6bdd388 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/RMSProp.java @@ -0,0 +1,201 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.Map; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.op.Ops; + +/** RMSProp Optimizer that implements the RMSProp algorithm. */ +public class RMSProp extends org.tensorflow.framework.optimizers.RMSProp + implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String DECAY_KEY = "decay"; + public static final String MOMENTUM_KEY = "momentum"; + public static final String EPSILON_KEY = "epsilon"; + public static final String CENTERED_KEY = "centered"; + + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float DECAY_DEFAULT = 0.9F; + public static final float MOMENTUM_DEFAULT = 0.0F; + public static final float EPSILON_DEFAULT = 1e-07F; + public static final boolean CENTERED_DEFAULT = false; + + private Map config = new HashMap<>(); + private float learningRate; + + /** + * Create an RMSProp Optimizer with the following defaults, name="RMSProp", learning_rate=0.001, + * decay=0.9, momentum=0.0, epsilon=1e-07, centered=false + * + * @param tf the TensorFlow Ops + */ + public RMSProp(Ops tf) { + this( + tf, + LEARNING_RATE_DEFAULT, + DECAY_DEFAULT, + MOMENTUM_DEFAULT, + EPSILON_DEFAULT, + CENTERED_DEFAULT); + } + + /** + * Create an RMSProp Optimizer with the following defaults, name="RMSProp", decay=0.9, + * momentum=0.0, epsilon=1e-07, centered=false + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. + */ + public RMSProp(Ops tf, float learningRate) { + this(tf, learningRate, DECAY_DEFAULT, MOMENTUM_DEFAULT, EPSILON_DEFAULT, CENTERED_DEFAULT); + } + + /** + * Create an RMSProp Optimizer with the following defaults, decay=0.9, momentum=0.0, + * epsilon=1e-07, centered=false + * + * @param tf the TensorFlow Ops + * @param name prefix for the operations created when applying gradients. Defaults to "RMSProp" + * @param learningRate The learning rate. + */ + public RMSProp(Ops tf, String name, float learningRate) { + this( + tf, name, learningRate, DECAY_DEFAULT, MOMENTUM_DEFAULT, EPSILON_DEFAULT, CENTERED_DEFAULT); + } + + /** + * Create an RMSProp Optimizer + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. Defaults to 0.001. + * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. + * @param momentum hyperparameter that accelerates descent in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + * @param epsilon A small constant for numerical stability. + * @param centered If True, gradients are normalized by the estimated variance of the gradient; if + * False, by the uncentered second moment. + */ + public RMSProp( + Ops tf, float learningRate, float decay, float momentum, float epsilon, boolean centered) { + super(assertGraph(tf), learningRate, decay, momentum, epsilon, centered); + initConfig(learningRate, decay, momentum, epsilon, centered); + } + + /** + * Create an RMSProp Optimizer + * + * @param tf the TensorFlow Ops + * @param name prefix for the operations created when applying gradients. Defaults to "RMSProp" + * @param learningRate The learning rate. Defaults to 0.001. + * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. + * @param momentum hyperparameter that accelerates descent in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + * @param epsilon A small constant for numerical stability. + * @param centered If True, gradients are normalized by the estimated variance of the gradient; if + * False, by the uncentered second moment. + */ + public RMSProp( + Ops tf, + String name, + float learningRate, + float decay, + float momentum, + float epsilon, + boolean centered) { + super(assertGraph(tf), name, learningRate, decay, momentum, epsilon, centered); + initConfig(learningRate, decay, momentum, epsilon, centered); + } + + /** + * Create a RMSProp Optimizer using a configuration + * + * @param tf the TensorFlow Ops + * @param config a config object to initialize the Optimizer, the config object has keys for + * "name", "learning_rate", "decay", "momentum", "epsilon" and "centered". If a key is missing + * the default value is used. + * @return the RMSProp optimizer + */ + public static RMSProp fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create a RMSProp Optimizer using a configuration + * + * @param tf the TensorFlow Ops + * @param config a config object to initialize the Optimizer, the config object has keys for + * "name", "learning_rate", "decay", "momentum", "epsilon" and "centered". If a key is missing + * the default value is used. + * @return the RMSProp optimizer + */ + public static RMSProp create(Ops tf, Map config) { + + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float decay = (float) config.getOrDefault(DECAY_KEY, DECAY_DEFAULT); + float momentum = (float) config.getOrDefault(MOMENTUM_KEY, MOMENTUM_DEFAULT); + float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); + boolean centered = (boolean) config.getOrDefault(CENTERED_KEY, CENTERED_DEFAULT); + if (name == null) { + return new RMSProp(tf, learningRate, decay, momentum, epsilon, centered); + } else { + return new RMSProp(tf, name, learningRate, decay, momentum, epsilon, centered); + } + } + + /** + * Initialize the configuration based on which constructor is called. + * + * @param learningRate The learning rate. Defaults to 0.001. + * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. + * @param momentum hyperparameter that accelerates descent in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + * @param epsilon A small constant for numerical stability. + * @param centered If True, gradients are normalized by the estimated variance of the gradient; if + * False, by the uncentered second moment. + */ + private void initConfig( + float learningRate, float decay, float momentum, float epsilon, boolean centered) { + this.learningRate = learningRate; + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(DECAY_KEY, decay); + config.put(MOMENTUM_KEY, momentum); + config.put(EPSILON_KEY, epsilon); + config.put(CENTERED_KEY, centered); + } + + /** {@inheritDoc} */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java new file mode 100644 index 00000000000..2faf777b4ad --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java @@ -0,0 +1,199 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the ); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.HashMap; +import java.util.Map; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; +import org.tensorflow.op.Ops; + +/** Stochastic Gradient Descent and momentum optimizer. */ +public class SGD extends org.tensorflow.framework.optimizers.Momentum + implements OptimizerInterface { + + public static final String LEARNING_RATE_KEY = "learning_rate"; + public static final String MOMENTUM_KEY = "momentum"; + public static final String NESTEROV_KEY = "nesterov"; + + public static final float LEARNING_RATE_DEFAULT = 0.01F; + public static final float MOMENTUM_DEFAULT = 0.0F; + public static final boolean NESTEROV_DEFAULT = false; + + private Map config = new HashMap<>(); + private float learningRate; + + /** + * Create a Stochastic Gradient Descent optimizer using defaults: name="SGD", learning_rate=0.01, + * momentum=0.0, and nesterov=false + * + * @param tf the TensorFlow Ops + */ + public SGD(Ops tf) { + this(tf, LEARNING_RATE_DEFAULT, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); + } + + /** + * Create a Stochastic gradient descent optimizer using defaults: name="SGD", momentum=0.0, and + * nesterov=false + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. Defaults to 0.01. + */ + public SGD(Ops tf, float learningRate) { + this(tf, learningRate, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); + } + + /** + * Create a Stochastic gradient descent optimizer using defaults: name="SGD", and nesterov=false + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. Defaults to 0.01. + * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + */ + public SGD(Ops tf, float learningRate, float momentum) { + this(tf, learningRate, momentum, NESTEROV_DEFAULT); + } + + /** + * Create a Stochastic gradient descent optimizer using defaults: momentum=0.0, and nesterov=false + * + * @param tf the TensorFlow Ops + * @param name prefix for the operations created when applying gradients + * @param learningRate The learning rate. Defaults to 0.01. + */ + public SGD(Ops tf, String name, float learningRate) { + this(tf, name, learningRate, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); + } + + /** + * create a Stochastic gradient descent optimizer using defaults: momentum=0.0, and nesterov=false + * + * @param tf the TensorFlow Ops + * @param name prefix for the operations created when applying gradients + * @param learningRate The learning rate. Defaults to 0.01. + * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + */ + public SGD(Ops tf, String name, float learningRate, float momentum) { + this(tf, name, learningRate, momentum, NESTEROV_DEFAULT); + } + + /** + * Create a Stochastic gradient descent optimizer + * + * @param tf the TensorFlow Ops + * @param learningRate The learning rate. Defaults to 0.01. + * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + * @param useNesterov Whether to apply Nesterov momentum. Defaults to `false`. + */ + public SGD(Ops tf, float learningRate, float momentum, boolean useNesterov) { + super(assertGraph(tf), learningRate, momentum, useNesterov); + assert momentum >= 0.0F && momentum <= 1.0F : "\"momentum\" must be between [0, 1]."; + initConfig(learningRate, momentum, useNesterov); + } + + /** + * Create a Stochastic gradient descent optimizer + * + * @param tf the TensorFlow Ops + * @param name prefix for the operations created when applying gradients + * @param learningRate The learning rate. Defaults to 0.01. + * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + * @param useNesterov Whether to apply Nesterov momentum. Defaults to `false`. + */ + public SGD(Ops tf, String name, float learningRate, float momentum, boolean useNesterov) { + super(assertGraph(tf), name, learningRate, momentum, useNesterov); + assert momentum >= 0.0F && momentum <= 1.0F : "\"momentum\" must be between [0, 1]."; + initConfig(learningRate, momentum, useNesterov); + } + + /** + * Create a Stochastic gradient descent optimizer + * + * @param tf the TensorFlow Ops + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate", "momentum", and "nesterov". If a key is missing the default value is used. + * @return the Stochastic gradient descent optimizer + */ + public static SGD fromConfig(Ops tf, Map config) { + return create(tf, config); + } + + /** + * Create a Stochastic gradient descent optimizer + * + * @param tf the TensorFlow Ops + * @param config a config object to initialize, the config object has keys for "name", + * "learning_rate", "momentum", and "nesterov". If a key is missing the default value is used. + * @return the Stochastic gradient descent optimizer + */ + public static SGD create(Ops tf, Map config) { + + String name = (String) config.get(NAME_KEY); + float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + float momentum = (float) config.getOrDefault(MOMENTUM_KEY, MOMENTUM_DEFAULT); + boolean nesterov = (boolean) config.getOrDefault(NESTEROV_KEY, NESTEROV_DEFAULT); + if (name == null) { + return new SGD(tf, learningRate, momentum, nesterov); + } else { + return new SGD(tf, name, learningRate, momentum, nesterov); + } + } + + /** + * Initialize the configuration ased on which constructor is called. + * + * @param learningRate learningRate The learning rate. Defaults to 0.01. + * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens + * oscillations. Must be between [0, 1]. + * @param useNesterov Whether to apply Nesterov momentum. Defaults to `false`. + */ + private void initConfig(float learningRate, float momentum, boolean useNesterov) { + this.learningRate = learningRate; + config.put(NAME_KEY, this.getOptimizerName()); + config.put(LEARNING_RATE_KEY, learningRate); + config.put(MOMENTUM_KEY, momentum); + config.put(NESTEROV_KEY, useNesterov); + } + + /** { @inheritDoc } */ + @Override + public Map getConfig() { + return config; + } + + /** {@inheritDoc} */ + @Override + public float getLearningRate() { + return this.learningRate; + } + + /** {@inheritDoc} */ + @Override + public void setLearningRate(float learningRate) { + this.learningRate = learningRate; + } + + // overide the momentum name to return "SGD" + /** {@inheritDoc} */ + @Override + public String getOptimizerName() { + return "SGD"; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java new file mode 100644 index 00000000000..f04ed7bcd70 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java @@ -0,0 +1,717 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.NdArray; +import org.tensorflow.ndarray.NdArrays; +import org.tensorflow.ndarray.Shape; + +// TODO used in the Callbacks, this should be a part of NDArray? +/** NDArray math Utilities */ +public class ND { + + /** + * Returns a string representation of the contents of the specified array. + * + *

The string representation consists of a list of the array's elements, enclosed in square + * brackets ("[]"). Adjacent elements are separated by the characters ", " (a comma followed by a + * space). Elements are converted to strings as by String.valueOf(int). Returns "null" if a is + * null. + * + * @param array the array to convert. + * @return the String representaion of the contents of the specified array + */ + public static String toString(NdArray array) { + if (array == null) return "null"; + StringBuilder sb = new StringBuilder(); + sb.append("["); + AtomicBoolean first = new AtomicBoolean(true); + array + .elements(0) + .forEachIndexed( + (idx, v) -> { + if (!first.get()) { + sb.append(", "); + } else { + first.set(false); + } + Object f = v.getObject(); + if (v.rank() == 0) { + sb.append(f); + } else { + sb.append(toString(v)); + } + }); + sb.append("]"); + return sb.toString(); + } + + /** + * Transforms a flat index into coordinates based on shape. + * + * @param shape the shape + * @param index the index + * @return the coordinates + */ + private static long[] getCoordinates(Shape shape, long index) { + long[] coordinates = new long[shape.numDimensions()]; + + int numDims = shape.numDimensions(); + int i = numDims - 1; + for (; i >= 0; i--) { + long size = shape.size(i); + long mod = index % size; + coordinates[i] = mod; + index -= mod; + } + return coordinates; + } + + /** + * Gets the square root of an array. + * + * @param a the array + * @return the square root of the array. + */ + public static FloatNdArray sqrt(FloatNdArray a) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.sqrt(v.getFloat()), idx); + }); + return result; + } + + /** + * Gets the square of an array. + * + * @param a the array + * @return the square of the array. + */ + public static FloatNdArray square(FloatNdArray a) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() * v.getFloat(), idx); + }); + return result; + } + + /** + * Adds two arrays + * + * @param a the array + * @param b the array + * @return the resulting array from the add operation + */ + public static FloatNdArray add(FloatNdArray a, FloatNdArray b) { + assert (a.shape().size() == b.shape().size()); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() + b.getFloat(idx), idx); + }); + return result; + } + + /** + * Adds an array with a scalar value + * + * @param a the array + * @param scalar the scalar value + * @return the resulting array from the add operation + */ + public static FloatNdArray add(FloatNdArray a, float scalar) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() + scalar, idx); + }); + return result; + } + + /** + * Adds an array with a scalar value + * + * @param scalar the scalar value + * @param a the array + * @return the resulting array from the add operation + */ + public static FloatNdArray add(float scalar, FloatNdArray a) { + return add(a, scalar); + } + + /** + * subtracts one array from the other + * + * @param a the minuend array + * @param b the subtrahend array + * @return the resulting array from the subtraction operation + */ + public static FloatNdArray sub(FloatNdArray a, FloatNdArray b) { + assert (a.shape().size() == b.shape().size()); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() - b.getFloat(idx), idx); + }); + return result; + } + + /** + * subtracte scalar from an array + * + * @param a the minuend array + * @param scalar the subtrahend value + * @return the resulting array from the subtraction operation + */ + public static FloatNdArray sub(FloatNdArray a, float scalar) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() - scalar, idx); + }); + return result; + } + + /** + * subtract an array from a scalar + * + * @param scalar the minuend value + * @param a the subtrahend array + * @return the resulting array from the subtraction operation + */ + public static FloatNdArray sub(float scalar, FloatNdArray a) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(scalar - v.getFloat(), idx); + }); + return result; + } + + /** + * Multiply 2 arrays + * + * @param a the first array + * @param b the second array + * @return the resulting array from the muliply operation + */ + public static FloatNdArray mul(FloatNdArray a, FloatNdArray b) { + assert a.shape().equals(b.shape()) + : String.format( + "ValueError: operands do not have same shapes %s %s ", a.shape(), b.shape()); + boolean sameSize = a.shape().size() == b.shape().size(); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + if (sameSize) { + result.setFloat(v.getFloat() * b.getFloat(idx), idx); + } else { + float value = v.getFloat() * b.getFloat(idx[0], 0L); + result.setFloat(value, idx); + } + }); + return result; + } + + /** + * Multiply an array with a scalar value + * + * @param a the array + * @param scalar the scalar value + * @return the resulting array from the Multiply operation + */ + public static FloatNdArray mul(FloatNdArray a, float scalar) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + if (a.shape().isScalar()) { + a.scalars().forEach(f -> result.setFloat(f.getFloat() * scalar)); + } else { + a.scalars().forEachIndexed((idx, f) -> result.setFloat(f.getFloat() * scalar, idx)); + } + + return result; + } + + /** + * Multiply a scalar value with an array + * + * @param scalar the scalar value + * @param a the array + * @return the resulting array from the Multiply operation + */ + public static FloatNdArray mul(float scalar, FloatNdArray a) { + return mul(a, scalar); + } + + /** + * Divide two arrays + * + * @param a the dividend array + * @param b the divisor array + * @return the resulting array from the Divide operation + */ + public static FloatNdArray div(FloatNdArray a, FloatNdArray b) { + assert (a.shape().size() == b.shape().size()); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() / b.getFloat(idx), idx); + }); + return result; + } + + /** + * Divide an array by a scalar + * + * @param a the dividend array + * @param scalar the scalar divisor + * @return the resulting array from the Divide operation + */ + public static FloatNdArray div(FloatNdArray a, float scalar) { + assert (scalar != 0); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat(v.getFloat() / scalar, idx); + }); + return result; + } + + /** + * Divide a scalar by an array + * + * @param scalar the scalar dividend + * @param a the divisor array + * @return the resulting array from the Divide operation + */ + public static FloatNdArray div(float scalar, FloatNdArray a) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + float value = v.getFloat() == 0.0F ? Float.NaN : scalar / v.getFloat(); + result.setFloat(value, idx); + }); + return result; + } + + /** + * Raise the first array by the power of the second array + * + * @param a the first array + * @param b the second array + * @return the array result of the power operation + */ + public static FloatNdArray pow(FloatNdArray a, FloatNdArray b) { + assert (a.shape().size() == b.shape().size()); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.pow(v.getFloat(), b.getFloat(idx)), idx); + }); + return result; + } + + /** + * Raise the first array by the power of the scalar value + * + * @param a the first array + * @param scalar the scalar value + * @return the array result of the power operation + */ + public static FloatNdArray pow(FloatNdArray a, float scalar) { + assert (scalar != 0); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.pow(v.getFloat(), scalar), idx); + }); + return result; + } + + /** + * Raise the scalar value by the power of the array + * + * @param scalar the scalar value + * @param a the first array + * @return the array result of the power operation + */ + public static FloatNdArray pow(float scalar, FloatNdArray a) { + assert (scalar != 0); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.pow(scalar, v.getFloat()), idx); + }); + return result; + } + + /** + * Flatten an array to 1D + * + * @param a the array to flatten + * @return the flattened array + */ + public static float[] flatten(FloatNdArray a) { + float[] result = new float[(int) a.shape().size()]; + int nDims = a.shape().numDimensions(); + AtomicInteger counter = new AtomicInteger(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result[counter.getAndAdd(1)] = v.getFloat(); + }); + return result; + } + + /** + * Get the maximum value of the array + * + * @param a the array + * @return the maximum value of the array + */ + public static float max(FloatNdArray a) { + AtomicReference maximum = new AtomicReference<>(Float.MIN_VALUE); + a.scalars().forEach(f -> maximum.set(Math.max(maximum.get(), f.getFloat()))); + return maximum.get(); + } + + /** + * Get the minimum value of the array + * + * @param a the array + * @return the minimum value of the array + */ + public static float min(FloatNdArray a) { + AtomicReference minimum = new AtomicReference<>(Float.MAX_VALUE); + a.scalars().forEach(f -> minimum.set(Math.min(minimum.get(), f.getFloat()))); + return minimum.get(); + } + + /** + * Get the maximum value of comparing the arrays + * + * @param a the first array + * @param a the second array + * @return the resulting array with the maximum values between each element of the arrays. + * @throws java.lang.AssertionError if the two arrays are not the same size. + */ + public static FloatNdArray max(FloatNdArray a, FloatNdArray b) { + assert (a.shape().size() == b.shape().size()); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.max(v.getFloat(), b.getFloat(idx)), idx); + }); + return result; + } + + /** + * Get the maximum value of comparing each item of the array to scalar + * + * @param a the array + * @param scalar the scalar value + * @return the resulting array with the maximum values between each element of the array and the + * scalar value + */ + public static FloatNdArray max(FloatNdArray a, float scalar) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.max(v.getFloat(), scalar), idx); + }); + return result; + } + + /** + * Get the maximum value of comparing each item of the array to scalar + * + * @param scalar the scalar value + * @param a the array + * @return the resulting array with the maximum values between each element of the array and the + * scalar value + */ + public static FloatNdArray max(float scalar, FloatNdArray a) { + return max(a, scalar); + } + + /** + * Get the minimum value of comparing the arrays + * + * @param a the first array + * @param a the second array + * @return the resulting array with the minimum values between each element of the arrays. + * @throws java.lang.AssertionError if the two arrays are not the same size. + */ + public static FloatNdArray min(FloatNdArray a, FloatNdArray b) { + assert (a.shape().size() == b.shape().size()); + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.min(v.getFloat(), b.getFloat(idx)), idx); + }); + return result; + } + + /** + * Get the minimum value of comparing each item of the array to scalar + * + * @param a the array + * @param scalar the scalar value + * @return the resulting array with the minimum values between each element of the array and the + * scalar value + */ + public static FloatNdArray min(FloatNdArray a, float scalar) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + int nDims = a.shape().numDimensions(); + a.elements(nDims - 1) + .forEachIndexed( + (idx, v) -> { + result.setFloat((float) Math.min(v.getFloat(), scalar), idx); + }); + return result; + } + + /** + * Get the minimum value of comparing each item of the array to scalar + * + * @param scalar the scalar value + * @param a the array + * @return the resulting array with the minimum values between each element of the array and the + * scalar value + */ + public static FloatNdArray min(float scalar, FloatNdArray a) { + return min(a, scalar); + } + + /** + * Get the absolute value of each member of the array + * + * @param a the array + * @return the array with the absolute value of each item. + */ + public static FloatNdArray abs(FloatNdArray a) { + FloatNdArray result = NdArrays.ofFloats(a.shape()); + a.scalars().forEachIndexed((idx, f) -> result.setFloat((float) Math.abs(f.getFloat()), idx)); + return result; + } + + /** + * Sum all elements of an array + * + * @param a the array + * @return an a array with one element containing the sum. + */ + public static FloatNdArray sum(FloatNdArray a) { + AtomicReference sum = new AtomicReference<>(0.f); + a.scalars().forEach(f -> sum.set(sum.get() + f.getFloat())); + return NdArrays.scalarOf(sum.get()); + } + + /** + * Sum all elements of an array based on the specified axis + * + * @param a the array + * @param axis the axis to sum + * @return an a array the sum over the axis less the diemsnion + */ + public static FloatNdArray sum(FloatNdArray a, int axis) { + return sum(a, axis, false); + } + + /** + * Sum all elements of an array based on the specified axis + * + * @param a the array + * @param axis the axis to sum + * @param keepDims indicates whether the dimensions over the sum should be kept or not. + * @return an a array the sum over the axis + */ + public static FloatNdArray sum(FloatNdArray a, int axis, boolean keepDims) { + Shape shape = a.shape(); + int nDims = shape.numDimensions(); + int xis = nDims - 1 - axis; + long totalSize = shape.size(); + long axisSize = shape.size(xis); + final float[] sums = new float[(int) axisSize]; + + a.scalars() + .forEachIndexed( + (idx, f) -> { + sums[(int) idx[xis]] += f.getFloat(); + }); + + if (keepDims) { + long[] newDims = shape.asArray(); + newDims[axis] = 1; + final AtomicInteger counter = new AtomicInteger(); + FloatNdArray arrayK = NdArrays.ofFloats(Shape.of(newDims)); + arrayK + .elements(newDims.length - 1) + .forEachIndexed( + (idx, v) -> { + v.setFloat(sums[counter.getAndAdd(1)]); + }); + return arrayK; + } else { + return NdArrays.vectorOf(sums); + } + } + + /** + * Sum all elements of an array based on the specified axis + * + * @param a the array + * @param axes the axis to sum + * @param keepDims indicates whether the dimensions over the sum should be kept or not. + * @return an a array the sum over the axis + */ + public static FloatNdArray sum(FloatNdArray a, Integer[] axes, boolean keepDims) { + Shape shape = a.shape(); + if (axes == null) { + FloatNdArray result = sum(a); + if (keepDims) { + float scalar = result.getFloat(0); + long[] dims = {1, 1}; + Shape bShape = Shape.of(dims); + FloatNdArray resultK = NdArrays.ofFloats(bShape); + resultK.setFloat(scalar, 0, 0); + return resultK; + } + return result; + } else if (axes.length == 1) { + return sum(a, axes[0], keepDims); + } else { + // TODO + throw new UnsupportedOperationException("Multi Axis Not implemented Yet"); + } + } + + /** + * Calculate the l2 norm of the array + * + * @param x the array + * @return the l2 norm of the array + */ + public static FloatNdArray l2_norm(FloatNdArray x) { + return l2_norm(x, -1); + } + + /** + * Calculate the l2 norm of the array + * + * @param x the array + * @param axis the axis to calculate over + * @return the l2 norm of the array + */ + public static FloatNdArray l2_norm(FloatNdArray x, int axis) { + float epsilon = 1e-12F; + FloatNdArray square_sum = ND.sum(ND.square(x), axis, true); + FloatNdArray x_inv_norm = ND.div(1, ND.sqrt(ND.max(square_sum, epsilon))); + return ND.mul(x, x_inv_norm); + } + + /** + * Print the array to System.out. + * + * @param a the array + */ + public static void print(FloatNdArray a) { + System.out.println("Shape: " + a.shape()); + if (a.shape().isScalar()) { + a.scalars().forEach(f -> System.out.printf("Scalar: == %f\n", f.getFloat())); + } else { + a.elements(a.shape().numDimensions() - 1) + .forEachIndexed( + (idx, v) -> { + System.out.printf("%s == %f\n", Arrays.toString(idx), v.getFloat()); + }); + } + System.out.println(); + } + + /** + * Print the array to System.out. + * + * @param header a string to print before the print of the array + * @param a the array + */ + public static void print(String header, FloatNdArray a) { + System.out.print(header); + System.out.print(" : "); + + print(a); + } + + /** + * Convert a float array to an NdArray with the provided shape. + * + * @param y the float array + * @param shape the shape for the NdArray + * @return a float array to an NdArray with the provided shape. + */ + public static FloatNdArray create(float[] y, Shape shape) { + FloatNdArray result = NdArrays.ofFloats(shape); + AtomicInteger index = new AtomicInteger(); + result + .elements(shape.numDimensions() - 1) + .forEachIndexed( + (idx, v) -> { + v.setFloat(y[index.getAndAdd(1)]); + }); + return result; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java new file mode 100644 index 00000000000..ef2f20e648a --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java @@ -0,0 +1,81 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** Utility that handles Python style placholder formats, used in Callbacks */ +public class PlaceholderStringFormat { + private static final Pattern PYTHON_MATCH = Pattern.compile("\\{(\\w+):([\\w\\.]+)\\}"); + + /** + * Convert a Python style placeholder file path format to file path + * + * @param filename the placeholder file path format + * @param epoch the epoch number to place into the filename format + * @param logs a Dictionary of log values that are replaced into the filename format + * @return the resulting filename after applying all placeholders. + */ + public static String convertFilePath(String filename, int epoch, Map logs) { + List vars = new ArrayList<>(); + Map valMap = new HashMap<>(); + String format = getFilePath(filename, vars); + List objects = new ArrayList<>(); + vars.forEach( + key -> { + if (key.equals("epoch")) objects.add(epoch); + else objects.add((Number) logs.get(key)); + }); + return String.format(format, objects.toArray(new Number[objects.size()])); + } + + /** + * Get the variable identifiers from the placeholder filename string + * + * @param filename the filename name in Placeholder format. + * @param vars the list of variables from the caller, with added variables parsed from the + * filename + * @return a string in String.format style + */ + private static String getFilePath(String filename, List vars) { + Matcher m = PYTHON_MATCH.matcher(filename); + StringBuilder sb = new StringBuilder(); + int beginIndex = 0; + Map indexMap = new HashMap<>(); + int lastIndex = 1; + while (m.find()) { + int start = m.start(0); + int end = m.end(0); + String variable = m.group(1); + vars.add(variable); + String format = m.group(2); + Integer index = indexMap.get(variable); + if (index == null) { + indexMap.put(variable, lastIndex); + index = lastIndex++; + } + sb.append(filename.substring(beginIndex, start)); + sb.append('%').append(index).append('$').append(format); + beginIndex = end; + } + sb.append(filename.substring(beginIndex)); + return sb.toString(); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java new file mode 100644 index 00000000000..9a21c50893f --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java @@ -0,0 +1,152 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import org.tensorflow.DataType; +import org.tensorflow.Tensor; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TUint8; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TString; + +/** + * Utility to print Tensor values + */ +public class PrintUtils { + + /** + * Print a tensor's values + * @param tensor the tensor to print + */ + public static void print(Tensor tensor) { + switch(tensor.dataType().name()) { + case "BFLOAT16": + printTBfloat16(tensor); + break; + case "FLOAT16": + printTFloat16(tensor); + break; + case "FLOAT": + printTFloat32(tensor); + break; + case "DOUBLE": + printTFloat64(tensor); + break; + case "INT32": + printTInt32(tensor); + break; + case "INT64": + printTInt64(tensor); + break; + case "UINT8": + printTUint8(tensor); + break; + case "BOOL": + printTBool(tensor); + break; + case "STRING": + printTString(tensor); + break; + default: + break; + } + + } + + /** + * Print a boolean Tensot + * @param t the tensor to print + */ + public static void printTBool(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getBoolean() + ", ")); + System.out.println(); + } + + /** + * Print a String Tensot + * @param t the tensor to print + */ + public static void printTString(Tensor t) { + t.data().scalars().forEach(s -> System.out.print("\"" + s.getObject() + "\", ")); + System.out.println(); + } + + /** + * Print a TBfloat16 Tensor + * @param t the tensor to print + */ + public static void printTBfloat16(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getFloat() + ", ")); + System.out.println(); + } + + /** + * Print a uint8 Tensor + * @param t the tensor to print + */ + public static void printTUint8(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(String.format("0x%x",s.getByte()) + ", ")); + System.out.println(); + } + + /** + * Print an int32 Tensor + * @param t the tensor to print + */ + public static void printTInt32(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getInt() + ", ")); + System.out.println(); + } + + /** + * Print an int64 Tensor + * @param t the tensor to print + */ + public static void printTInt64(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getLong() + ", ")); + System.out.println(); + } + + /** + * Print a Float16 tensor. + * @param t the tensor to print + */ + public static void printTFloat16(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getFloat() + "F, ")); + System.out.println(); + } + + /** + * Print a Float32 tensor. + * @param t the tensor to print + */ + public static void printTFloat32(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getFloat() + "F, ")); + System.out.println(); + } + /** + * Print a Float64 tensor. + * @param t the tensor to print + */ + public static void printTFloat64(Tensor t) { + t.data().scalars().forEach(s -> System.out.print(s.getDouble() + ", ")); + System.out.println(); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java new file mode 100644 index 00000000000..9dd3de4e1a2 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java @@ -0,0 +1,311 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.io.Console; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +/** + * Display a progess bar either to the Console or System.out. + * + * @author jbclarke + */ +public class ProgressBar { + private final static double MICRO_SECONDS = 1E-3; + private final static long MILLI_SECOND = 1l; + private final static long SECOND = 1000L; + private final static long MINUTE = 60L * SECOND; + private final static long HOUR = 60L * MINUTE; + + private Integer target; + private int width; + private boolean verbose; + private long interval; + private List statefulMetrics; + private String unit; + + private int totalWidth; + private int seenSoFar; + private final Map values = new HashMap<>(); + private final List valuesOrder = new ArrayList<>(); + + private final long start = System.currentTimeMillis(); + private long lastUpdate = 0; + + // will be null if console is not present + private final Console console = System.console(); + + /** + * Create a ProgressBar + */ + public ProgressBar() { + this(null, 30, true, 50, "step", null ); + + } + + /** + * Create a ProgressBar + * + * @param target Total number of steps expected, null if unknown. + */ + public ProgressBar(Integer target) { + this(target, 30, true, 50, "step", null ); + + } + + /** + * Create a ProgressBar + * + * @param target Total number of steps expected, null if unknown. + * @param verbose Verbosity mode + * @param unit Display name for step counts (usually "step" or "sample"). + * @param statefulMetrics + */ + public ProgressBar(Integer target, boolean verbose, String unit, List statefulMetrics) { + this(target, 30, verbose, 50, unit, statefulMetrics ); + + } + + + + /** + * Create a ProgressBar + * + * @param target Total number of steps expected, null if unknown. + * @param width Progress bar width on screen. + * @param verbose Verbosity mode + * @param interval Minimum visual progress update interval (in milliseconds). + * @param unit Display name for step counts (usually "step" or "sample"). + * @param statefulMetrics + */ + public ProgressBar(Integer target, int width, boolean verbose, long interval, String unit, List statefulMetrics) { + this.target = target; + this.width = width; + this.verbose = verbose; + this.interval = interval; + this.unit = unit; + this.statefulMetrics = statefulMetrics == null ? Collections.EMPTY_LIST : statefulMetrics; + } + + /** + * Updates the progress bar. + * + * @param current Index of current step. + * @param values List of Pairs: `(name, value_for_last_step)`. If `name` is in + * `statefulMetrics`, `value_for_last_step` will be displayed as-is. + * Else, an average of the metric over time will be displayed. + */ + public void update(Integer current, List> values) { + update(current, values, null); + } + + /** + * Updates the progress bar. + * + * @param current Index of current step. + * @param values List of Entry: `(name, value_for_last_step)`. If `name` is in + * `statefulMetrics`, `value_for_last_step` will be displayed as-is. + * Else, an average of the metric over time will be displayed. + * @param finalize Whether this is the last update for the progress bar. If + * `None`, defaults to `current >= self.target`. + */ + public void update(Integer current, List> values, Boolean finalize) { + if(finalize == null) { + if(this.getTarget() == null) { + finalize = false; + }else { + finalize = current >= this.getTarget(); + } + } + values = values == null ? Collections.EMPTY_LIST : values; + + values.forEach(e -> { + if(!this.valuesOrder.contains(e.getKey())) { + this.valuesOrder.add(e.getKey()); + } + if(!this.statefulMetrics.contains(e.getKey())) { + int valueBase = Math.max(current - this.seenSoFar, 1); + if(!this.values.containsKey(e.getKey())) { + this.values.put(e.getKey(), new Number[] { e.getValue().doubleValue() * valueBase, valueBase}); + }else { + Number[] n = this.values.get(e.getKey()); + n[0] = n[0].doubleValue() + e.getValue().doubleValue() * valueBase; + n[1] = n[1].doubleValue() + valueBase; + } + }else { + this.values.put(e.getKey(),new Number[] { e.getValue().doubleValue(), 1}); + } + + }); + + this.seenSoFar = current; + long now = System.currentTimeMillis(); + + StringBuilder info = new StringBuilder(String.format(" - %.0fs", (double)(now - this.start)/(double)SECOND)); + + if(this.verbose) { + if(now - this.lastUpdate < this.interval && !finalize) { + return; + } + } + int prevTotalWidth = this.totalWidth; + if (this.console != null) { + for(int i = 0; i < prevTotalWidth; i++) { + this.console.printf("\b"); + } + this.console.printf("\r"); + } else { + System.out.println(); + } + StringBuilder bar = new StringBuilder(); + if(this.getTarget() != null) { + int numDigits = (int)Math.log10(this.getTarget()) + 1; + bar.append(String.format("%" + numDigits + "d/%d [", current, this.getTarget())); + double prog = (double)current / this.getTarget(); + int progWidth = (int)(this.width * prog); + if(progWidth >= 0) { + for(int i = 0; i < progWidth-1; i++) + bar.append('='); + if(current < this.getTarget()) + bar.append('>'); + else + bar.append('='); + for(int i = 0; i < this.width - progWidth; i++) + bar.append('.'); + bar.append(']'); + } + }else { + bar.append(String.format("%7d/Unknown", current)); + } + this.totalWidth = bar.length(); + if(this.console != null) { + this.console.printf(bar.toString()); + }else { + System.out.print(bar.toString()); + } + // in millis + double timePerUnit = current != null ? (double)(now - this.start) / current: 0.0; + if(this.getTarget() == null || finalize) { + if(timePerUnit >= SECOND || timePerUnit == 0.0) { // seconds + info.append(String.format(" %.0fs/%s", timePerUnit/SECOND, this.unit)); + }else if(timePerUnit >= 1) { // milliseconds + info.append(String.format(" %.0fms/%s", timePerUnit, this.unit)); + }else { // microseconds + info.append(String.format(" %.0fus/%s", timePerUnit*SECOND, this.unit)); + } + }else { + double eta = timePerUnit * (this.getTarget() - current); + String etaFormat; + if(eta >= HOUR) { // greater than an hour + etaFormat = String.format("%d:%02d:%02d", // hh:mm:ss + (int) (eta / HOUR), + (int) (eta / HOUR / MINUTE), + (int) (eta % MINUTE)/SECOND); + }else if(eta >= MINUTE) { + etaFormat = String.format("%d:%02d", // mm:ss + (int) (eta / MINUTE), + (int) (eta % MINUTE)/SECOND); + }else { + etaFormat = String.format("%ds", (int)(eta/SECOND)); + } + info.append(" - ETA: ").append(etaFormat); + } + + this.valuesOrder.forEach(key -> { + info.append(String.format(" - %s:", key)); + Number[] val = this.values.get(key); + double avg = val[0].doubleValue() / Math.max(1.0, val[1].doubleValue()); + if(Math.abs(avg) > 1e-3) + info.append(String.format(" %.4f", avg)); + else + info.append(String.format(" %.4e", avg)); + }); + this.totalWidth += info.length(); + if(prevTotalWidth > this.totalWidth) + for(int i = 0; i < prevTotalWidth - this.totalWidth; i++) + info.append(' '); + if(finalize) { + info.append('\n'); + } + + if(this.console != null) { + console.printf(info.toString()); + console.flush(); + }else { + System.out.print(info.toString()); + System.out.flush(); + } + this.lastUpdate = now; + } + + /** + * updates the progress bar by one unit + */ + public void increment() { + add(1); + } + + /** + * updates the progress bar by one unit + * + * @param values List of Entry: `(name, value_for_last_step)`. If `name` is in + * `statefulMetrics`, `value_for_last_step` will be displayed as-is. + * Else, an average of the metric over time will be displayed. + */ + public void increment(List> values) { + add(1, values); + } + + /** + * update the progress bar + * + * @param n the number of units to add to the current number + */ + public void add(int n) { + add(n, null); + } + + /** + * update the progress bar + * + * @param n the number of units to add to the current number + * @param values List of Entry: `(name, value_for_last_step)`. If `name` is in + * `statefulMetrics`, `value_for_last_step` will be displayed as-is. + * Else, an average of the metric over time will be displayed. + */ + public void add(int n, List> values) { + this.update(this.seenSoFar + n, values); + } + + /** + * @return the target + */ + public Integer getTarget() { + return target; + } + + /** + * @param target the target to set + */ + public void setTarget(Integer target) { + this.target = target; + } +} + diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java new file mode 100644 index 00000000000..4fa69d0e537 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java @@ -0,0 +1,110 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.ArrayList; +import java.util.List; +import org.tensorflow.Operand; +import org.tensorflow.Tensor; +import org.tensorflow.ndarray.NdArray; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.types.TInt64; + +/** + * + * @author Jim Clarke + */ +public class ShapeUtils { + + /** + * Convert shape operand back to a Shape object + * + * @param dims the Operand containing the shape values + * @return + */ + public static Shape getShape(Operand dims) { + // TODO is there a better way? + final List dimList = new ArrayList<>(); + dims.data().scalars().forEach(s -> dimList.add(s.getLong())); + long[] longDims = new long[dimList.size()]; + for (int i = 0; i < dimList.size(); i++) { + longDims[i] = dimList.get(i); + } + return Shape.of(longDims); + } + + /** + * get the shape for the data within a Tensor + * + * @param tensor the tensor + * @return the Shape of the tensor's data; + */ + public static Shape getShape(Tensor tensor) { + NdArray data = (NdArray) tensor.data(); + return data.shape(); + + } + + public static boolean isCompatibleWith(Shape a, Shape b) { + if (!isUnknownShape(a) && !isUnknownShape(b)) { + if (a.numDimensions() != b.numDimensions()) { + return false; + } + for (int i = 0; i < a.numDimensions(); i++) { + if (a.size(i) != Shape.UNKNOWN_SIZE + && b.size(i) != Shape.UNKNOWN_SIZE + && b.size(i) != a.size(i)) { + return false; + } + } + } + return true; + } + + public static boolean isUnknownShape(Shape a) { + return a.size() == 0; + } + + /** + * Reshapes the shape by eliminating trailing Dimensions. + * + * @param oldShape + * @param axis + * @return the new shape + */ + public static Shape squeeze(Shape oldShape, int axis) { + axis %= oldShape.numDimensions(); + if (axis < 0) { + axis = oldShape.numDimensions() + axis; + } + long[] array = oldShape.asArray(); + long[] newArray = new long[axis]; + for (int i = 0; i < axis - 1; i++) { + newArray[i] = array[i]; + } + long sum = array[axis - 1]; + for (int i = axis; i < array.length; i++) { + sum *= array[i]; + } + newArray[axis - 1] = sum; + return Shape.of(newArray); + } + + public static boolean isCompatible(long dim, long otherDim) { + return dim == Shape.UNKNOWN_SIZE + || otherDim == Shape.UNKNOWN_SIZE + || dim == otherDim; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java new file mode 100644 index 00000000000..3dff11c513e --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java @@ -0,0 +1,107 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.function.Supplier; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TBool; + +/** Implements a select Operation using Lambdas */ +public class SmartCond { + + /** + * Creates a select operation + * + * @param pred the predicate (boolean) used to select + * @param then_fn the function to execute if the predicate is true + * @param else_fn the function to execute if the predicate is false + * @return the result of the select on the condition + */ + public static Operand select(Boolean pred, Supplier then_fn, Supplier else_fn) { + assert pred != null : "pred must not be null"; + assert then_fn != null : "then_fn must not be null"; + assert else_fn != null : "else_fn must not be null"; + return pred ? then_fn.get() : else_fn.get(); + } + + /** + * Creates a select operation + * + * @param pred the predicate ( true == 1) used to select + * @param then_fn the function to execute if the predicate is true + * @param else_fn the function to execute if the predicate is false + * @return the result of the select on the condition + */ + public static Operand select(Number pred, Supplier then_fn, Supplier else_fn) { + assert pred != null : "pred must not be null"; + assert then_fn != null : "then_fn must not be null"; + assert else_fn != null : "else_fn must not be null"; + return pred.intValue() == 1 ? then_fn.get() : else_fn.get(); + } + + /** + * Creates a select operation + * + * @param pred the predicate ( true if the string argument is not null and is equal, ignoring + * case, to the string "true") used to select + * @param then_fn the function to execute if the predicate is true + * @param else_fn the function to execute if the predicate is false + * @return the result of the select on the condition + */ + public static Operand select(String pred, Supplier then_fn, Supplier else_fn) { + assert pred != null : "pred must not be null"; + assert then_fn != null : "then_fn must not be null"; + assert else_fn != null : "else_fn must not be null"; + return Boolean.valueOf(pred) ? then_fn.get() : else_fn.get(); + } + + /** + * Create a Select operation + * + * @param tf the tensorFlow Ops + * @param pred the operand that evaluates to true or false + * @param then_fn the function to execute if the predicate is true + * @param else_fn the function to execute if the predicate is false + * @return a Select Operation if in graph mode, else return the result of the select + */ + public static Operand select( + Ops tf, Operand pred, Supplier then_fn, Supplier else_fn) { + assert pred != null : "pred must not be null"; + assert then_fn != null : "then_fn must not be null"; + assert else_fn != null : "else_fn must not be null"; + if (tf.scope().env().isEager()) { + return pred.asOutput().data().getBoolean() ? then_fn.get() : else_fn.get(); + } else { // TODO, maybe some day handle Supplier in the c interface + return tf.select(pred, then_fn.get(), else_fn.get()); + } + } + + /** + * Creates a slect operation + * + * @param tf the tensorFlow Ops + * @param pred the operand that evaluates to true or false + * @param then_fn the function to execute if the predicate is true + * @param else_fn the function to execute if the predicate is false + * @return the Select opertion + */ + public static Operand select(Ops tf, Operand pred, Operand true_op, Operand false_op) { + assert pred != null : "pred must not be null"; + assert true_op != null : "true_op must not be null"; + assert false_op != null : "false_op must not be null"; + return tf.select(pred, true_op, false_op); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java new file mode 100644 index 00000000000..b2e63fe1cff --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java @@ -0,0 +1,92 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.tensorflow.Operand; + +/** + * Utility class that handles sybmolic shapes so that the shapes can be resolved during runtime and + * stay consistent across operands. + * + *

The same symbols accros variaous shapes should have the same dimension values. + * + *

shape1 = Shape("N","L") + * + *

shape2 = Shape("L", "T") + * + *

For exmple, for Symbol "L" + * shape1.size(2) == shape2.size(1) + * + *

Example: + * + *

+ * List symbols = new ArrayList<>(); symbols.add(new SymbolicShape(yTrue, "N", "L"));
+ * if (this.isMultiLabel()) { symbols.add(new SymbolicShape(this.truePositives, "T", "L"));
+ * symbols.add(new SymbolicShape(this.falsePositives, "T", "L")); symbols.add(new
+ * SymbolicShape(this.trueNegatives, "T", "L")); symbols.add(new SymbolicShape(this.falseNegatives,
+ * "T", "L")); } if (this.getLabelWeights() != null) { symbols.add(new
+ * SymbolicShape(this.getLabelWeights(), "L", "")); }
+ * updateOperations.addAll(Metrics.assert_shapes(tf, symbols, "Number of labels is not
+ * consistent."));
+ * 
+ */ +public class SymbolicShape { + + private Operand operand; + private List symbols = new ArrayList<>(); + + /** + * Create a SymbolicShape for an Operand. + * + * @param operand the Operand + * @param symbols the symbols + */ + public SymbolicShape(Operand operand, String... symbols) { + this.operand = operand; + this.symbols.addAll(Arrays.asList(symbols)); + } + + /** @return the operand */ + public Operand getOperand() { + return operand; + } + + /** @param operand the operand to set */ + public void setOperand(Operand operand) { + this.operand = operand; + } + + /** @return the symbols */ + public List getSymbols() { + return symbols; + } + + /** @param symbols the symbols to set */ + public void setSymbols(List symbols) { + this.symbols = symbols; + } + + /** + * Get the rank of the symbol list + * + * @return the rank of the symbol list + */ + public int rank() { + return this.symbols.size(); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java new file mode 100644 index 00000000000..e7c9acf1c5e --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java @@ -0,0 +1,58 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.HashMap; +import java.util.Map; + +/** + * Utility class that contains a dictionary of Symbols. The map is updated with symbols and their + * dimension values. Used in creating matching shapes that depend on other shapes' dimensions. + */ +public class SymbolicShapeDict { + + /** Dictionary containing the sybmols and their associated dimensions sizes. */ + private final Map map = new HashMap<>(); + + /** + * Add a symbol with its associated dimensions size. + * + * @param symbol the symbol name + * @param size the shape dimension to associate with the symbol + */ + public void put(String symbol, Long size) { + this.map.put(symbol, size); + } + + /** + * Get the dimention size for a symbol + * + * @param symbol the symbol name + * @return the dimension size for the symbol or null if not found. + */ + public Long get(String symbol) { + return this.map.get(symbol); + } + + /** + * Determine if the symbol is contained in the dictionary. + * + * @param symbol the symbol name + * @return true, if the dictionary contains the symbol. + */ + public boolean contains(String symbol) { + return map.containsKey(symbol); + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java new file mode 100644 index 00000000000..a2629ef07b1 --- /dev/null +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java @@ -0,0 +1,98 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import org.tensorflow.DataType; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUint8; + + +/** + * + * @author Jim Clarke + */ +public class TypeUtils { + + //TODO + public static boolean isComplex(DataType dtype) { + return false; + } + + public static boolean isFloating(DataType dtype) { + switch(dtype.name()) { + case "BFLOAT16": + case "FLOAT16": + case "FLOAT": + case "DOUBLE": + return true; + default: return false; + } + } + public static boolean isInteger(DataType dtype) { + switch(dtype.name()) { + case "INT32": + case "INT64": + case "UINT8": + return true; + default: return false; + } + } + + public static boolean isNumeric(DataType dtype) { + return isFloating(dtype) || isInteger(dtype); + } + + public static boolean isBoolean(DataType dtype) { + return dtype.name().equals("BOOL"); + } + + public static boolean isString(DataType dtype) { + return dtype.name().equals("STRING"); + } + + public static DataType of(String name) { + switch(name) { + case "BFLOAT16": + return TBfloat16.DTYPE; + case "FLOAT16": + return TFloat16.DTYPE; + case "FLOAT": + return TFloat32.DTYPE; + case "DOUBLE": + return TFloat64.DTYPE; + case "UINT8": + return TUint8.DTYPE; + case "INT32": + return TInt32.DTYPE; + case "INT64": + return TInt64.DTYPE; + case "BOOL": + return TBool.DTYPE; + case "STRING": + return TString.DTYPE; + default: + throw new IllegalArgumentException(String.format("%s is an unknown DataType", name)); + + } + } + +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java new file mode 100644 index 00000000000..8a7c8af9fae --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java @@ -0,0 +1,226 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import static org.tensorflow.framework.optimizers.AdaDelta.ACCUMULATOR; +import static org.tensorflow.framework.optimizers.AdaDelta.ACCUMULATOR_UPDATE; +import org.tensorflow.framework.optimizers.Optimizer.GradAndVar; +import static org.tensorflow.keras.optimizers.AdaDelta.EPSILON_DEFAULT; +import static org.tensorflow.keras.optimizers.AdaDelta.EPSILON_KEY; +import static org.tensorflow.keras.optimizers.AdaDelta.LEARNING_RATE_DEFAULT; +import static org.tensorflow.keras.optimizers.AdaDelta.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.AdaDelta.RHO_DEFAULT; +import static org.tensorflow.keras.optimizers.AdaDelta.RHO_RATE_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for AdaDelta Optimizer */ +public class AdaDeltaTest { + + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + private int index; + + public AdaDeltaTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + /** + * Test of create method, of class AdaDelta. + */ + @Test + public void testCreate() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "AdaDelta"); + config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + config.put(RHO_RATE_KEY, RHO_DEFAULT); + config.put(EPSILON_KEY, EPSILON_DEFAULT); + AdaDelta expResult = new AdaDelta(tf); + AdaDelta result = AdaDelta.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + @Test + public void testConstructAdadeltaWithLR() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + AdaDelta opt = new AdaDelta(tf, 1.0F, 0.9F, 1.F); + AdaDelta opt2 = new AdaDelta(tf, 0.1F, 0.9F, 1.F); + AdaDelta opt3 = new AdaDelta(tf, 0.1F, 0.9F, 1e-8F); + String format = "AdaDelta{learningRate=%s, rho=%s, epsilon=%s}"; + String optExpected = String.format(format, 1.0F, 0.9F, 1.F); + String opt2Expected = String.format(format, 0.1F, 0.9F, 1.F); + String opt3Expected = String.format(format, 0.1F, 0.9F, 1e-8F); + + String optString = opt.toString(); + String opt2String = opt2.toString(); + String opt3String = opt3.toString(); + + assertEquals(optExpected, optString); + assertEquals(opt2Expected, opt2String); + assertEquals(opt3Expected, opt3String); + } + + } + + @Test + public void testConstructAdadeltaWithEpsilonValues() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + AdaDelta opt = new AdaDelta(tf); + Map config = opt.getConfig(); + assertEquals(EPSILON_DEFAULT, (float) config.get(EPSILON_KEY)); + + opt = new AdaDelta(tf, LEARNING_RATE_DEFAULT, RHO_DEFAULT, 1e-8F); + config = opt.getConfig(); + assertEquals(1e-8F, (float) config.get(EPSILON_KEY)); + } + } + + @Test + public void testBasic() { + int num_updates = 4; // # number of ADADELTA steps to perform + float[] grads = {0.2F, 0.1F, 0.01F}; + float[] lrs = {1.0F, 0.5F, 0.1F}; + for (float grad : grads) { + for (float lr : lrs) { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] fgrads = {grad, grad}; + Shape shape = Shape.of(var0_init.length); + Variable var0 = tf.withName("var0").variable(shape, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant cgrads = tf.constant(fgrads); + + float accum = 0.0F; + float accum_update = 0.0F; + float rho = 0.95F; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var0.asOutput())); + gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var1.asOutput())); + + /* get the Optimizer */ + AdaDelta adaDelta = new AdaDelta(tf, lr, rho, epsilon); + + /** + * apply gradients + */ + Op adadelta_update = adaDelta.applyGradients(gradsAndVars, "AdaDeltaTest"); + + /* Create and validae the shapes of the slota */ + Variable[] slots = new Variable[2]; + Variable[] slotUpdates = new Variable[2]; + + slots[0] = adaDelta.getSlot(var0.asOutput(), ACCUMULATOR).get(); + assertEquals(slots[0].asOutput().shape(), var0.asOutput().shape()); + + slotUpdates[0] = adaDelta.getSlot(var0.asOutput(), ACCUMULATOR_UPDATE).get(); + assertEquals(slotUpdates[0].asOutput().shape(), var0.asOutput().shape()); + + slots[1] = adaDelta.getSlot(var1.asOutput(), ACCUMULATOR).get(); + assertEquals(slots[1].asOutput().shape(), var1.asOutput().shape()); + + slotUpdates[1] = adaDelta.getSlot(var1.asOutput(), ACCUMULATOR_UPDATE).get(); + assertEquals(slotUpdates[1].asOutput().shape(), var1.asOutput().shape()); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** + * initialize the accumulators + */ + session.run(tf.init()); + + /** + * make sure the variables were initialized properly + */ + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + float[] updates = new float[num_updates]; + float tot_update = 0; + for (int step = 0; step < num_updates; step++) { + session.run(adadelta_update); + accum = accum * rho + (float) Math.pow(grad, 2) * (1.0F - rho); + updates[step] = ((float) Math.sqrt(accum_update + epsilon) + * (float) (1 / Math.sqrt(accum + epsilon)) * grad); + accum_update = (accum_update * rho + ((float) Math.pow(updates[step], 2) * (1.0F - rho))); + tot_update += updates[step] * lr; + + for (int i = 0; i < 2; i++) { + session.evaluate(accum, slots[i]); + session.evaluate(accum_update, slotUpdates[i]); + } + + Float[] var0_initUpdate = {var0_init[0] - tot_update, var0_init[1] - tot_update}; + Float[] var1_initUpdate = {var1_init[0] - tot_update, var1_init[1] - tot_update}; + + session.evaluate(var0_initUpdate, var0); + session.evaluate(var1_initUpdate, var1); + + } + + } + } + } + } + +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java new file mode 100644 index 00000000000..3931db4da97 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java @@ -0,0 +1,126 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.AdaGradDA.INITIAL_ACCUM_KEY; +import static org.tensorflow.keras.optimizers.AdaGradDA.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for AdaGradDA Optimizer */ +public class AdaGradDATest { + + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + int index; + + public AdaGradDATest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of create method, of class AdaGradDA. */ + @Test + public void testCreate() { + try (TestSession testSession = TestSession.createTestSession(tf_mode)) { + Ops tf = testSession.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "AdaDelta"); + config.put(LEARNING_RATE_KEY, 2.0F); + config.put(INITIAL_ACCUM_KEY, 0.1F); + AdaGradDA expResult = new AdaGradDA(tf, 2.0F, 0.1F, 0.0F, 0.0F); + AdaGradDA result = AdaGradDA.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + @Test + public void testBasic() { + float[] var0_init = {0.0F, 0.0F}; + float[] var1_init = {0.0F, 0.0F}; + float[] grads0_init = {0.1F, 0.2F}; + float[] grads1_init = {0.01F, 0.02F}; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + /* initialize the local variables */ + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + float learningRate = 3.0F; + + AdaGrad instance = new AdaGrad(tf, learningRate); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op ada_update = instance.applyGradients(gradsAndVars, "AdGradDATest"); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + session.run(ada_update); + float[] expected0 = {-0.904534F, -1.603567F}; + session.evaluate(expected0, var0); + float[] expected1 = {-0.094821f, -0.189358f}; + session.evaluate(expected1, var1); + } + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java new file mode 100644 index 00000000000..28c45c4c8c3 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java @@ -0,0 +1,170 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import static org.tensorflow.framework.optimizers.AdaGrad.ACCUMULATOR; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.AdaGrad.INITIAL_ACCUM_KEY; +import static org.tensorflow.keras.optimizers.AdaGrad.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.ND; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.NdArrays; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for AdaGrad Optimizer */ +public class AdaGradTest { + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + int index; + + public AdaGradTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of create method, of class AdaGrad. */ + @Test + public void testCreate() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "AdaDelta"); + config.put(LEARNING_RATE_KEY, 2.0F); + config.put(INITIAL_ACCUM_KEY, 0.1F); + AdaGrad expResult = new AdaGrad(tf, 2.0F, 0.1F); + AdaGrad result = AdaGrad.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + @Test + public void testBasic() { + int numSteps = 3; + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.1F}; + float[] grads1_init = {0.01F, 0.01F}; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + float[] accum0 = {0.1f, 0.1f}; + float[] accum1 = {0.1f, 0.1f}; + + FloatNdArray var0_np = NdArrays.vectorOf(var0_init); + FloatNdArray var1_np = NdArrays.vectorOf(var1_init); + FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); + FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + FloatNdArray accum0_np = NdArrays.vectorOf(accum0); + FloatNdArray accum1_np = NdArrays.vectorOf(accum1); + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + float learningRate = 3.0F; + + AdaGrad instance = new AdaGrad(tf, learningRate); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op ada_update = instance.applyGradients(gradsAndVars, "AdGradTest"); + + Variable[] accumulatorSlots = new Variable[2]; + accumulatorSlots[0] = instance.getSlot(var0.asOutput(), ACCUMULATOR).get(); + assertEquals(accumulatorSlots[0].asOutput().shape(), var0.asOutput().shape()); + + accumulatorSlots[1] = instance.getSlot(var1.asOutput(), ACCUMULATOR).get(); + assertEquals(accumulatorSlots[1].asOutput().shape(), var1.asOutput().shape()); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + /** make sure the variables were initialized properly */ + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + for (int step = 0; step < numSteps; step++) { + session.run(ada_update); + + accum0_np = caclulateAccum(accum0_np, grads0_np); + var0_np = calculate(var0_np, accum0_np, grads0_np, learningRate); + session.evaluate(var0_np, var0); + + accum1_np = caclulateAccum(accum1_np, grads1_np); + var1_np = calculate(var1_np, accum1_np, grads1_np, learningRate); + session.evaluate(var1_np, var1); + } + } + } + + private FloatNdArray caclulateAccum(FloatNdArray accum, FloatNdArray grads) { + // accum + g_t * g_t + FloatNdArray squareG = ND.square(grads); + FloatNdArray result = ND.add(accum, squareG); + return result; + } + + private FloatNdArray calculate( + FloatNdArray param, FloatNdArray accum, FloatNdArray grads, float learningRate) { + // param - lr * g_t / (np.sqrt(accum_t) + epsilon) + FloatNdArray divisor = ND.add(ND.sqrt(accum), 1e-07f); + FloatNdArray dividend = ND.mul(learningRate, grads); + FloatNdArray quotient = ND.div(dividend, divisor); + FloatNdArray result = ND.sub(param, quotient); + return result; + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java new file mode 100644 index 00000000000..6f1d13d83d6 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java @@ -0,0 +1,263 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Tensor; +import static org.tensorflow.framework.optimizers.Adam.FIRST_MOMENT; +import static org.tensorflow.framework.optimizers.Adam.SECOND_MOMENT; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.Adam.BETA_ONE_DEFAULT; +import static org.tensorflow.keras.optimizers.Adam.BETA_ONE_KEY; +import static org.tensorflow.keras.optimizers.Adam.BETA_TWO_DEFAULT; +import static org.tensorflow.keras.optimizers.Adam.BETA_TWO_KEY; +import static org.tensorflow.keras.optimizers.Adam.EPSILON_DEFAULT; +import static org.tensorflow.keras.optimizers.Adam.EPSILON_KEY; +import static org.tensorflow.keras.optimizers.Adam.LEARNING_RATE_DEFAULT; +import static org.tensorflow.keras.optimizers.Adam.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.ND; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.NdArrays; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for Adam Optimizer */ +public class AdamTest { + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + int index; + + public AdamTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of create method, of class Adam. */ + @Test + public void testCreate() { + try (TestSession testSession = TestSession.createTestSession(tf_mode)) { + Ops tf = testSession.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "AdaDelta"); + config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + config.put(BETA_ONE_KEY, BETA_ONE_DEFAULT); + config.put(BETA_TWO_KEY, BETA_TWO_DEFAULT); + config.put(EPSILON_KEY, EPSILON_DEFAULT); + AdaDelta expResult = new AdaDelta(tf); + AdaDelta result = AdaDelta.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + @Test + public void testBasic() { + float m0 = 0.0F; + float v0 = 0.0F; + float m1 = 0.0F; + float v1 = 0.0F; + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.1F}; + float[] grads1_init = {0.01F, 0.01F}; + FloatNdArray var0_np = NdArrays.vectorOf(var0_init); + FloatNdArray var1_np = NdArrays.vectorOf(var1_init); + FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); + FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + + float epsilon1 = 1e-3F; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + session.setEpsilon(epsilon1); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + float learningRate = 0.001F; + float beta1 = 0.9F; + float beta2 = 0.999F; + float epsilon = 1e-8F; + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Adam instance = new Adam(tf, learningRate); + + Op update = instance.applyGradients(gradsAndVars, "AdamTest"); + + /* Create and validae the shapes of the slota */ + Variable[] firstMomentSlots = new Variable[2]; + Variable[] secondMomentSlots = new Variable[2]; + + firstMomentSlots[0] = instance.getSlot(var0.asOutput(), FIRST_MOMENT).get(); + assertEquals(firstMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); + + secondMomentSlots[0] = instance.getSlot(var0.asOutput(), SECOND_MOMENT).get(); + assertEquals(secondMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); + + firstMomentSlots[1] = instance.getSlot(var1.asOutput(), FIRST_MOMENT).get(); + assertEquals(firstMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); + + secondMomentSlots[1] = instance.getSlot(var1.asOutput(), SECOND_MOMENT).get(); + assertEquals(secondMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + FloatNdArray m0_np = NdArrays.ofFloats(shape1); + FloatNdArray v0_np = NdArrays.ofFloats(shape1); + FloatNdArray m1_np = NdArrays.ofFloats(shape1); + FloatNdArray v1_np = NdArrays.ofFloats(shape1); + + for (int step = 0; step < 3; step++) { + + // Test powers + final float[] powers = { + (float) Math.pow(beta1, step + 1), (float) Math.pow(beta2, step + 1) + }; + + try (Tensor result = + session + .getGraphSession() + .runner() + .fetch("beta1_power") + .run() + .get(0) + .expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(powers[0], f.getFloat(), epsilon1); + }); + } + try (Tensor result = + session + .getGraphSession() + .runner() + .fetch("beta2_power") + .run() + .get(0) + .expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(powers[1], f.getFloat(), epsilon1); + }); + } + session.run(update); + + float lr_t = + learningRate + * (float) Math.sqrt(1 - (float) Math.pow(beta2, (step + 1))) + / (1 - (float) Math.pow(beta1, (step + 1))); + + m0_np = calculateM(m0_np, grads0_np, beta1); + v0_np = calculateV(v0_np, grads0_np, beta2); + var0_np = calculateParam(var0_np, lr_t, m0_np, v0_np, 1e-7F); + + m1_np = calculateM(m1_np, grads1_np, beta1); + v1_np = calculateV(v1_np, grads1_np, beta2); + var1_np = calculateParam(var1_np, lr_t, m1_np, v1_np, 1e-7F); + + // evaluate var 0 and var1 + session.evaluate(var0_np, var0); + session.evaluate(var1_np, var1); + + // first moment + session.evaluate(m0_np, firstMomentSlots[0]); + session.evaluate(m1_np, firstMomentSlots[1]); + + // second moment + session.evaluate(v0_np, secondMomentSlots[0]); + session.evaluate(v1_np, secondMomentSlots[1]); + } + } + } + + private FloatNdArray calculateM(FloatNdArray m, FloatNdArray g_t, float beta) { + // m_t = beta1 * m + (1 - beta1) * g_t + return ND.add(ND.mul(m, beta), ND.mul(g_t, (1 - beta))); + } + + private FloatNdArray calculateV(FloatNdArray v, FloatNdArray g_t, float beta) { + // beta2 * v + (1 - beta2) * g_t * g_t + FloatNdArray mul1 = ND.mul(v, beta); + FloatNdArray squareG = ND.square(g_t); + FloatNdArray mul2 = ND.mul((1 - beta), squareG); + FloatNdArray add = ND.add(mul1, mul2); + return add; + + // return ND.add(ND.mul(v, beta), + // ND.mul((1-beta), ND.square(g_t))); + } + + private FloatNdArray calculateParam( + FloatNdArray param, float lr_t, FloatNdArray m, FloatNdArray v, float epsilon) { + // param - lr_t * m_t / (np.sqrt(v_t) + epsilon) + FloatNdArray sqrt = ND.sqrt(v); + FloatNdArray divisor = ND.add(sqrt, epsilon); + FloatNdArray dividend = ND.mul(lr_t, m); + FloatNdArray quotient = ND.div(dividend, divisor); + FloatNdArray result = ND.sub(param, quotient); + return result; + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java new file mode 100644 index 00000000000..1d3dc9e76bf --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java @@ -0,0 +1,242 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Tensor; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.Adamax.BETA_ONE_DEFAULT; +import static org.tensorflow.keras.optimizers.Adamax.BETA_ONE_KEY; +import static org.tensorflow.keras.optimizers.Adamax.BETA_TWO_DEFAULT; +import static org.tensorflow.keras.optimizers.Adamax.BETA_TWO_KEY; +import static org.tensorflow.keras.optimizers.Adamax.EPSILON_DEFAULT; +import static org.tensorflow.keras.optimizers.Adamax.EPSILON_KEY; +import static org.tensorflow.keras.optimizers.Adamax.FIRST_MOMENT; +import static org.tensorflow.keras.optimizers.Adamax.LEARNING_RATE_DEFAULT; +import static org.tensorflow.keras.optimizers.Adamax.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.Adamax.SECOND_MOMENT; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.ND; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.NdArrays; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for Adamax Optimizer */ +public class AdamaxTest { + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + private static final int VAR = 0; + private static final int M = 1; + private static final int V = 2; + + int index; + + public AdamaxTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of create method, of class Adamax. */ + @Test + public void testCreate() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "AdaDelta"); + config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + config.put(BETA_ONE_KEY, BETA_ONE_DEFAULT); + config.put(BETA_TWO_KEY, BETA_TWO_DEFAULT); + config.put(EPSILON_KEY, EPSILON_DEFAULT); + AdaDelta expResult = new AdaDelta(tf); + AdaDelta result = AdaDelta.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + /** Test of getOptimizerName method, of class Adamax. */ + @Test + public void testGetOptimizerName() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Adamax instance = new Adamax(tf); + String expResult = "Adamax"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test of applyDense method, of class Adamax. */ + @Test + public void testBasic() { + + int numSteps = 3; + + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.1F}; + float[] grads1_init = {0.01F, 0.01F}; + + float[] zeros = {0.0F, 0.0F}; + FloatNdArray m0 = NdArrays.vectorOf(zeros); + FloatNdArray v0 = NdArrays.vectorOf(zeros); + FloatNdArray m1 = NdArrays.vectorOf(zeros); + FloatNdArray v1 = NdArrays.vectorOf(zeros); + FloatNdArray var0_np = NdArrays.vectorOf(var0_init); + FloatNdArray var1_np = NdArrays.vectorOf(var1_init); + FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); + FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + + float epsilon = 1e-6f; + float epsilon1 = 1e-3F; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + Adamax instance = new Adamax(tf); + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op update = instance.applyGradients(gradsAndVars, "AdamTest"); + + /* Create and validae the shapes of the slota */ + Variable[] firstMomentSlots = new Variable[2]; + Variable[] secondMomentSlots = new Variable[2]; + + firstMomentSlots[0] = instance.getSlot(var0.asOutput(), FIRST_MOMENT).get(); + assertEquals(firstMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); + + secondMomentSlots[0] = instance.getSlot(var0.asOutput(), SECOND_MOMENT).get(); + assertEquals(secondMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); + + firstMomentSlots[1] = instance.getSlot(var1.asOutput(), FIRST_MOMENT).get(); + assertEquals(firstMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); + + secondMomentSlots[1] = instance.getSlot(var1.asOutput(), SECOND_MOMENT).get(); + assertEquals(secondMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); + + /** initialize the accumulators */ + session.run(tf.init()); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + session.setEpsilon(epsilon1); + for (int step = 0; step < numSteps; step++) { + // Test powers + final float beta1_power = (float) Math.pow(BETA_ONE_DEFAULT, step + 1); + + try (Tensor result = + session + .getGraphSession() + .runner() + .fetch("beta1_power") + .run() + .get(0) + .expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(beta1_power, f.getFloat(), epsilon1); + }); + } + session.run(update); + + FloatNdArray[] resultNP = calculate(var0_np, grads0_np, step, m0, v0); + var0_np = resultNP[VAR]; + m0 = resultNP[M]; + v0 = resultNP[V]; + + resultNP = calculate(var1_np, grads1_np, step, m1, v1); + var1_np = resultNP[VAR]; + m1 = resultNP[M]; + v1 = resultNP[V]; + + // evaluate var0 and var1 + + session.evaluate(var0_np, var0); + session.evaluate(var1_np, var1); + } + } + } + + private FloatNdArray[] calculate( + FloatNdArray var_np, FloatNdArray grads_np, int step, FloatNdArray m, FloatNdArray v) { + float alpha = 0.001F; + float beta1 = BETA_ONE_DEFAULT; + float beta2 = BETA_TWO_DEFAULT; + float espilon = 1e-8F; + + float oneMinusBeta1 = 1.F - beta1; + float oneMinusBeta1Pow = 1.F - (float) Math.pow(beta1, step + 1); + float alpha1 = alpha / oneMinusBeta1Pow; + + // beta1 * m + (1 - beta1) * g_t; + m = ND.add(ND.mul(beta1, m), ND.mul(oneMinusBeta1, grads_np)); + // np.maximum(beta2 * v, np.abs(g_t)) + v = ND.max(ND.mul(beta2, v), ND.abs(grads_np)); + // param_t = param - (alpha / (1 - beta1**(t + 1))) * (m_t / (v_t + epsilon)) + var_np = ND.sub(var_np, ND.mul(alpha1, ND.div(m, ND.add(v, espilon)))); + + FloatNdArray[] result = new FloatNdArray[3]; + result[VAR] = var_np; + result[M] = m; + result[V] = v; + return result; + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java new file mode 100644 index 00000000000..d61197348af --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java @@ -0,0 +1,352 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.Ftrl.INITIAL_ACCUM_VALUE_KEY; +import static org.tensorflow.keras.optimizers.Ftrl.L1STRENGTH_KEY; +import static org.tensorflow.keras.optimizers.Ftrl.L2STRENGTH_KEY; +import static org.tensorflow.keras.optimizers.Ftrl.L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY; +import static org.tensorflow.keras.optimizers.Ftrl.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.Ftrl.LEARNING_RATE_POWER_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for Ftrl Optimizer */ +public class FtrlTest { + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + int index; + + public FtrlTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of initConfig method, of class Ftrl. */ + @Test + public void testInitConfig() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "Ftrl"); + config.put(LEARNING_RATE_KEY, 2.0F); + config.put(LEARNING_RATE_POWER_KEY, -0.5F); + config.put(INITIAL_ACCUM_VALUE_KEY, 0.1F); + config.put(L1STRENGTH_KEY, 0.0F); + config.put(L2STRENGTH_KEY, 0.0F); + config.put(L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY, 0.0F); + Ftrl expResult = new Ftrl(tf, 2.0F); + Ftrl result = Ftrl.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + /** Test of getOptimizerName method, of class Ftrl. */ + @Test + public void testGetOptimizerName() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Ftrl instance = new Ftrl(tf); + String expResult = "Ftrl"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + @Test + public void testFtrlWithL1_L2_L2Shrinkage() { + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {4.0F, 3.0F}; + float[] grads0_init = {0.1F, 0.2F}; + float[] grads1_init = {0.01F, 0.02F}; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + + int numSteps = 10; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + float learningRate = 3.0F; + + Ftrl instance = + new Ftrl( + tf, + learningRate, + -0.5F, // learningRatePower + 0.1F, // initial_accumulator_value + 0.001F, // l1_regularization_strength + 2.0F, // l2_regularization_strength + 0.1F // l2_shrinkage_regularization_strength + ); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + for (int i = 0; i < numSteps; i++) { + session.run(ftrl_update); + } + + float[] expectedVar0 = {-0.22578995F, -0.44345796F}; + session.evaluate(expectedVar0, var0); + float[] expectedVar1 = {-0.14378493F, -0.13229476F}; + session.evaluate(expectedVar1, var1); + } + } + + @Test + public void testFtrlWithL1() { + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {4.0F, 3.0F}; + float[] grads0_init = {0.1F, 0.2F}; + float[] grads1_init = {0.01F, 0.02F}; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + + int numSteps = 10; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + float learningRate = 3.0F; + + Ftrl instance = + new Ftrl( + tf, + learningRate, + Ftrl.LEARNING_RATE_POWER_DEFAULT, // learningRatePower + 0.1F, // initial_accumulator_value + 0.001F, // l1_regularization_strength + 0.0F, // l2_regularization_strength + Ftrl + .L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT // l2_shrinkage_regularization_strength + ); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + for (int i = 0; i < numSteps; i++) { + session.run(ftrl_update); + } + + float[] expectedVar0 = {-7.66718769F, -10.91273689F}; + session.evaluate(expectedVar0, var0); + + float[] expectedVar1 = {-0.93460727F, -1.86147261F}; + session.evaluate(expectedVar1, var1); + } + } + + @Test + public void testFtrlWithL1_L2() { + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {4.0F, 3.0F}; + float[] grads0_init = {0.1F, 0.2F}; + float[] grads1_init = {0.01F, 0.02F}; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + + int numSteps = 10; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + float learningRate = 3.0F; + + Ftrl instance = + new Ftrl( + tf, + learningRate, + Ftrl.LEARNING_RATE_POWER_DEFAULT, // learningRatePower + 0.1F, // initial_accumulator_value + 0.001F, // l1_regularization_strength + 2.0F, // l2_regularization_strength + Ftrl + .L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT // l2_shrinkage_regularization_strength + ); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + for (int i = 0; i < numSteps; i++) { + session.run(ftrl_update); + } + + float[] expectedVar0 = {-0.24059935F, -0.46829352F}; + session.evaluate(expectedVar0, var0); + + float[] expectedVar1 = {-0.02406147F, -0.04830509F}; + session.evaluate(expectedVar1, var1); + } + } + + @Test + public void doTestFtrlwithoutRegularization() { + float[] var0_init = {0.0F, 0.0F}; + float[] var1_init = {0.0F, 0.0F}; + float[] grads0_init = {0.1F, 0.2F}; + float[] grads1_init = {0.01F, 0.02F}; + float epsilon = 1e-8F; + float epsilon1 = 1e-5F; + + int numSteps = 3; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + float learningRate = 3.0F; + + Ftrl instance = new Ftrl(tf, learningRate); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + for (int i = 0; i < numSteps; i++) { + session.run(ftrl_update); + } + + float[] expectedVar0 = {-2.60260963F, -4.29698515F}; + float[] expectedVar1 = {-0.28432083F, -0.56694895F}; + + session.evaluate(expectedVar0, var0); + session.evaluate(expectedVar1, var1); + } + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java new file mode 100644 index 00000000000..2b8bce40471 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java @@ -0,0 +1,286 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Tensor; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.Adamax.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.Nadam.BETA_ONE_DEFAULT; +import static org.tensorflow.keras.optimizers.Nadam.BETA_ONE_KEY; +import static org.tensorflow.keras.optimizers.Nadam.BETA_TWO_DEFAULT; +import static org.tensorflow.keras.optimizers.Nadam.BETA_TWO_KEY; +import static org.tensorflow.keras.optimizers.Nadam.EPSILON_DEFAULT; +import static org.tensorflow.keras.optimizers.Nadam.EPSILON_KEY; +import static org.tensorflow.keras.optimizers.Nadam.FIRST_MOMENT; +import static org.tensorflow.keras.optimizers.Nadam.LEARNING_RATE_DEFAULT; +import static org.tensorflow.keras.optimizers.Nadam.SECOND_MOMENT; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import org.tensorflow.keras.utils.ND; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.NdArrays; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for Nadam Optimizer */ +public class NadamTest { + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + private static final int VAR = 0; + private static final int M = 1; + private static final int V = 2; + + int index = 0; + float momentum = 1; + + public NadamTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of create method, of class Nadam. */ + @Test + public void testCreate() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "AdaDelta"); + config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); + config.put(BETA_ONE_KEY, BETA_ONE_DEFAULT); + config.put(BETA_TWO_KEY, BETA_TWO_DEFAULT); + config.put(EPSILON_KEY, EPSILON_DEFAULT); + AdaDelta expResult = new AdaDelta(tf); + AdaDelta result = AdaDelta.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + /** Test of getOptimizerName method, of class Nadam. */ + @Test + public void testGetOptimizerName() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Nadam instance = new Nadam(tf); + String expResult = "Nadam"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test of applyDense method, of class Nadam. */ + @Test + public void testBasic() { + + int numSteps = 3; + + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.1F}; + float[] grads1_init = {0.01F, 0.01F}; + + float[] zeros = {0.0F, 0.0F}; + float[] ones = {1.0F, 1.0F}; + FloatNdArray m0 = NdArrays.vectorOf(zeros); + FloatNdArray v0 = NdArrays.vectorOf(zeros); + FloatNdArray m1 = NdArrays.vectorOf(zeros); + FloatNdArray v1 = NdArrays.vectorOf(zeros); + FloatNdArray mcache = NdArrays.vectorOf(ones); + FloatNdArray var0_np = NdArrays.vectorOf(var0_init); + FloatNdArray var1_np = NdArrays.vectorOf(var1_init); + FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); + FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + + float epsilon = 1e-6f; + float epsilon1 = 1e-3F; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + Nadam instance = new Nadam(tf); + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op update = instance.applyGradients(gradsAndVars, "AdamTest"); + + /* Create and validae the shapes of the slota */ + Variable[] firstMomentSlots = new Variable[2]; + Variable[] secondMomentSlots = new Variable[2]; + + firstMomentSlots[0] = instance.getSlot(var0.asOutput(), FIRST_MOMENT).get(); + assertEquals(firstMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); + + secondMomentSlots[0] = instance.getSlot(var0.asOutput(), SECOND_MOMENT).get(); + assertEquals(secondMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); + + firstMomentSlots[1] = instance.getSlot(var1.asOutput(), FIRST_MOMENT).get(); + assertEquals(firstMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); + + secondMomentSlots[1] = instance.getSlot(var1.asOutput(), SECOND_MOMENT).get(); + assertEquals(secondMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + session.setEpsilon(epsilon1); + + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + try (Tensor result = + session + .getGraphSession() + .runner() + .fetch("momentum") + .run() + .get(0) + .expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(1F, f.getFloat(), epsilon1); + }); + } + momentum = 1F; + + for (int step = 0; step < numSteps; step++) { + + session.run(update); + + float mut = + Nadam.BETA_ONE_DEFAULT * (1F - 0.5F * (float) Math.pow(0.96F, (0.004F * (step + 1)))); + momentum = momentum * mut; + + try (Tensor result = + session + .getGraphSession() + .runner() + .fetch("momentum") + .run() + .get(0) + .expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(momentum, f.getFloat(), epsilon1); + }); + } + mcache = ND.mul(mcache, momentum); + FloatNdArray[] resultsNP = nadam_update_numpy(var0_np, grads0_np, step, m0, v0, mcache); + var0_np = resultsNP[VAR]; + m0 = resultsNP[M]; + v0 = resultsNP[V]; + + resultsNP = nadam_update_numpy(var1_np, grads1_np, step, m1, v1, mcache); + var1_np = resultsNP[VAR]; + m1 = resultsNP[M]; + v1 = resultsNP[V]; + + // evaluate m0 and m1 + session.evaluate(m0, firstMomentSlots[0]); + session.evaluate(m1, firstMomentSlots[1]); + + // evaluate v0 and v1 + session.evaluate(v0, secondMomentSlots[0]); + session.evaluate(v1, secondMomentSlots[1]); + + // evaluate var0 and var1 + session.evaluate(var0_np, var0); + session.evaluate(var1_np, var1); + } + } + } + + private FloatNdArray update_m_cache(FloatNdArray mcache, int t) { + float mu_t = 0.9F * (1.0F - 0.5F * (float) Math.pow(0.96, (0.004 * (t + 1)))); + return ND.mul(mu_t, mcache); + } + + private FloatNdArray[] nadam_update_numpy( + FloatNdArray var_np, + FloatNdArray grads_np, + int t, + FloatNdArray m, + FloatNdArray v, + FloatNdArray m_cache) { + + float alpha = 0.001F; + float beta1 = 0.9F; + float beta2 = 0.999F; + float epsilon = 1e-8F; + float mu_t = beta1 * (1F - 0.5F * (float) Math.pow(0.96, 0.004 * (t + 1))); + float mu_t_1 = beta1 * (1F - 0.5F * (float) Math.pow(0.96, (0.004 * (t + 2)))); + FloatNdArray m_cache_t_1 = ND.mul(m_cache, mu_t_1); + FloatNdArray g_prime_t = ND.div(grads_np, ND.sub(1.0F, m_cache)); + FloatNdArray m_t = ND.add(ND.mul(beta1, m), ND.mul((1 - beta1), grads_np)); + FloatNdArray v_t = ND.add(ND.mul(beta2, v), ND.mul((1 - beta2), ND.square(grads_np))); + + FloatNdArray m_prime_t = ND.div(m_t, ND.sub(1.F, m_cache_t_1)); + FloatNdArray v_prime_t = ND.div(v_t, 1.F - (float) Math.pow(beta2, t + 1)); + FloatNdArray m_bar_t = ND.add(ND.mul((1 - mu_t), g_prime_t), ND.mul(mu_t_1, m_prime_t)); + FloatNdArray param_t = + ND.sub(var_np, ND.div(ND.mul(alpha, m_bar_t), ND.add(ND.sqrt(v_prime_t), epsilon))); + + FloatNdArray[] results = new FloatNdArray[3]; + results[VAR] = param_t; + results[M] = m_t; + results[V] = v_t; + return results; + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java new file mode 100644 index 00000000000..b8fb4f40ee9 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java @@ -0,0 +1,307 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.framework.optimizers.RMSProp.MG; +import static org.tensorflow.framework.optimizers.RMSProp.MOMENTUM; +import static org.tensorflow.framework.optimizers.RMSProp.RMS; +import static org.tensorflow.keras.optimizers.Ftrl.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.RMSProp.CENTERED_DEFAULT; +import static org.tensorflow.keras.optimizers.RMSProp.CENTERED_KEY; +import static org.tensorflow.keras.optimizers.RMSProp.DECAY_DEFAULT; +import static org.tensorflow.keras.optimizers.RMSProp.DECAY_KEY; +import static org.tensorflow.keras.optimizers.RMSProp.EPSILON_DEFAULT; +import static org.tensorflow.keras.optimizers.RMSProp.EPSILON_KEY; +import static org.tensorflow.keras.optimizers.RMSProp.MOMENTUM_DEFAULT; +import static org.tensorflow.keras.optimizers.RMSProp.MOMENTUM_KEY; +import org.tensorflow.keras.utils.ND; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.NdArrays; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for RMSProp Optimizer */ +public class RMSPropTest { + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + final int VAR_T = 0; + final int MG_T = 1; + final int RMS_T = 2; + final int MOM_T = 3; + + int index; + + public RMSPropTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + /** + * Test of create method, of class RMSProp. + */ + @Test + public void testCreate() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "Ftrl"); + config.put(LEARNING_RATE_KEY, 2.0F); + config.put(DECAY_KEY, DECAY_DEFAULT); + config.put(MOMENTUM_KEY, MOMENTUM_DEFAULT); + config.put(EPSILON_KEY, EPSILON_DEFAULT); + config.put(CENTERED_KEY, CENTERED_DEFAULT); + Ftrl expResult = new Ftrl(tf, 2.0F); + Ftrl result = Ftrl.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + Object[][] _test_param_values = { + // learning_rate, rho (decay), momentum, epsilon, centered + {0.05F, 0.9F, 0.0F, 1e-3F, true}, + {0.05F, 0.9F, 0.0F, 1e-3F, false}, + {0.1F, 0.9F, 0.0F, 1e-3F, true}, + {0.01F, 0.9F, 0.0F, 1e-5F, true}, + {0.01F, 0.9F, 0.9F, 1e-5F, true} + }; + + @Test + public void testDense() { + + int numSteps = 3; + + for (int run = 0; run < _test_param_values.length; run++) { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + session.setEpsilon(1e-2f); + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.2F}; + float[] grads1_init = {0.01F, 0.2F}; + final float epsilon1 = 1e-2F; + + FloatNdArray var0_np = NdArrays.vectorOf(var0_init); + FloatNdArray var1_np = NdArrays.vectorOf(var1_init); + FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); + FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + // learning_rate, rho (decay), momentum, epsilon, centered + float learningRate = (float) (float) _test_param_values[run][0]; + float decay = (float) _test_param_values[run][1]; + float momentum = (float) _test_param_values[run][2]; + float epsilon = (float) _test_param_values[run][3]; + boolean centered = (boolean) _test_param_values[run][4]; + + RMSProp instance = new RMSProp(tf, + learningRate, + decay, + momentum, + epsilon, + centered); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op update = instance.applyGradients(gradsAndVars, "RMSPropTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** + * initialize the accumulators + */ + session.run(tf.init()); + + /** + * make sure the variables were initialized properly + */ + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + Variable mg0 = centered ? instance.getSlot(var0.asOutput(), MG).get() : null; + Variable mg1 = centered ? instance.getSlot(var1.asOutput(), MG).get() : null; + Variable mom0 = momentum > 0.F ? instance.getSlot(var0.asOutput(), MOMENTUM).get() : null; + Variable mom1 = momentum > 0.F ? instance.getSlot(var1.asOutput(), MOMENTUM).get() : null; + Variable rms0 = instance.getSlot(var0.asOutput(), RMS).get(); + Variable rms1 = instance.getSlot(var1.asOutput(), RMS).get(); + + float[] zeros = {0.0F, 0.0F}; + float[] ones = {1.0F, 1.0F}; // temp to match RMSProp + FloatNdArray mg0_np = NdArrays.vectorOf(zeros); + FloatNdArray mg1_np = NdArrays.vectorOf(zeros); + FloatNdArray rms0_np = NdArrays.vectorOf(ones); + FloatNdArray rms1_np = NdArrays.vectorOf(ones); + FloatNdArray mom0_np = NdArrays.vectorOf(zeros); + FloatNdArray mom1_np = NdArrays.vectorOf(zeros); + + + + for (int i = 0; i < numSteps; i++) { + session.run(update); + FloatNdArray[] result0 = calc(var0_np, grads0_np, mg0_np, rms0_np, + mom0_np, learningRate, decay, momentum, epsilon, centered); + var0_np = result0[VAR_T]; + mg0_np = result0[MG_T]; + rms0_np = result0[RMS_T]; + mom0_np = result0[MOM_T]; + + FloatNdArray[] result1 = calc(var1_np, grads1_np, mg1_np, rms1_np, + mom1_np, learningRate, decay, momentum, epsilon, centered); + + var1_np = result1[VAR_T]; + mg1_np = result1[MG_T]; + rms1_np = result1[RMS_T]; + mom1_np = result1[MOM_T]; + + if (centered) { + session.evaluate(mg0_np, mg0); + session.evaluate(mg0_np, mg0); + } + if (momentum > 0.F) { + session.evaluate(mom0_np, mom0); + session.evaluate(mom1_np, mom1); + } + + /* TODO the values returned from rms slot, do not match what I see in the python test */ + session.evaluate(rms0_np, rms0); + session.evaluate(rms1_np, rms1); + + session.evaluate(var0_np, var0); + session.evaluate(var1_np, var1); + } + } + } + } + + FloatNdArray[] calc(FloatNdArray var_np, FloatNdArray grad_np, FloatNdArray mg_np, + FloatNdArray rms_np, FloatNdArray mom, float lr, float decay, float momentum, + float epsilon, boolean centered) { + + FloatNdArray[] result = new FloatNdArray[4]; // var_t, mg_t, rms_t, mom_t + result[RMS_T] = calcRMS(rms_np, grad_np, decay); // RMS + + FloatNdArray denom_t; + if (centered) { + result[MG_T] = calcMG(mg_np, grad_np, decay); + //rms_t - mg_t * mg_t + denom_t = ND.sub(result[RMS_T], ND.square(result[MG_T])); + } else { + result[MG_T] = mg_np; + denom_t = rms_np; + } + if (momentum > 0.F) { + //momentum * mom + lr * g / (np.sqrt(denom_t + epsilon)) + result[MOM_T] = calcMom(momentum, mom, lr, grad_np, denom_t, epsilon); + //var_t = var - mom_t + result[VAR_T] = ND.sub(var_np, result[MOM_T]); + } else { + result[MOM_T] = mom; + result[VAR_T] = calcVar(var_np, grad_np, lr, denom_t, epsilon); + } + + + return result; + + } + + private FloatNdArray calcRMS(FloatNdArray rms_np, FloatNdArray grad_np, float decay) { + //rms * rho + (1 - rho) * g * g + FloatNdArray rms_rho = ND.mul(rms_np, decay); + FloatNdArray squareG = ND.square(grad_np); + float oneRHO = 1.0F - decay; + FloatNdArray decayG2 = ND.mul(oneRHO, squareG); + FloatNdArray result = ND.add(rms_rho, decayG2); + return result; + } + + private FloatNdArray calcMG(FloatNdArray mg_np, FloatNdArray grad_np, float decay) { + //mg_t = mg * rho + (1 - rho) * g + FloatNdArray mg_rho = ND.mul(mg_np, decay); + float oneRHO = 1.0F - decay; + FloatNdArray decayG = ND.mul(oneRHO, grad_np); + FloatNdArray result = ND.add(mg_rho, decayG); + return result; + + } + + private FloatNdArray calcMom(float momentum, FloatNdArray mom, float lr, + FloatNdArray grad_np, FloatNdArray denom_t, float epsilon) { + // momentum * mom + lr * g / (np.sqrt(denom_t + epsilon)) + FloatNdArray moMo = ND.mul(momentum, mom); + FloatNdArray dividend = ND.mul(lr, grad_np); + FloatNdArray divisor = ND.sqrt(ND.add(denom_t, epsilon)); + FloatNdArray quotient = ND.div(dividend, divisor); + FloatNdArray result = ND.add(moMo, quotient); + return result; + + } + + private FloatNdArray calcVar(FloatNdArray var_np, FloatNdArray grad_np, float lr, + FloatNdArray denom_t, float epsilon) { + // var - lr * g / (np.sqrt(denom_t) + epsilon) + FloatNdArray dividend = ND.mul(lr, grad_np); + FloatNdArray divisor = ND.add(ND.sqrt(denom_t), epsilon); + FloatNdArray quotient = ND.div(dividend, divisor); + FloatNdArray result = ND.sub(var_np, quotient); + return result; + + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java new file mode 100644 index 00000000000..7e12b957f84 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java @@ -0,0 +1,227 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.optimizers; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import static org.tensorflow.framework.optimizers.Momentum.MOMENTUM; +import org.tensorflow.framework.optimizers.Optimizer; +import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; +import static org.tensorflow.keras.optimizers.SGD.LEARNING_RATE_KEY; +import static org.tensorflow.keras.optimizers.SGD.MOMENTUM_DEFAULT; +import static org.tensorflow.keras.optimizers.SGD.MOMENTUM_KEY; +import static org.tensorflow.keras.optimizers.SGD.NESTEROV_DEFAULT; +import static org.tensorflow.keras.optimizers.SGD.NESTEROV_KEY; +import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; + +/** Test cases for SGD Optimizer */ +public class SGDTest { + + private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + + int index; + + public SGDTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of create method, of class SGD. */ + @Test + public void testCreate() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + Map config = new HashMap<>(); + config.put(NAME_KEY, "Ftrl"); + config.put(LEARNING_RATE_KEY, 2.0F); + config.put(MOMENTUM_KEY, MOMENTUM_DEFAULT); + config.put(NESTEROV_KEY, NESTEROV_DEFAULT); + SGD expResult = new SGD(tf, 2.0F); + SGD result = SGD.create(tf, config); + assertEquals(expResult.getConfig(), result.getConfig()); + } + } + + /** Test of getOptimizerName method, of class SGD. */ + @Test + public void testGetOptimizerName() { + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + SGD instance = new SGD(tf); + String expResult = "SGD"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + @Test + public void testBasic() { + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.1F}; + float[] grads1_init = {0.01F, 0.01F}; + float learningRate = 3.0F; + + float epsilon = 1e-6F; + float epsilon1 = 1e-2F; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + SGD instance = new SGD(tf, learningRate); + Op update = instance.applyGradients(gradsAndVars, "SGDTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + /** make sure the variables were initialized properly */ + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + session.run(update); // 1 step + + float[] expectedVar0 = {1.0F - 3.0F * 0.1F, 2.0F - 3.0F * 0.1F}; + float[] expectedVar1 = {3.0F - 3.0F * 0.01F, 4.0F - 3.0F * 0.01F}; + session.evaluate(expectedVar0, var0); + session.evaluate(expectedVar1, var1); + } + } + + @Test + public void testMomentum() { + float[] var0_init = {1.0F, 2.0F}; + float[] var1_init = {3.0F, 4.0F}; + float[] grads0_init = {0.1F, 0.1F}; + float[] grads1_init = {0.01F, 0.01F}; + + float learningRate = 2.0F; + float momentum = 0.9F; + + float epsilon = 1e-6F; + float epsilon1 = 1e-2F; + + try (TestSession session = TestSession.createTestSession(tf_mode)) { + Ops tf = session.getTF(); + + Shape shape0 = Shape.of(var0_init.length); + Shape shape1 = Shape.of(var1_init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + + Constant grads0 = tf.constant(grads0_init); + Constant grads1 = tf.constant(grads1_init); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + SGD instance = new SGD(tf, learningRate, momentum); + Op update = instance.applyGradients(gradsAndVars, "SGDTest"); + + Variable momentumSlot0 = instance.getSlot(var0.asOutput(), MOMENTUM).get(); + assertEquals(momentumSlot0.asOutput().shape(), var0.asOutput().shape()); + Variable momentumSlot1 = instance.getSlot(var1.asOutput(), MOMENTUM).get(); + assertEquals(momentumSlot1.asOutput().shape(), var1.asOutput().shape()); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + /** make sure the variables were initialized properly */ + session.evaluate(var0_init, var0); + session.evaluate(var1_init, var1); + + session.run(update); // 1 step + + float[] expectedMomentum0 = {0.1F, 0.1F}; + float[] expectedMomentum1 = {0.01F, 0.01F}; + session.evaluate(expectedMomentum0, momentumSlot0); + session.evaluate(expectedMomentum1, momentumSlot1); + + float[] expectedVar0 = {1.0F - (0.1F * 2.0F), 2.0F - (0.1F * 2.0F)}; + float[] expectedVar1 = {3.0F - (0.01F * 2.0F), 4.0F - (0.01F * 2.0F)}; + session.evaluate(expectedVar0, var0); + session.evaluate(expectedVar1, var1); + + session.run(update); // step 2 + + float[] expectedMomentum0_2 = {(0.9f * 0.1f + 0.1f), (0.9f * 0.1f + 0.1f)}; + float[] expectedMomentum1_2 = {(0.9f * 0.01f + 0.01f), (0.9f * 0.01f + 0.01f)}; + session.evaluate(expectedMomentum0_2, momentumSlot0); + session.evaluate(expectedMomentum1_2, momentumSlot1); + + float[] expectedVar0_2 = { + 1.0F - (0.1F * 2.0F) - ((0.9F * 0.1F + 0.1F) * 2.0F), + 2.0F - (0.1F * 2.0F) - ((0.9F * 0.1F + 0.1F) * 2.0F) + }; + float[] expectedVar1_2 = { + 2.98F - ((0.9F * 0.01F + 0.01F) * 2.0F), 3.98F - ((0.9F * 0.01F + 0.01F) * 2.0F) + }; + session.evaluate(expectedVar0_2, var0); + session.evaluate(expectedVar1_2, var1); + } + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java new file mode 100644 index 00000000000..3bc8091811a --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java @@ -0,0 +1,747 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.io.PrintWriter; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Predicate; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import org.tensorflow.DataType; +import org.tensorflow.EagerSession; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.Session; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** Eaager Mode Test Session */ +public class EagerTestSession extends TestSession { + + private final EagerSession session; + private final Ops tf; + + /** Create an Eager mode test session. */ + public EagerTestSession() { + this.session = EagerSession.create(); + this.tf = Ops.create(session).withName("test"); + } + + /** {@inheritDoc} */ + @Override + public Ops getTF() { + return tf; + } + + /** + * Get the TensorFlow EagerSession instance + * @return the TensorFlow EagerSession instance + */ + public EagerSession getSession() { + return session; + } + + /** {@inheritDoc} */ + @Override + public void close() { + session.close(); + } + + /** {@inheritDoc} */ + @Override + public boolean isEager() { + return true; + } + + /** {@inheritDoc} */ + @Override + public Session getGraphSession() { + return null; + } + + /** {@inheritDoc} */ + @Override + public EagerSession getEagerSession() { + return this.session; + } + + /** {@inheritDoc} */ + @Override + public void evaluate(double expected, Operand input) { + DataType dtype = input.asOutput().dataType(); + if (dtype == TFloat32.DTYPE) { + Operand o = (Operand) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals(expected, f.getFloat(), epsilon); + }); + } else if (dtype == TFloat64.DTYPE) { + Operand o = (Operand) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals((double) expected, f.getDouble(), epsilon); + }); + } else if (dtype == TInt32.DTYPE) { + Operand o = (Operand) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals((int) expected, f.getInt()); + }); + } else if (dtype == TInt64.DTYPE) { + Operand o = (Operand) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals((long) expected, f.getLong()); + }); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Number[] expected, Output input) { + int size = input.shape().size() == 0 ? 1 : (int) input.shape().size(); + assertEquals( + expected.length, + size, + () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); + DataType dtype = input.dataType(); + if (dtype == TFloat32.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()].floatValue(), f.getFloat(), epsilon); + }); + } else if (dtype == TFloat64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals( + expected[index.getAndIncrement()].doubleValue(), f.getDouble(), epsilon); + }); + } else if (dtype == TInt32.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()].intValue(), f.getInt()); + }); + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong()); + }); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(FloatNdArray expected, Output input) { + DataType dtype = input.dataType(); + if (dtype == TFloat32.DTYPE) { + Output o = (Output) input; + AtomicLong index = new AtomicLong(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals(expected.getFloat(index.getAndIncrement()), f.getFloat(), epsilon); + }); + } else if (dtype == TFloat64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals( + (double) expected.getFloat(index.getAndIncrement()), f.getDouble(), epsilon); + }); + } else if (dtype == TInt32.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals((int) expected.getFloat(index.getAndIncrement()), f.getInt()); + }); + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> { + assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong()); + }); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Output input, Predicate predicate) { + AtomicInteger index = new AtomicInteger(); + DataType dtype = input.asOutput().dataType(); + boolean isScalar = input.shape().equals(Shape.scalar()); + if (dtype == TFloat32.DTYPE) { + Output o = (Output) input; + if (debug) { + if (isScalar) { + System.out.printf( + "0). %b <==> %f\n", predicate.test(o.data().getFloat()), o.data().getFloat()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getFloat()), f.getFloat()); + }); + } + } + index.set(0); + if (isScalar) { + assertTrue(predicate.test(o.data().getFloat())); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(o.data().getFloat())); + }); + } + } else if (dtype == TFloat64.DTYPE) { + Output o = (Output) input; + if (debug) { + if (isScalar) { + System.out.printf( + "0). %b <==> %f\n", predicate.test(o.data().getDouble()), o.data().getDouble()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getDouble()), f.getDouble()); + }); + } + } + index.set(0); + if (isScalar) { + assertTrue(predicate.test(o.data().getDouble())); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(o.data().getDouble())); + }); + } + } else if (dtype == TInt32.DTYPE) { + Output o = (Output) input; + if (debug) { + if (isScalar) { + System.out.printf( + "0). %b <==> %d\n", predicate.test(o.data().getInt()), o.data().getInt()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getInt()), f.getInt()); + }); + } + } + index.set(0); + if (isScalar) { + assertTrue(predicate.test(o.data().getInt())); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(o.data().getInt())); + }); + } + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + if (debug) { + if (isScalar) { + System.out.printf( + "0). %b <==> %d\n", predicate.test(o.data().getLong()), o.data().getLong()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getLong()), f.getLong()); + }); + } + } + index.set(0); + if (isScalar) { + assertTrue(predicate.test(o.data().getLong())); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(o.data().getLong())); + }); + } + } else { + fail("Unexpected DataType: " + dtype); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(String[] expected, Output input) { + int size = input.shape().size() == 0 ? 1 : (int) input.shape().size(); + assertEquals( + expected.length, + size, + () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); + AtomicInteger index = new AtomicInteger(); + if (debug) { + input + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); + }); + } + index.set(0); + input + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()], f.getObject()); + }); + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Boolean[] expected, Output input) { + int size = input.shape().size() == 0 ? 1 : (int) input.shape().size(); + assertEquals( + expected.length, + size, + () -> String.format("expected size (%d) != to input length (%d)", expected.length, size)); + AtomicInteger index = new AtomicInteger(); + if (debug) { + input + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean()); + }); + } + index.set(0); + input + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()], f.getBoolean()); + }); + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Output expected, Output input) { + assert input.shape().equals(expected.shape()) + : String.format( + "expected shape (%s) != to input shape (%ds)", + expected.shape().toString(), input.shape().toString()); + DataType dtype = input.asOutput().dataType(); + boolean isScalar = input.shape().equals(Shape.scalar()); + if (dtype == TFloat32.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %f <==> %f\n", x.data().getFloat(), o.data().getFloat()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), x.data().getFloat(idx), f.getFloat()); + }); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getFloat(), o.data().getFloat(), epsilon); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> assertEquals(x.data().getFloat(idx), f.getFloat(), epsilon)); + } + } else if (dtype == TFloat64.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %f <==> %f\n", x.data().getDouble(), o.data().getDouble()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), x.data().getDouble(idx), f.getDouble()); + }); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getDouble(), o.data().getDouble(), epsilon); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> assertEquals(x.data().getDouble(idx), f.getDouble(), epsilon)); + } + } else if (dtype == TInt32.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %d <==> %d\n", x.data().getInt(), o.data().getInt()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), x.data().getInt(idx), f.getInt()); + }); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getInt(), o.data().getInt()); + } else { + o.data() + .scalars() + .forEachIndexed((idx, f) -> assertEquals(x.data().getInt(idx), f.getInt())); + } + } else if (dtype == TInt64.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %d <==> %d\n", x.data().getLong(), o.data().getLong()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), x.data().getLong(idx), f.getLong()); + }); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getLong(), o.data().getLong()); + } else { + o.data() + .scalars() + .forEachIndexed((idx, f) -> assertEquals(x.data().getLong(idx), f.getLong())); + } + } else if (dtype == TString.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %s <==> %s\n", x.data().getObject(), o.data().getObject()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %s <==> %s\n", + index.getAndIncrement(), x.data().getObject(idx), f.getObject()); + }); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getObject(), o.data().getObject()); + } else { + o.data() + .scalars() + .forEachIndexed((idx, f) -> assertEquals(x.data().getObject(idx), f.getObject())); + } + } else if (dtype == TBool.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %b <==> %b\n", x.data().getBoolean(), o.data().getBoolean()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %b\n", + index.getAndIncrement(), x.data().getBoolean(idx), f.getBoolean()); + }); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getBoolean(), o.data().getBoolean()); + } else { + o.data() + .scalars() + .forEachIndexed((idx, f) -> assertEquals(x.data().getBoolean(idx), f.getBoolean())); + } + } + } + + /** {@inheritDoc} */ + @Override + public void print(PrintWriter writer, Output input) { + DataType dtype = input.asOutput().dataType(); + if (dtype == TFloat32.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } else if (dtype == TFloat64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } else if (dtype == TInt32.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } else if (dtype == TString.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); + }); + } else if (dtype == TBool.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean()); + }); + } else { + writer.println("Unexpected DataType: " + dtype); + } + writer.flush(); + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java new file mode 100644 index 00000000000..1a22289f4bf --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java @@ -0,0 +1,1066 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.io.PrintWriter; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Predicate; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import org.tensorflow.DataType; +import org.tensorflow.EagerSession; +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.Session; +import org.tensorflow.Tensor; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** Graph Mode Test Session */ +public class GraphTestSession extends TestSession { + + private final Graph graph; + private final Session session; + private final Ops tf; + + /** Create a Graph mode test session. */ + public GraphTestSession() { + graph = new Graph(); + session = new Session(graph); + tf = Ops.create(graph).withName("test"); + } + + /** {@inheritDoc} */ + @Override + public Ops getTF() { + return tf; + } + + /** Get the Graph object that is represented by this Test Session */ + public Graph getGraph() { + return graph; + } + + + /** + * Get the TensorFlow Session instance + * @return the TensorFlow Session instance + */ + public Session getSession() { + return session; + } + + /** {@inheritDoc} */ + @Override + public void close() { + session.close(); + graph.close(); + } + + /** {@inheritDoc} */ + @Override + public boolean isEager() { + return false; + } + + /** {@inheritDoc} */ + @Override + public Session getGraphSession() { + return this.session; + } + + /** {@inheritDoc} */ + @Override + public EagerSession getEagerSession() { + return null; + } + + /** {@inheritDoc} */ + @Override + public void initialize() { + graph + .initializers() + .forEach( + initializer -> { + session.runner().addTarget(initializer).run(); + }); + } + + /** {@inheritDoc} */ + @Override + public void run(Op op) { + session.run(op); + } + + /** {@inheritDoc} */ + @Override + public void evaluate(double expected, Operand input) { + DataType dtype = input.asOutput().dataType(); + if (dtype == TFloat32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals((float) expected, f.getFloat(), epsilon); + }); + } + } else if (dtype == TFloat64.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected, f.getDouble(), epsilon); + }); + } + } else if (dtype == TInt32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals((int) expected, f.getInt()); + }); + } + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals((long) expected, f.getLong()); + }); + } + } else { + fail("Unexpected DataType: " + dtype); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Number[] expected, Output input) { + int size = input.shape().size() == 0 ? 1 : (int) input.shape().size(); + assertEquals( + expected.length, + size, + () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); + DataType dtype = input.asOutput().dataType(); + if (dtype == TFloat32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals( + expected[index.getAndIncrement()].floatValue(), f.getFloat(), epsilon); + }); + } + } else if (dtype == TFloat64.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals( + expected[index.getAndIncrement()].doubleValue(), f.getDouble(), epsilon); + }); + } + } else if (dtype == TInt32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()].intValue(), f.getInt()); + }); + } + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong()); + }); + } + } else { + fail("Unexpected DataType: " + dtype); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(FloatNdArray expected, Output input) { + DataType dtype = input.asOutput().dataType(); + if (dtype == TFloat32.DTYPE) { + AtomicLong index = new AtomicLong(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected.getFloat(index.getAndIncrement()), f.getFloat(), epsilon); + }); + } + } else if (dtype == TFloat64.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals( + (double) expected.getFloat(index.getAndIncrement()), f.getDouble(), epsilon); + }); + } + } else if (dtype == TInt32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals((int) expected.getFloat(index.getAndIncrement()), f.getInt()); + }); + } + } else if (dtype == TInt64.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong()); + }); + } + } else { + fail("Unexpected DataType: " + dtype); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(String[] expected, Output input) { + int size = input.shape().size() == 0 ? 1 : (int) input.shape().size(); + assertEquals( + expected.length, + size, + () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()], f.getObject()); + }); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Boolean[] expected, Output input) { + int size = input.shape().size() == 0 ? 1 : (int) input.shape().size(); + assertEquals( + expected.length, + size, + () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + System.out.printf("%d). %b\n", index.getAndIncrement(), f.getObject()); + }); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> { + assertEquals(expected[index.getAndIncrement()], f.getObject()); + }); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Output expected, Output input) { + assert input.shape().equals(expected.shape()) + : String.format( + "expected shape (%s) != to input shape (%ds)", + expected.shape().toString(), input.shape().toString()); + AtomicInteger index = new AtomicInteger(); + DataType dtype = input.asOutput().dataType(); + boolean isScalar = input.shape().equals(Shape.scalar()); + if (dtype == TFloat32.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %f <==> %f\n", expectedResult.data().getFloat(), result.data().getFloat()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), + finalExpected.data().getFloat(idx), + f.getFloat()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getFloat(), result.data().getFloat(), epsilon); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertEquals(expectedResult.data().getFloat(idx), f.getFloat(), epsilon); + }); + } + } + } else if (dtype == TFloat64.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %f <==> %f\n", expectedResult.data().getDouble(), result.data().getDouble()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), + finalExpected.data().getDouble(idx), + f.getDouble()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getDouble(), result.data().getDouble(), epsilon); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertEquals(expectedResult.data().getDouble(idx), f.getDouble(), epsilon); + }); + } + } + } else if (dtype == TInt32.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %d <==> %d\n", expectedResult.data().getInt(), result.data().getInt()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), finalExpected.data().getInt(idx), f.getInt()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getInt(), result.data().getInt(), epsilon); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertEquals(expectedResult.data().getInt(idx), f.getInt(), epsilon); + }); + } + } + } else if (dtype == TInt64.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %d <==> %d\n", expectedResult.data().getLong(), result.data().getLong()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), finalExpected.data().getLong(idx), f.getLong()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getLong(), result.data().getLong(), epsilon); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertEquals(expectedResult.data().getLong(idx), f.getLong(), epsilon); + }); + } + } + } else if (dtype == TBool.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %b\n", expectedResult.data().getBoolean(), result.data().getBoolean()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %b\n", + index.getAndIncrement(), + finalExpected.data().getBoolean(idx), + f.getBoolean()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getBoolean(), result.data().getBoolean()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertEquals(expectedResult.data().getBoolean(idx), f.getBoolean()); + }); + } + } + } else if (dtype == TString.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %s <==> %s\n", expectedResult.data().getObject(), result.data().getObject()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %s <==> %s\n", + index.getAndIncrement(), + finalExpected.data().getObject(idx), + f.getObject()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getObject(), result.data().getObject()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertEquals(expectedResult.data().getObject(idx), f.getObject()); + }); + } + } + } else { + fail("Unexpected DataType: " + dtype); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluate(Output input, Predicate predicate) { + AtomicInteger index = new AtomicInteger(); + DataType dtype = input.asOutput().dataType(); + boolean isScalar = input.shape().equals(Shape.scalar()); + if (dtype == TFloat32.DTYPE) { + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %f\n", + predicate.test(result.data().getFloat()), result.data().getFloat()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getFloat()), f.getFloat()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + if (isScalar) { + assertTrue(predicate.test(result.data().getFloat())); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(result.data().getFloat())); + }); + } + } + } else if (dtype == TFloat64.DTYPE) { + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %f\n", + predicate.test(result.data().getDouble()), result.data().getDouble()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getDouble()), f.getDouble()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + if (isScalar) { + assertTrue(predicate.test(result.data().getDouble())); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(result.data().getDouble())); + }); + } + } + } else if (dtype == TInt32.DTYPE) { + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %d\n", predicate.test(result.data().getInt()), result.data().getInt()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getInt()), f.getInt()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + if (isScalar) { + assertTrue(predicate.test(result.data().getInt())); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(result.data().getInt())); + }); + } + } + } else if (dtype == TInt64.DTYPE) { + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %d\n", + predicate.test(result.data().getLong()), result.data().getLong()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getLong()), f.getLong()); + }); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + if (isScalar) { + assertTrue(predicate.test(result.data().getLong())); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + assertTrue(predicate.test(result.data().getLong())); + }); + } + } + } else { + fail("Unexpected DataType: " + dtype); + } + } + + /** {@inheritDoc} */ + @Override + public void print(PrintWriter writer, Output input) { + boolean isScalar = input.asOutput().shape().size() == 1; + + DataType dtype = input.dataType(); + if (dtype == TFloat32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { + if (isScalar) { + writer.printf("%d). %f\n", index.getAndIncrement(), result.data().getFloat()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + writer.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); + }); + } + } + } else if (dtype == TFloat64.DTYPE) { + AtomicInteger index = new AtomicInteger(); + + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + if (isScalar) { + writer.printf( + "%d). %f\n", index.getAndIncrement(), ((Output) input).data().getDouble()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + writer.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); + }); + } + } + } else if (dtype == TInt32.DTYPE) { + AtomicInteger index = new AtomicInteger(); + + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + if (isScalar) { + writer.printf( + "%d). %f\n", index.getAndIncrement(), ((Output) input).data().getInt()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + writer.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); + }); + } + } + } else if (dtype == TInt64.DTYPE) { + AtomicInteger index = new AtomicInteger(); + + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + if (isScalar) { + writer.printf( + "%d). %f\n", index.getAndIncrement(), ((Output) input).data().getLong()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + writer.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); + }); + } + } + } else if (dtype == TBool.DTYPE) { + AtomicInteger index = new AtomicInteger(); + + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TBool.DTYPE)) { + if (isScalar) { + writer.printf( + "%d). %b\n", index.getAndIncrement(), ((Output) input).data().getBoolean()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + writer.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean()); + }); + } + } + } else if (dtype == TString.DTYPE) { + AtomicInteger index = new AtomicInteger(); + + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + if (isScalar) { + writer.printf( + "%d). %s\n", index.getAndIncrement(), ((Output) input).data().getObject()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> { + writer.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); + }); + } + } + } else { + writer.println("Unexpected DataType: " + dtype); + } + writer.flush(); + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java new file mode 100644 index 00000000000..1aaa4aa7af4 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java @@ -0,0 +1,247 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.util.function.Supplier; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Session; +import org.tensorflow.Tensor; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Constant; +import org.tensorflow.types.TBool; + +/** + * + * @author Jim Clarke + */ +public class SmartCondTest { + + public SmartCondTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + /** + * Test of cond method, of class SmartCond. + */ + @Test + public void testCondOp() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + Constant pred = tf.constant(true); + sess.run(pred); + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = true; + Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + + @Test + public void testCondOp2() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + Constant pred = tf.constant(true); + sess.run(pred); + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = true; + Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + + @Test + public void testCondOpPoint1() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + Operand pred = tf.math.equal(tf.constant(0.1), tf.constant(1.0)); + sess.run(pred); + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = false; + Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + } + } + + @Test + public void testCondOpString() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + Operand pred = tf.math.equal(tf.constant("TRUE"), tf.constant("TRUE")); + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = true; + Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + } + } + + /** + * Test of cond method, of class SmartCond. + */ + @Test + public void testCondBoolean() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + boolean pred = false; + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = false; + Operand resultOp = SmartCond.select(pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + + /** + * Test of cond method, of class SmartCond. + */ + @Test + public void testCondInt() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + int pred = 1; + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = true; + Operand resultOp = SmartCond.select(pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + + /** + * Test of cond method, of class SmartCond. + */ + @Test + public void testCondFloat1() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + float pred = 1.0F; + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = true; + Operand resultOp = SmartCond.select(pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + + /** + * Test of cond method, of class SmartCond. + */ + @Test + public void testCondFloat0_1() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + float pred = 0.1F; + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = false; + Operand resultOp = SmartCond.select(pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + + /** + * Test of cond method, of class SmartCond. + */ + @Test + public void testCondString() { + try (Graph graph = new Graph(); Session sess = new Session(graph)) { + Ops tf = Ops.create(graph).withName("test"); + String pred = "true"; + + Supplier true_fn = () -> tf.constant(true); + Supplier false_fn = () -> tf.constant(false); + boolean expResult = true; + Operand resultOp = SmartCond.select(pred, true_fn, false_fn); + boolean actualResult; + try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { + actualResult = result.data().getBoolean(); + assertEquals(expResult, actualResult); + } + + } + } + +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java new file mode 100644 index 00000000000..1e5393aa2af --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java @@ -0,0 +1,618 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.util.function.Predicate; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.tensorflow.EagerSession; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.Session; +import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TString; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** Base class for Test Session */ +public abstract class TestSession implements AutoCloseable { + + protected float epsilon = 1e-5F; + protected boolean debug; + + /** The Test Session mode, either Eager or Graph */ + public enum Mode { + EAGER, + GRAPH; + } + + /** + * Create an Eager Test Session + * + * @return the Eager Test Session + */ + public static TestSession createEagerSession() { + return new EagerTestSession(); + } + + /** + * Create a Graph Test Session + * + * @return the Graph Test Session + */ + public static TestSession createGraphSession() { + return new GraphTestSession(); + } + + /** + * Create a Test Session + * + * @param mode + * @return + */ + public static TestSession createTestSession(Mode mode) { + return mode == Mode.EAGER ? createEagerSession() : createGraphSession(); + } + + /** Initialize the Test Session, default implementation is do nothing. */ + public void initialize() { + // empty + } + + /** + * Run the Operation + * + * @param op the Operation to run + */ + public void run(Op op) { + // empty + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Number expected, Operand input) { + evaluate(new Number[] {expected}, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Number expected, Op input) { + evaluate(new Number[] {expected}, input); + } + + /** + * Evaluate the input against the expected values + * + * @param expected the expected values + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Number[] expected, Op input) { + Output output = input.op().output(0); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Number[] expected, Operand input) { + Output output = input.asOutput(); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(byte expected, Operand input) { + evaluate((double) expected, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(int expected, Operand input) { + evaluate((double) expected, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(long expected, Operand input) { + evaluate((double) expected, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(float expected, Operand input) { + evaluate((double) expected, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(double expected, Operand input); + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(byte[] expected, Operand input) { + Byte[] iArray = new Byte[expected.length]; + for (int i = 0; i < expected.length; i++) iArray[i] = expected[i]; + evaluate(iArray, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(int[] expected, Operand input) { + Integer[] iArray = new Integer[expected.length]; + for (int i = 0; i < expected.length; i++) iArray[i] = expected[i]; + evaluate(iArray, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(long[] expected, Operand input) { + Long[] iArray = new Long[expected.length]; + for (int i = 0; i < expected.length; i++) iArray[i] = expected[i]; + evaluate(iArray, input); + } + + /** + * Evaluate the input against the expected values + * + * @param expected the expected values + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(float[] expected, Operand input) { + Float[] iArray = new Float[expected.length]; + for (int i = 0; i < expected.length; i++) iArray[i] = expected[i]; + evaluate(iArray, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(double[] expected, Operand input) { + Double[] iArray = new Double[expected.length]; + for (int i = 0; i < expected.length; i++) iArray[i] = expected[i]; + evaluate(iArray, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(Number[] expected, Output input); + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(String expected, Operand input) { + evaluate(new String[] {expected}, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(String expected, Op input) { + evaluate(new String[] {expected}, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(String[] expected, Op input) { + Output output = input.op().output(0); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(String[] expected, Operand input) { + Output output = input.asOutput(); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(String[] expected, Output input); + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Boolean expected, Operand input) { + evaluate(new Boolean[] {expected}, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Boolean expected, Op input) { + evaluate(new Boolean[] {expected}, input); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Boolean[] expected, Op input) { + Output output = input.op().output(0); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Boolean[] expected, Operand input) { + Output output = input.asOutput(); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(Boolean[] expected, Output input); + + public void evaluate(Operand expected, Op input) { + Output output = input.op().output(0); + evaluate(expected, output); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(Operand expected, Operand input) { + evaluate(expected.asOutput(), input.asOutput()); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(Output expected, Output input); + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(FloatNdArray expected, Operand input) { + evaluate(expected, input.asOutput()); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(FloatNdArray expected, Output input); + + public void evaluate(Operand input, Predicate predicate) { + evaluate(input.asOutput(), predicate); + } + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public abstract void evaluate(Output input, Predicate predicate); + + /** + * Evaluate the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError + */ + public void evaluate(FloatNdArray input, Predicate predicate) { + input.scalars().forEach(f -> assertTrue(predicate.test(f.getFloat()))); + } + + /** + * Print the input + * + * @param out the output stream + * @param input the operand to print + * @param the data type of the input + */ + public void print(OutputStream out, Operand input) { + print(new PrintWriter(new OutputStreamWriter(out)), input.asOutput()); + } + + /** + * Print the input + * + * @param out the output stream + * @param input the op to print + * @param the data type of the input + */ + public void print(OutputStream out, Op input) { + print(new PrintWriter(new OutputStreamWriter(out)), input.op().output(0)); + } + + /** + * Print the input + * + * @param out the output stream + * @param input the op to print + * @param the data type of the input + */ + public void print(OutputStream out, Output input) { + print(new PrintWriter(new OutputStreamWriter(out)), input); + } + + /** + * Print the input + * + * @param witer the output writer + * @param input the operand to print + * @param the data type of the input + */ + public void print(Writer writer, Operand input) { + print(new PrintWriter(writer), input.asOutput()); + } + + /** + * Print the input + * + * @param witer the output writer + * @param input the op to print + * @param the data type of the input + */ + public void print(Writer writer, Op input) { + print(new PrintWriter(writer), input.op().output(0)); + } + + /** + * Print the input + * + * @param witer the output writer + * @param input the op to print + * @param the data type of the input + */ + public void print(Writer writer, Output input) { + print(new PrintWriter(writer), input); + } + + /** + * Print the input + * + * @param witer the output writer + * @param input the op to print + */ + public abstract void print(PrintWriter writer, Output input); + + /** + * Get the TensorFlow Ops + * + * @return the TensorFlow Ops + */ + public abstract Ops getTF(); + + /** + * Determine if this Test Session represents an Eager Session + * + * @return true, if this Test Session represents an Eager Session + */ + public abstract boolean isEager(); + + /** + * Determine if this Test Session represents a Graph Session + * + * @return true, if this Test Session represents a Graph Session + */ + public boolean isGraph() { + return !isEager(); + } + + /** + * Get the epsilon value for evaluating float values + * + * @return the epsilon value for evaluating float values + */ + public float getEpsilon() { + return this.epsilon; + } + + /** + * Set the epsilon value for evaluating float values + * + * @param epsilon the epsilon value for evaluating float values + */ + public void setEpsilon(float epsilon) { + this.epsilon = epsilon; + } + + /** + * Get the TensorFlow session object associated with this Test Session + * + * @return a TensorFlow session if this is a Graph session, otherwise null + */ + public abstract Session getGraphSession(); + + /** + * Get the TensorFlow eager session object associated with this Test Session + * + * @return a TensorFlow session if this is an eager session, otherwise null + */ + public abstract EagerSession getEagerSession(); + + /** {@inheritDoc} */ + @Override + public abstract void close(); + + /** @return the debug setting */ + public boolean isDebug() { + return debug; + } + + /** + * Set the debug flag + * + * @param debug the setting for debugging + */ + public void setDebug(boolean debug) { + this.debug = debug; + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java new file mode 100644 index 00000000000..18442961ac5 --- /dev/null +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java @@ -0,0 +1,234 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.keras.utils; + +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.DataType; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUint8; + +/** + * + * @author Jim Clarke + */ +public class TypeUtilTest { + + public TypeUtilTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + /** + * Test of isFloating method, of class TypeUtils. + */ + @Test + public void testIsFloating() { + DataType dtype = TFloat32.DTYPE; + boolean expResult = true; + boolean result = TypeUtils.isFloating(dtype); + assertEquals(expResult, result); + + dtype = TInt32.DTYPE; + expResult = false; + result = TypeUtils.isFloating(dtype); + assertEquals(expResult, result); + + dtype = TString.DTYPE; + expResult = false; + result = TypeUtils.isFloating(dtype); + assertEquals(expResult, result); + } + + /** + * Test of isInteger method, of class TypeUtils. + */ + @Test + public void testIsInteger() { + DataType dtype = TFloat32.DTYPE; + boolean expResult = false; + boolean result = TypeUtils.isInteger(dtype); + assertEquals(expResult, result); + + dtype = TInt32.DTYPE; + expResult = true; + result = TypeUtils.isInteger(dtype); + assertEquals(expResult, result); + + dtype = TString.DTYPE; + expResult = false; + result = TypeUtils.isInteger(dtype); + assertEquals(expResult, result); + } + + /** + * Test of isNumeric method, of class TypeUtils. + */ + @Test + public void testIsNumeric() { + DataType dtype = TFloat16.DTYPE; + boolean expResult = true; + boolean result = TypeUtils.isNumeric(dtype); + assertEquals(expResult, result); + + dtype = TInt64.DTYPE; + expResult = true; + result = TypeUtils.isNumeric(dtype); + assertEquals(expResult, result); + + dtype = TUint8.DTYPE; + expResult = true; + result = TypeUtils.isNumeric(dtype); + assertEquals(expResult, result); + + dtype = TBool.DTYPE; + expResult = false; + result = TypeUtils.isNumeric(dtype); + assertEquals(expResult, result); + + dtype = TString.DTYPE; + expResult = false; + result = TypeUtils.isNumeric(dtype); + assertEquals(expResult, result); + } + + /** + * Test of isBoolean method, of class TypeUtils. + */ + @Test + public void testIsBoolean() { + DataType dtype = TFloat16.DTYPE; + boolean expResult = false; + boolean result = TypeUtils.isBoolean(dtype); + assertEquals(expResult, result); + + dtype = TInt64.DTYPE; + expResult = false; + result = TypeUtils.isBoolean(dtype); + assertEquals(expResult, result); + + dtype = TBool.DTYPE; + expResult = true; + result = TypeUtils.isBoolean(dtype); + assertEquals(expResult, result); + } + + /** + * Test of isString method, of class TypeUtils. + */ + @Test + public void testIsString() { + DataType dtype = TFloat16.DTYPE; + boolean expResult = false; + boolean result = TypeUtils.isString(dtype); + assertEquals(expResult, result); + + dtype = TBool.DTYPE; + expResult = false; + result = TypeUtils.isString(dtype); + assertEquals(expResult, result); + + dtype = TString.DTYPE; + expResult = true; + result = TypeUtils.isString(dtype); + assertEquals(expResult, result); + } + + /** + * Test of of method, of class TypeUtils. + */ + @Test + public void testOf() { + String name = "BFLOAT16"; + DataType expResult = TBfloat16.DTYPE; + DataType result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "FLOAT16"; + expResult = TFloat16.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "FLOAT"; + expResult = TFloat32.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "DOUBLE"; + expResult = TFloat64.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "UINT8"; + expResult = TUint8.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "INT32"; + expResult = TInt32.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "INT64"; + expResult = TInt64.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "BOOL"; + expResult = TBool.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "STRING"; + expResult = TString.DTYPE; + result = TypeUtils.of(name); + assertEquals(expResult, result); + + name = "FOO"; + try { + TypeUtils.of(name); + fail("IllegalArgumentException not thrown."); + } catch (IllegalArgumentException expected) { + + } + + } + +} From 9c113a7e6dfcc98c0e57bede8dcb46de56125320 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 08:12:27 -0400 Subject: [PATCH 02/55] Added static final NAME to replace hardcoded String in the create method. This allows the NAME to be used elsewhere instead of hardcoding the string. --- .../java/org/tensorflow/types/TBfloat16.java | 29 ++++++----- .../main/java/org/tensorflow/types/TBool.java | 13 +++-- .../java/org/tensorflow/types/TFloat16.java | 28 +++++----- .../java/org/tensorflow/types/TFloat32.java | 14 +++-- .../java/org/tensorflow/types/TFloat64.java | 13 +++-- .../java/org/tensorflow/types/TInt32.java | 13 +++-- .../java/org/tensorflow/types/TInt64.java | 13 +++-- .../java/org/tensorflow/types/TString.java | 52 +++++++++---------- .../java/org/tensorflow/types/TUint8.java | 13 +++-- 9 files changed, 92 insertions(+), 96 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBfloat16.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBfloat16.java index 531bedc5e40..faf698a6fe5 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBfloat16.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBfloat16.java @@ -36,21 +36,24 @@ * Brain 16-bit float tensor type. * *

This type differs from {@link TFloat16} as it truncates the mantissa of a 32-bit float and - * preserve all exponent bits for faster conversion, while the latter shrink the exponent and have - * a longer mantissa for more precision. + * preserve all exponent bits for faster conversion, while the latter shrink the exponent and have a + * longer mantissa for more precision. * - *

Since there is no floating-point type that fits in 16 bits in Java, a conversion (with potentially - * a precision loss) is required for each 32 bits value written or read on a tensor of this type from - * the JVM. Therefore, if a lot of I/O operations are to be expected on a tensor, performances will be - * improved by working with {@link TFloat32} or {@link TFloat64} data types whenever possible. + *

Since there is no floating-point type that fits in 16 bits in Java, a conversion (with + * potentially a precision loss) is required for each 32 bits value written or read on a tensor of + * this type from the JVM. Therefore, if a lot of I/O operations are to be expected on a tensor, + * performances will be improved by working with {@link TFloat32} or {@link TFloat64} data types + * whenever possible. * - *

Note that some CPUs support the bfloat16 format natively, which can result in faster computation - * compared to {@link TFloat16} when GPUs are not used. + *

Note that some CPUs support the bfloat16 format natively, which can result in faster + * computation compared to {@link TFloat16} when GPUs are not used. */ public interface TBfloat16 extends FloatNdArray, TNumber { + /** readable-name for the data type */ + static final String NAME = "BFLOAT16"; /** Type metadata */ - DataType DTYPE = DataType.create("BFLOAT16", 14, 2, TBfloat16Impl::mapTensor); + DataType DTYPE = DataType.create(NAME, 14, 2, TBfloat16Impl::mapTensor); /** * Allocates a new tensor for storing a single float value. @@ -121,17 +124,15 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TBfloat16} - */ +/** Hidden implementation of a {@code TBfloat16} */ class TBfloat16Impl extends FloatDenseNdArray implements TBfloat16 { static TBfloat16 mapTensor(TF_Tensor nativeTensor, Shape shape) { - return new TBfloat16Impl(DataLayouts.BFLOAT16.applyTo(TensorBuffers.toShorts(nativeTensor)), shape); + return new TBfloat16Impl( + DataLayouts.BFLOAT16.applyTo(TensorBuffers.toShorts(nativeTensor)), shape); } private TBfloat16Impl(FloatDataBuffer buffer, Shape shape) { super(buffer, shape); } } - diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java index 835d0a1be31..bac5fb96f87 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -36,14 +36,15 @@ * Boolean tensor type. * *

If direct memory mapping is not available in the JVM, tensors of this type might require an - * explicit mapping between Java boolean values and byte buffers using the - * {@link DataLayouts#BOOL BOOL} layout, which may impact I/O - * performances. + * explicit mapping between Java boolean values and byte buffers using the {@link DataLayouts#BOOL + * BOOL} layout, which may impact I/O performances. */ public interface TBool extends BooleanNdArray, TType { + /** readable-name for the data type */ + static final String NAME = "BOOL"; /** Type metadata */ - DataType DTYPE = DataType.create("BOOL", 10, 1, TBoolImpl::mapTensor); + DataType DTYPE = DataType.create(NAME, 10, 1, TBoolImpl::mapTensor); /** * Allocates a new tensor for storing a single boolean value. @@ -114,9 +115,7 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TBool} - */ +/** Hidden implementation of a {@code TBool} */ class TBoolImpl extends BooleanDenseNdArray implements TBool { static TBool mapTensor(TF_Tensor nativeTensor, Shape shape) { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat16.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat16.java index 3f0deb00d0f..6ce463ff2c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat16.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat16.java @@ -35,19 +35,23 @@ /** * IEEE-754 half-precision 16-bit float tensor type. * - *

Since there is no floating-point type that fits in 16 bits in Java, a conversion (with potentially - * a precision loss) is required for each 32 bits value written or read on a tensor of this type from - * the JVM. Therefore, if a lot of I/O operations are to be expected on a tensor, performances will be - * improved by working with {@link TFloat32} or {@link TFloat64} data types whenever possible. + *

Since there is no floating-point type that fits in 16 bits in Java, a conversion (with + * potentially a precision loss) is required for each 32 bits value written or read on a tensor of + * this type from the JVM. Therefore, if a lot of I/O operations are to be expected on a tensor, + * performances will be improved by working with {@link TFloat32} or {@link TFloat64} data types + * whenever possible. * - *

Also, {@code TFloat16} tensors normally perform better if they are located in GPU memory since most - * CPUs do not support this format natively. For CPU computation on 16-bit floats, the {@link TBfloat16} - * tensor type might be a better option. + *

Also, {@code TFloat16} tensors normally perform better if they are located in GPU memory since + * most CPUs do not support this format natively. For CPU computation on 16-bit floats, the {@link + * TBfloat16} tensor type might be a better option. */ public interface TFloat16 extends FloatNdArray, TNumber { + /** readable-name for the data type */ + static final String NAME = "FLOAT16"; + /** Type metadata */ - DataType DTYPE = DataType.create("FLOAT16", 19, 2, TFloat16Impl::mapTensor); + DataType DTYPE = DataType.create(NAME, 19, 2, TFloat16Impl::mapTensor); /** * Allocates a new tensor for storing a single float value. @@ -118,17 +122,15 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TFloat16} - */ +/** Hidden implementation of a {@code TFloat16} */ class TFloat16Impl extends FloatDenseNdArray implements TFloat16 { static TFloat16 mapTensor(TF_Tensor nativeTensor, Shape shape) { - return new TFloat16Impl(DataLayouts.FLOAT16.applyTo(TensorBuffers.toShorts(nativeTensor)), shape); + return new TFloat16Impl( + DataLayouts.FLOAT16.applyTo(TensorBuffers.toShorts(nativeTensor)), shape); } private TFloat16Impl(FloatDataBuffer buffer, Shape shape) { super(buffer, shape); } } - diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat32.java index 4b06ad2d57e..968b3f2a539 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat32.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat32.java @@ -31,13 +31,14 @@ import org.tensorflow.ndarray.impl.dense.FloatDenseNdArray; import org.tensorflow.types.family.TNumber; -/** - * IEEE-754 single-precision 32-bit float tensor type. - */ +/** IEEE-754 single-precision 32-bit float tensor type. */ public interface TFloat32 extends FloatNdArray, TNumber { + /** readable-name for the data type */ + static final String NAME = "FLOAT"; + /** Type metadata */ - DataType DTYPE = DataType.create("FLOAT", 1, 4, TFloat32Impl::mapTensor); + DataType DTYPE = DataType.create(NAME, 1, 4, TFloat32Impl::mapTensor); /** * Allocates a new tensor for storing a single float value. @@ -108,9 +109,7 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TFloat32} - */ +/** Hidden implementation of a {@code TFloat32} */ class TFloat32Impl extends FloatDenseNdArray implements TFloat32 { static TFloat32 mapTensor(TF_Tensor nativeTensor, Shape shape) { @@ -121,4 +120,3 @@ private TFloat32Impl(FloatDataBuffer buffer, Shape shape) { super(buffer, shape); } } - diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat64.java index 0b2109ac374..9cf5fdaaeaa 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat64.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TFloat64.java @@ -31,13 +31,14 @@ import org.tensorflow.ndarray.impl.dense.DoubleDenseNdArray; import org.tensorflow.types.family.TNumber; -/** - * IEEE-754 double-precision 64-bit float tensor type. - */ +/** IEEE-754 double-precision 64-bit float tensor type. */ public interface TFloat64 extends DoubleNdArray, TNumber { + /** readable-name for the data type */ + static final String NAME = "DOUBLE"; + /** Type metadata */ - DataType DTYPE = DataType.create("DOUBLE", 2, 8, TFloat64Impl::mapTensor); + DataType DTYPE = DataType.create(NAME, 2, 8, TFloat64Impl::mapTensor); /** * Allocates a new tensor for storing a single double value. @@ -108,9 +109,7 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TFloat64} - */ +/** Hidden implementation of a {@code TFloat64} */ class TFloat64Impl extends DoubleDenseNdArray implements TFloat64 { static TFloat64 mapTensor(TF_Tensor nativeTensor, Shape shape) { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java index ac0dbec1d42..4a1139ddde2 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt32.java @@ -30,13 +30,14 @@ import org.tensorflow.ndarray.impl.dense.IntDenseNdArray; import org.tensorflow.types.family.TNumber; -/** - * 32-bit signed integer tensor type. - */ +/** 32-bit signed integer tensor type. */ public interface TInt32 extends IntNdArray, TNumber { + /** readable-name for the data type */ + static final String NAME = "INT32"; + /** Type metadata */ - DataType DTYPE = DataType.create("INT32", 3, 4, TInt32Impl::mapTensor); + DataType DTYPE = DataType.create(NAME, 3, 4, TInt32Impl::mapTensor); /** * Allocates a new tensor for storing a single int value. @@ -107,9 +108,7 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TInt32} - */ +/** Hidden implementation of a {@code TInt32} */ class TInt32Impl extends IntDenseNdArray implements TInt32 { static TInt32 mapTensor(TF_Tensor nativeTensor, Shape shape) { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java index bbe05f9b1ff..04fd4fd7799 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TInt64.java @@ -31,13 +31,14 @@ import org.tensorflow.ndarray.impl.dense.LongDenseNdArray; import org.tensorflow.types.family.TNumber; -/** - * 64-bit signed integer tensor type. - */ +/** 64-bit signed integer tensor type. */ public interface TInt64 extends LongNdArray, TNumber { + /** readable-name for the data type */ + static final String NAME = "INT64"; + /** Type metadata */ - DataType DTYPE = DataType.create("INT64", 9, 8, TInt64Impl::mapTensor); + DataType DTYPE = DataType.create(NAME, 9, 8, TInt64Impl::mapTensor); /** * Allocates a new tensor for storing a single long value. @@ -108,9 +109,7 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) { } } -/** - * Hidden implementation of a {@code TInt64} - */ +/** Hidden implementation of a {@code TInt64} */ class TInt64Impl extends LongDenseNdArray implements TInt64 { static TInt64 mapTensor(TF_Tensor nativeTensor, Shape shape) { diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java index 90ae4ef9cb8..0f097a16ddb 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -40,15 +40,16 @@ *

This type can be used to store any arbitrary byte sequence of variable length. * *

Since the size of a tensor is fixed, creating a tensor of this type requires to provide all of - * its values initially, so TensorFlow can compute and allocate the right amount of memory. Then - * the data in the tensor is initialized once and cannot be modified afterwards. + * its values initially, so TensorFlow can compute and allocate the right amount of memory. Then the + * data in the tensor is initialized once and cannot be modified afterwards. */ public interface TString extends NdArray, TType { - /** - * Type metadata - */ - DataType DTYPE = DataType.create("STRING", 7, -1, TStringImpl::mapTensor); + /** readable-name for the data type */ + static final String NAME = "STRING"; + + /** Type metadata */ + DataType DTYPE = DataType.create(NAME, 7, -1, TStringImpl::mapTensor); /** * Allocates a new tensor for storing a string scalar. @@ -96,8 +97,8 @@ static Tensor tensorOf(NdArray src) { *

The tensor will have the same shape as the source array and its data will be copied. The * strings are encoded into bytes using the charset passed in parameter. * - *

If charset is different than default UTF-8, then it must also be provided explicitly - * when reading data from the tensor, using {@link #using(Charset)}:

+ *

If charset is different than default UTF-8, then it must also be provided explicitly when + * reading data from the tensor, using {@link #using(Charset)}: * *

{@code
    * // Given `originalStrings` an initialized vector of strings
@@ -135,8 +136,8 @@ static Tensor tensorOf(Shape shape, DataBuffer data) {
    * 

The data will be copied from the provided buffer to the tensor after it is allocated. The * strings are encoded into bytes using the charset passed in parameter. * - *

If charset is different than default UTF-8, then it must also be provided explicitly - * when reading data from the tensor, using {@link #using(Charset)}:

+ *

If charset is different than default UTF-8, then it must also be provided explicitly when + * reading data from the tensor, using {@link #using(Charset)}: * *

{@code
    * // Given `originalStrings` an initialized buffer of strings
@@ -161,8 +162,8 @@ static Tensor tensorOf(Charset charset, Shape shape, DataBuffer
    *
    * 

The tensor will have the same shape as the source array and its data will be copied. * - *

If data must be read as raw bytes as well, the user must specify it explicitly by - * invoking {@link #asBytes()} on the returned data:

+ *

If data must be read as raw bytes as well, the user must specify it explicitly by invoking + * {@link #asBytes()} on the returned data: * *

{@code
    * byte[] bytes = tensor.data().asBytes().getObject(0);  // returns first sequence of bytes in the tensor
@@ -180,8 +181,8 @@ static Tensor tensorOfBytes(NdArray src) {
    *
    * 

The data will be copied from the provided buffer to the tensor after it has been allocated. * - *

If data must be read as raw bytes as well, the user must specify it explicitly by - * invoking {@link #asBytes()} on the returned data:

+ *

If data must be read as raw bytes as well, the user must specify it explicitly by invoking + * {@link #asBytes()} on the returned data: * *

{@code
    * byte[] bytes = tensor.data().asBytes().getObject(0);  // returns first sequence of bytes in the tensor
@@ -212,15 +213,11 @@ static Tensor tensorOfBytes(Shape shape, DataBuffer data) {
    */
   TString using(Charset charset);
 
-  /**
-   * @return the tensor data as a n-dimensional array of raw byte sequences.
-   */
+  /** @return the tensor data as a n-dimensional array of raw byte sequences. */
   NdArray asBytes();
 }
 
-/**
- * Hidden implementation of a {@code TString}
- */
+/** Hidden implementation of a {@code TString} */
 class TStringImpl extends DenseNdArray implements TString {
 
   @Override
@@ -235,9 +232,11 @@ public NdArray asBytes() {
 
   static  Tensor createTensor(NdArray src, Function getBytes) {
     long size = StringTensorBuffer.computeSize(src, getBytes);
-    return Tensor.of(TString.DTYPE, src.shape(), size, data ->
-        ((TStringImpl)data).tensorBuffer.init(src, getBytes)
-    );
+    return Tensor.of(
+        TString.DTYPE,
+        src.shape(),
+        size,
+        data -> ((TStringImpl) data).tensorBuffer.init(src, getBytes));
   }
 
   static TString mapTensor(TF_Tensor nativeTensor, Shape shape) {
@@ -245,13 +244,14 @@ static TString mapTensor(TF_Tensor nativeTensor, Shape shape) {
     return new TStringImpl(buffer, UTF_8_LAYOUT, shape);
   }
 
-  private static DataLayout, String> UTF_8_LAYOUT = DataLayouts.ofStrings(StandardCharsets.UTF_8);
+  private static DataLayout, String> UTF_8_LAYOUT =
+      DataLayouts.ofStrings(StandardCharsets.UTF_8);
 
   private final StringTensorBuffer tensorBuffer;
 
-  private TStringImpl(StringTensorBuffer buffer, DataLayout, String> layout, Shape shape) {
+  private TStringImpl(
+      StringTensorBuffer buffer, DataLayout, String> layout, Shape shape) {
     super(layout.applyTo(buffer), shape);
     tensorBuffer = buffer;
   }
 }
-
diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUint8.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUint8.java
index f55959194e5..365f41196fb 100644
--- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUint8.java
+++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TUint8.java
@@ -31,13 +31,14 @@
 import org.tensorflow.ndarray.impl.dense.ByteDenseNdArray;
 import org.tensorflow.types.family.TNumber;
 
-/**
- * 8-bit unsigned integer tensor type.
- */
+/** 8-bit unsigned integer tensor type. */
 public interface TUint8 extends ByteNdArray, TNumber {
 
+  /** readable-name for the data type */
+  static final String NAME = "UINT8";
+
   /** Type metadata */
-  DataType DTYPE = DataType.create("UINT8", 4, 1, TUint8Impl::mapTensor);
+  DataType DTYPE = DataType.create(NAME, 4, 1, TUint8Impl::mapTensor);
 
   /**
    * Allocates a new tensor for storing a single byte value.
@@ -108,9 +109,7 @@ static Tensor tensorOf(Shape shape, Consumer dataInit) {
   }
 }
 
-/**
- * Hidden implementation of a {@code TUint8}
- */
+/** Hidden implementation of a {@code TUint8} */
 class TUint8Impl extends ByteDenseNdArray implements TUint8 {
 
   static TUint8 mapTensor(TF_Tensor nativeTensor, Shape shape) {

From 824d4872257a5a614a53c7dff579748b819c800e Mon Sep 17 00:00:00 2001
From: Jim Clarke 
Date: Thu, 20 Aug 2020 08:14:26 -0400
Subject: [PATCH 03/55] Changed of method to use the DataType NAME attribute
 rather than hardcoding the string. added methods isFloating(), isInteger(),
 isNUmeric(), isBoolean() and isString()

---
 .../main/java/org/tensorflow/DataType.java    | 98 ++++++++++++++++---
 1 file changed, 87 insertions(+), 11 deletions(-)

diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java
index 24bd0826fa8..48940f793dc 100644
--- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java
+++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/DataType.java
@@ -17,6 +17,15 @@
 
 import org.tensorflow.internal.c_api.TF_Tensor;
 import org.tensorflow.ndarray.Shape;
+import org.tensorflow.types.TBfloat16;
+import org.tensorflow.types.TBool;
+import org.tensorflow.types.TFloat16;
+import org.tensorflow.types.TFloat32;
+import org.tensorflow.types.TFloat64;
+import org.tensorflow.types.TInt32;
+import org.tensorflow.types.TInt64;
+import org.tensorflow.types.TUint8;
+import org.tensorflow.types.TString;
 import org.tensorflow.types.family.TType;
 
 /** Represents a type of elements in a {@link Tensor} */
@@ -43,27 +52,96 @@ public interface TensorMapper {
    * @param byteSize size of an element of this type, in bytes, -1 if unknown
    * @param tensorMapper method for mapping tensor memory to elements of this type
    */
-  public static  DataType create(String name, int value, int byteSize, TensorMapper tensorMapper) {
+  public static  DataType create(
+      String name, int value, int byteSize, TensorMapper tensorMapper) {
     return new DataType<>(name, value, byteSize, tensorMapper);
   }
 
   /**
-   * Returns the size of an element of this type, in bytes, or -1 if element size is variable.
+   * Gets the DataType associated with the readable-name for the type
+   * 

The name must match exactly the name used to create the desired DataType

+ * + * @param name readable-name for the type + * @return the DataType + * @throws java.lang.IllegalArgumentException if the name is not a valid data type name + * @throws java.lang.NullPointerException if name is null */ + public static DataType of(String name) { + switch (name) { + case TBfloat16.NAME: + return TBfloat16.DTYPE; + case TFloat16.NAME: + return TFloat16.DTYPE; + case TFloat32.NAME: + return TFloat32.DTYPE; + case TFloat64.NAME: + return TFloat64.DTYPE; + case TUint8.NAME: + return TUint8.DTYPE; + case TInt32.NAME: + return TInt32.DTYPE; + case TInt64.NAME: + return TInt64.DTYPE; + case TBool.NAME: + return TBool.DTYPE; + case TString.NAME: + return TString.DTYPE; + default: + throw new IllegalArgumentException(String.format("%s is an unknown DataType", name)); + } + } + + /** Returns true if this data type represents a floating point type */ + public boolean isFloating() { + switch (this.name()) { + case TBfloat16.NAME: + case TFloat16.NAME: + case TFloat32.NAME: + case TFloat64.NAME: + return true; + default: + return false; + } + } + + /** Returns true if this data type represents an integer type */ + public boolean isInteger() { + switch (this.name()) { + case TInt32.NAME: + case TInt64.NAME: + case TUint8.NAME: + return true; + default: + return false; + } + } + + /** Returns true if this data type represents a numeric type */ + public boolean isNumeric() { + return isFloating() || isInteger(); + } + + /** Returns true if this data type represents a boolean type */ + public boolean isBoolean() { + return this.name().equals(TBool.NAME); + } + + /** Returns true if this data type represents a string type */ + public boolean isString() { + return this.name().equals(TString.NAME); + } + + /** Returns the size of an element of this type, in bytes, or -1 if element size is variable. */ public int byteSize() { return byteSize; } - /** - * Returns true if this datatype has elements of variable length - */ + /** Returns true if this datatype has elements of variable length */ public boolean isVariableLength() { return byteSize == -1; } - /** - * Returns a readable name for this type - */ + /** Returns a readable name for this type */ public String name() { return name; } @@ -73,9 +151,7 @@ public String toString() { return name + " (" + nativeCode + ")"; } - /** - * Returns the numeric code for this datatype, as recognized by the native library (C API) - */ + /** Returns the numeric code for this datatype, as recognized by the native library (C API) */ int nativeCode() { return nativeCode; } From 07a83a5aef5a25f385aa762e3bb929e22c8052e3 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 08:17:40 -0400 Subject: [PATCH 04/55] Added method WriteFieldWithInitializer to output a "final static String OP_NAME" to each generated operation. --- .../src/bazel/op_generator/op_generator.cc | 7 +++++++ .../src/bazel/op_generator/source_writer.cc | 16 ++++++++++++++++ .../src/bazel/op_generator/source_writer.h | 5 ++++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc index f0fb802d548..03db4be125b 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc @@ -509,6 +509,13 @@ void GenerateOp(const OpSpec& op, const EndpointSpec& endpoint, RenderInterfaceImpl(op, mode, &writer); } writer.EndLine(); + + Variable nameVariable = Variable::Create("OP_NAME", Type::Class("String")); + Javadoc name_javadoc = Javadoc::Create("The name of this op, as known by TensorFlow core engine"); + string quoted_string = "\"" + op.graph_op_name() + "\""; + writer.WriteFieldWithInitializer(nameVariable, PUBLIC|STATIC|FINAL, &name_javadoc, quoted_string ); + writer.EndLine(); + for (const ArgumentSpec& output : op.outputs()) { writer.WriteField(output.var(), PRIVATE); } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.cc index 63191c080ac..8598b1d945d 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.cc @@ -238,6 +238,22 @@ SourceWriter& SourceWriter::WriteField(const Variable& field, int modifiers, return *this; } +SourceWriter& SourceWriter::WriteFieldWithInitializer(const Variable& field, + int modifiers, const Javadoc* javadoc, const string& initializer) { + // If present, write field javadoc only as one brief line + if (javadoc != nullptr && !javadoc->brief().empty()) { + Append("/** ").Append(javadoc->brief()).Append(" */").EndLine(); + } + WriteModifiers(modifiers); + if (!initializer.empty()) + AppendType(field.type()).Append(" ").Append(field.name()). + Append(" = ").Append(initializer).Append(";"); + else + AppendType(field.type()).Append(" ").Append(field.name()).Append(";"); + EndLine(); + return *this; +} + SourceWriter& SourceWriter::WriteModifiers(int modifiers) { if (modifiers & PUBLIC) { Append("public "); diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.h b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.h index 73f487bb46c..097887083e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.h +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/source_writer.h @@ -153,6 +153,9 @@ class SourceWriter { SourceWriter& WriteField(const Variable& field, int modifiers, const Javadoc* javadoc = nullptr); + SourceWriter& WriteFieldWithInitializer(const Variable& field, + int modifiers, const Javadoc* javadoc = nullptr, const string& initializer = nullptr); + protected: virtual void DoAppend(const StringPiece& str) = 0; @@ -161,7 +164,7 @@ class SourceWriter { class TypeVisitor { public: virtual ~TypeVisitor() = default; - void Visit(const Type& type); + void Visit(const Type& type); protected: virtual void DoVisit(const Type& type) = 0; From 3d26831bab64cc4fdd2340403cafa229f0fb7099 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 09:52:13 -0400 Subject: [PATCH 05/55] Added tf.nn.softmaxCrossEntropyWitLogits() and tf.nn.raw.softmaxCrossEntropyWitLogits() Added tf.nn.sparesSoftmaxCrossEntropyWithLogits() and tf.nn.raw.sparesSoftmaxCrossEntropyWithLogits() Added tf.nn.sigmoidCrossEntropyWithLogits() --- ...pi_def_SoftmaxCrossEntropyWithLogits.pbtxt | 2 +- ..._SparseSoftmaxCrossEntropyWithLogits.pbtxt | 2 +- .../main/java/org/tensorflow/op/core/NN.java | 379 ++++++++++++++++++ 3 files changed, 381 insertions(+), 2 deletions(-) create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SoftmaxCrossEntropyWithLogits.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SoftmaxCrossEntropyWithLogits.pbtxt index e064562c0f2..5dba2164cd6 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SoftmaxCrossEntropyWithLogits.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SoftmaxCrossEntropyWithLogits.pbtxt @@ -1,6 +1,6 @@ op { graph_op_name: "SoftmaxCrossEntropyWithLogits" endpoint { - name: "nn.SoftmaxCrossEntropyWithLogits" + name: "nn.raw.SoftmaxCrossEntropyWithLogits" } } diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SparseSoftmaxCrossEntropyWithLogits.pbtxt b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SparseSoftmaxCrossEntropyWithLogits.pbtxt index 7627d5f6074..cf80ff77565 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SparseSoftmaxCrossEntropyWithLogits.pbtxt +++ b/tensorflow-core/tensorflow-core-api/src/bazel/api_def/api_def_SparseSoftmaxCrossEntropyWithLogits.pbtxt @@ -1,6 +1,6 @@ op { graph_op_name: "SparseSoftmaxCrossEntropyWithLogits" endpoint { - name: "nn.SparseSoftmaxCrossEntropyWithLogits" + name: "nn.raw.SparseSoftmaxCrossEntropyWithLogits" } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java new file mode 100644 index 00000000000..b4fa7bd01de --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java @@ -0,0 +1,379 @@ +package org.tensorflow.op.core; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Endpoint; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.op.math.*; +import org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits; +import org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits; +import org.tensorflow.types.*; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.op.dtypes.Cast; +import org.tensorflow.types.family.TType; +import org.tensorflow.op.linalg.Transpose; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +@Operator(group = "nn") +public abstract class NN { + + /** + * Computes softmax cross entropy between `logits` and `labels`. + * + *

Measures the probability error in discrete classification tasks in which the classes are + * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is + * labeled with one and only one label: an image can be a dog or a truck, but not both. + * + *

**NOTE:** While the classes are mutually exclusive, their probabilities need not be. All + * that is required is that each row of `labels` is a valid probability distribution. If they are + * not, the computation of the gradient will be incorrect. + * + *

If using exclusive `labels` (wherein one and only one class is true at a time), see + * `sparse_softmax_cross_entropy_with_logits`. + * + *

Usage: + * + *

+   *   >>> logits = [[4.0, 2.0, 1.0], [0.0, 5.0, 1.0]]
+   *   >>> labels = [[1.0, 0.0, 0.0], [0.0, 0.8, 0.2]]
+   *   >>> tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
+   *   
+   * 
+ * + *

Backpropagation will happen into both `logits` and `labels`. To disallow backpropagation + * into `labels`, pass label tensors through `tf.stop_gradient` before feeding it to this + * function. + * + * @param scope current scope + * @param labels Each vector along the class dimension should hold a valid probability + * distribution e.g. for the case in which labels are of shape `[batch_size, num_classes]`, + * each row of `labels[i]` must be a valid probability distribution. + * @param logits Per-label activations, typically a linear output. These activation energies are + * interpreted as unnormalized log probabilities. + * @param axis The class dimension. -1 is the last dimension. + * @param the data type of the logits + * @param the number type of the operands + * @return the softmax cross entropy loss. Its type is the same as `logits` and its shape is the + * same as `labels` except that it does not have the last dimension of `labels`. + */ + @Endpoint(name = "softmaxCrossEntropyWithLogits") + public static Operand softmaxCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits, int axis) { + axis = axis % logits.asOutput().shape().numDimensions(); + if (axis < 0) { + axis += logits.asOutput().shape().numDimensions(); + } + + Operand precise_logits = + logits; // cannot use generics cause logits of bool gets cast to TFloat32 + + boolean convertToFloat32 = + logits.asOutput().dataType() == TFloat16.DTYPE + || logits.asOutput().dataType() == TBfloat16.DTYPE; + if (convertToFloat32) { + precise_logits = Cast.create(scope, logits, TFloat32.DTYPE); + } + /* cannot use generics on DataType because precis_logits may have been cast. */ + DataType dtype = precise_logits.asOutput().dataType(); + labels = Cast.create(scope, labels, dtype); + Operand inputRank = + Cast.create(scope, Rank.create(scope, precise_logits), TInt64.DTYPE); + Shape shape = logits.asOutput().shape(); + + // Move the dim to the end if dim is not the last dimension. + if (axis != -1 && axis != precise_logits.asOutput().shape().numDimensions() - 1) { + precise_logits = moveDimToEnd(scope, precise_logits, axis, inputRank); + labels = moveDimToEnd(scope, labels, axis, inputRank); + } + + Shape inputShape = precise_logits.asOutput().shape(); + precise_logits = flattenOuterDims(scope, precise_logits); + labels = flattenOuterDims(scope, labels); + SoftmaxCrossEntropyWithLogits smax = + SoftmaxCrossEntropyWithLogits.create(scope, precise_logits, labels); + /* cannot use generic on cost, because cost may be recast later. */ + Operand cost = smax.loss(); + Operand outputShape = + Slice.create( + scope, + Constant.vectorOf(scope, inputShape.asArray()), + Constant.vectorOf(scope, new long[] {0}), + Constant.vectorOf(scope, new long[] {inputShape.numDimensions() - 1})); + cost = Reshape.create(scope, cost, outputShape); + if (scope.env().isGraph() && !shape.hasUnknownDimension()) { + long[] array = shape.asArray(); + long[] newArray = new long[array.length - 1]; + if (axis < 0) { + axis = shape.numDimensions() + axis; + } + for (int i = 0; i < axis; i++) { + newArray[i] = shape.size(i); + } + for (int i = axis + 1; i < shape.numDimensions(); i++) { + newArray[i - 1] = shape.size(i); + } + Shape newShape = Shape.of(newArray); + cost = Reshape.create(scope, cost, Constant.vectorOf(scope, newShape.asArray())); + } + + if (convertToFloat32) { + cost = Cast.create(scope, cost, logits.asOutput().dataType()); + } + return cost; + } + + /** + * Computes sparse softmax cross entropy between `logits` and `labels`. + * + * @param scope current scope + * @param labels `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of `labels` and + * result) and dtype `int32` or `int64`. Each entry in `labels` must be an index in `[0, + * num_classes)`. Other values will raise an exception when this op is run on CPU, and return + * `NaN` for corresponding loss and gradient rows on GPU. + * @param logits Per-label activations (typically a linear output) of shape `[d_0, d_1, ..., + * d_{r-1}, num_classes]` and dtype `float16`, `float32`, or `float64`. These activation + * energies are interpreted as unnormalized log probabilities. + * @return A `Tensor` of the same shape as `labels` and of the same type as `logits` with the + * softmax cross entropy loss. + */ + @Endpoint(name = "sparseSoftmaxCrossEntropyWithLogits") + public static Operand sparseSoftmaxCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits) { + // assert shapeIsCompatible(labels.asOutput().shape(), logits.asOutput().shape()): + // String.format("Shapes %s and %s are incompatible", + // labels.asOutput().shape(), logits.asOutput().shape()); + scope = scope.withSubScope("SparseSoftmaxCrossEntropyWithLogits"); + /** cannot use generics on precise_logits as it may be recast later */ + Operand precise_logits = logits; + boolean convertToFloat32 = + logits.asOutput().dataType() == TFloat16.DTYPE + || logits.asOutput().dataType() == TBfloat16.DTYPE; + if (convertToFloat32) { + precise_logits = Cast.create(scope, logits, TFloat32.DTYPE); + } + Shape labelsStaticShape = labels.asOutput().shape(); + org.tensorflow.op.core.Shape labelsShape = + org.tensorflow.op.core.Shape.create(scope, labels); + Shape logitsShape = logits.asOutput().shape(); + Shape logitsShortened = logitsShape.take(logitsShape.numDimensions() - 1); + + boolean staticShapesFullyDefined = + !labelsStaticShape.hasUnknownDimension() && !logitsShortened.hasUnknownDimension(); + if (logitsShape.numDimensions() == 0) { + throw new IllegalArgumentException( + String.format("Logits cannot be scalars - received shape %s.", logitsShape)); + } + if (!logitsShape.hasUnknownDimension() + && !labelsStaticShape.hasUnknownDimension() + && labelsStaticShape.numDimensions() != logitsShape.numDimensions() - 1) { + throw new IllegalArgumentException( + String.format( + "Rank mismatch: Rank of labels (received %s) should equal rank of logits minus 1 (received %s).", + labelsStaticShape.toString(), logitsShape.toString())); + } + + if (staticShapesFullyDefined && !labelsStaticShape.equals(logitsShortened)) { + throw new IllegalArgumentException( + String.format( + "Shape mismatch: The shape of labels (received %s) " + + "should equal the shape of logits except for the last " + + "dimension (received %s).", + labelsStaticShape.toString(), logitsShape.toString())); + } + // Check if no reshapes are required. + if (logitsShape.numDimensions() == 2) { + SparseSoftmaxCrossEntropyWithLogits smax = + SparseSoftmaxCrossEntropyWithLogits.create(scope, precise_logits, labels); + Operand loss = smax.loss(); + if (logits.asOutput().dataType() == TFloat16.DTYPE) { + loss = Cast.create(scope, loss, TFloat16.DTYPE); + } + return loss; + } + + List shapeChecks = new ArrayList<>(); + + if (!staticShapesFullyDefined) { + shapeChecks.add( + AssertThat.create( + scope, + Equal.create( + scope, + org.tensorflow.op.core.Shape.create(scope, labels), + Shapes.take( + scope, + org.tensorflow.op.core.Shape.create(scope, logits), + Constant.scalarOf(scope, -1))), + Collections.singletonList( + Constant.scalarOf( + scope, + "Shape mismatch: The shape of labels " + + "should equal the shape of logits except for the last " + + "dimension ")))); + } + + // Reshape logits to 2 dim, labels to 1 dim. + long numClassses = logitsShape.size(logitsShape.numDimensions() - 1); + + precise_logits = + Reshape.create( + scope, precise_logits, Constant.vectorOf(scope, new long[] {-1, numClassses})); + labels = Reshape.create(scope, labels, Constant.scalarOf(scope, -1)); + scope.withControlDependencies(shapeChecks); + SparseSoftmaxCrossEntropyWithLogits smax = + SparseSoftmaxCrossEntropyWithLogits.create(scope, precise_logits, labels); + Operand cost = smax.loss(); + cost = Reshape.create(scope, cost, labelsShape); + if (logits.asOutput().dataType() == TFloat16.DTYPE) { + cost = Cast.create(scope, cost, TFloat16.DTYPE); + } + return cost; + } + + /** + * Computes sigmoid cross entropy given `logits`. + * + *

Measures the probability error in discrete classification tasks in which each class is + * independent and not mutually exclusive. For instance, one could perform multilabel + * classification where a picture can contain both an elephant and a dog at the same time. + * + *

For brevity, let `x = logits`, `z = labels`. The logistic loss is + * + *

+   *     z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
+   *     = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
+   *     = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
+   *     = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
+   *     = (1 - z) * x + log(1 + exp(-x))
+   *     = x - x * z + log(1 + exp(-x))
+   * 
+ * + *

For x < 0, to avoid overflow in exp(-x), we reformulate the above + * + *

+   *      x - x * z + log(1 + exp(-x))
+   *      = log(exp(x)) - x * z + log(1 + exp(-x))
+   *      = - x * z + log(1 + exp(x))
+   * 
+ * + *

Hence, to ensure stability and avoid overflow, the implementation uses this equivalent + * formulation + * + *

+   *     max(x, 0) - x * z + log(1 + exp(-abs(x)))
+   * 
+ * + *

`logits` and `labels` must have the same type and shape. + * + * @param scope The TensorFlow scope + * @param labels the labels + * @param logits the logits of type float32 or float64 + * @param the type of labels and logits + * @return the component-wise logistic losses. + */ + @Endpoint(name = "sigmoidCrossEntropyWithLogits") + public static Operand sigmoidCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits) { + if (labels.asOutput().shape().numDimensions() != logits.asOutput().shape().numDimensions()) + throw new IllegalArgumentException( + String.format( + "logits and labels must have the same shape (%s vs %s)", + labels.asOutput().shape().toString(), logits.asOutput().shape())); + Operand zeros = + Cast.create(scope, ZerosLike.create(scope, logits), logits.asOutput().dataType()); + Operand cond = GreaterEqual.create(scope, logits, zeros); + + Operand relu_logits = Select.create(scope, cond, logits, zeros); + Operand neg_abs_logits = Select.create(scope, cond, Neg.create(scope, logits), logits); + return Add.create( + scope, + Sub.create(scope, relu_logits, Mul.create(scope, logits, labels)), + Log1p.create(scope, Exp.create(scope, neg_abs_logits))); + } + + /** + * Flattens logits' outer dimensions and keep its last dimension. + * + * @param scope the TensorFlow scope + * @param logits the logits + * @param the type of logits + * @return the flattened logits + */ + private static Operand flattenOuterDims(Scope scope, Operand logits) { + Operand one = Constant.scalarOf(scope, 1L); + + org.tensorflow.ndarray.Shape shape = logits.asOutput().shape(); + int ndims = shape.numDimensions(); + if (!shape.hasUnknownDimension()) { + long product = 1L; + boolean productValid = true; + for (int i = ndims - 2; i >= 0; i--) { + long d = shape.size(i); + if (d == org.tensorflow.ndarray.Shape.UNKNOWN_SIZE) { + productValid = false; + break; + } + product *= d; + } + if (productValid) { + org.tensorflow.ndarray.Shape outputShape = Shape.of(product, shape.size(ndims - 1)); + return Reshape.create(scope, logits, Constant.vectorOf(scope, outputShape.asArray())); + } + } + + Operand rank = Cast.create(scope, Rank.create(scope, logits), TInt64.DTYPE); + Operand rankMinusOne = Sub.create(scope, rank, one); + + Operand last_dim_size = + Slice.create( + scope, + org.tensorflow.op.core.Shape.create(scope, logits, TInt64.DTYPE), + rankMinusOne, + one); + Operand concat = + Concat.create( + scope, + Arrays.asList(Constant.vectorOf(scope, new long[] {-1}), last_dim_size), + Constant.scalarOf(scope, 0)); + return Reshape.create(scope, logits, concat); + } + + /** + * Move the dim to the end if dim is not the last dimension. + * + * @param scope The TensorFlow Scope + * @param input the input to reshape + * @param dim_index the index to move + * @param rank the number of Dimensions in the tensor + * @param the data type of the tensor. + * @param the data type of the rank + * @return the reshaped input + */ + private static Operand moveDimToEnd( + Scope scope, Operand input, int dim_index, Operand rank) { + DataType rankDType = rank.asOutput().dataType(); + Operand one = Cast.create(scope, Constant.scalarOf(scope, 1), rankDType); + List> concatList = + Arrays.asList( + Range.create( + scope, + Cast.create(scope, Constant.scalarOf(scope, dim_index), rankDType), + one, + one), + Range.create( + scope, + Cast.create(scope, Constant.scalarOf(scope, (dim_index + 1)), rankDType), + rank, + one)); + return Transpose.create( + scope, input, Concat.create(scope, concatList, Constant.scalarOf(scope, 0))); + } +} From 11cda5fde99a6bec21fb04ed1465934ec1889485 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 09:58:05 -0400 Subject: [PATCH 06/55] Moved SoftmaxCrossEntropyWithLogits and SparseSoftmaxCrossEntropyWithLogits to org.tensorflow.op.nn.raw --- .../nn/raw/SoftmaxCrossEntropyWithLogits.java | 86 ++++++++++++++++++ .../SparseSoftmaxCrossEntropyWithLogits.java | 90 +++++++++++++++++++ 2 files changed, 176 insertions(+) create mode 100644 tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SoftmaxCrossEntropyWithLogits.java create mode 100644 tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SparseSoftmaxCrossEntropyWithLogits.java diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SoftmaxCrossEntropyWithLogits.java new file mode 100644 index 00000000000..4c23683d9ef --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SoftmaxCrossEntropyWithLogits.java @@ -0,0 +1,86 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +// This class has been generated, DO NOT EDIT! + +package org.tensorflow.op.nn.raw; + +import org.tensorflow.Operand; +import org.tensorflow.Operation; +import org.tensorflow.OperationBuilder; +import org.tensorflow.Output; +import org.tensorflow.op.RawOp; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Endpoint; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Computes softmax cross entropy cost and gradients to backpropagate. + *

+ * Inputs are the logits, not probabilities. + * + * @param data type for {@code loss()} output + */ +@Operator(group = "nn.raw") +public final class SoftmaxCrossEntropyWithLogits extends RawOp { + + /** + * Factory method to create a class wrapping a new SoftmaxCrossEntropyWithLogits operation. + * + * @param scope current scope + * @param features batch_size x num_classes matrix + * @param labels batch_size x num_classes matrix + * The caller must ensure that each batch of labels represents a valid + * probability distribution. + * @return a new instance of SoftmaxCrossEntropyWithLogits + */ + @Endpoint(describeByClass = true) + public static SoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { + OperationBuilder opBuilder = scope.env().opBuilder("SoftmaxCrossEntropyWithLogits", scope.makeOpName("SoftmaxCrossEntropyWithLogits")); + opBuilder.addInput(features.asOutput()); + opBuilder.addInput(labels.asOutput()); + opBuilder = scope.applyControlDependencies(opBuilder); + return new SoftmaxCrossEntropyWithLogits(opBuilder.build()); + } + + /** + * Per example loss (batch_size vector). + */ + public Output loss() { + return loss; + } + + /** + * backpropagated gradients (batch_size x num_classes matrix). + */ + public Output backprop() { + return backprop; + } + + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SoftmaxCrossEntropyWithLogits"; + + private Output loss; + private Output backprop; + + private SoftmaxCrossEntropyWithLogits(Operation operation) { + super(operation); + int outputIdx = 0; + loss = operation.output(outputIdx++); + backprop = operation.output(outputIdx++); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SparseSoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SparseSoftmaxCrossEntropyWithLogits.java new file mode 100644 index 00000000000..e7cb45231de --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/raw/SparseSoftmaxCrossEntropyWithLogits.java @@ -0,0 +1,90 @@ +/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +// This class has been generated, DO NOT EDIT! + +package org.tensorflow.op.nn.raw; + +import org.tensorflow.Operand; +import org.tensorflow.Operation; +import org.tensorflow.OperationBuilder; +import org.tensorflow.Output; +import org.tensorflow.op.RawOp; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Endpoint; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Computes softmax cross entropy cost and gradients to backpropagate. + *

+ * Unlike `SoftmaxCrossEntropyWithLogits`, this operation does not accept + * a matrix of label probabilities, but rather a single label per row + * of features. This label is considered to have probability 1.0 for the + * given row. + *

+ * Inputs are the logits, not probabilities. + * + * @param data type for {@code loss()} output + */ +@Operator(group = "nn.raw") +public final class SparseSoftmaxCrossEntropyWithLogits extends RawOp { + + /** + * Factory method to create a class wrapping a new SparseSoftmaxCrossEntropyWithLogits operation. + * + * @param scope current scope + * @param features batch_size x num_classes matrix + * @param labels batch_size vector with values in [0, num_classes). + * This is the label for the given minibatch entry. + * @return a new instance of SparseSoftmaxCrossEntropyWithLogits + */ + @Endpoint(describeByClass = true) + public static SparseSoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { + OperationBuilder opBuilder = scope.env().opBuilder("SparseSoftmaxCrossEntropyWithLogits", scope.makeOpName("SparseSoftmaxCrossEntropyWithLogits")); + opBuilder.addInput(features.asOutput()); + opBuilder.addInput(labels.asOutput()); + opBuilder = scope.applyControlDependencies(opBuilder); + return new SparseSoftmaxCrossEntropyWithLogits(opBuilder.build()); + } + + /** + * Per example loss (batch_size vector). + */ + public Output loss() { + return loss; + } + + /** + * backpropagated gradients (batch_size x num_classes matrix). + */ + public Output backprop() { + return backprop; + } + + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSoftmaxCrossEntropyWithLogits"; + + private Output loss; + private Output backprop; + + private SparseSoftmaxCrossEntropyWithLogits(Operation operation) { + super(operation); + int outputIdx = 0; + loss = operation.output(outputIdx++); + backprop = operation.output(outputIdx++); + } +} From 9c7dfaa92815bf85cbf97febcbb61e1aaf707142 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 10:00:25 -0400 Subject: [PATCH 07/55] Generated classes now have public static final String OP_NAME = "XXXXXXXX"; --- .../src/gen/java/org/tensorflow/op/nn/AvgPool.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/AvgPool3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java | 3 +++ .../org/tensorflow/op/nn/BatchNormWithGlobalNormalization.java | 3 +++ .../tensorflow/op/nn/BatchNormWithGlobalNormalizationGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/BiasAdd.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/BiasAddGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/BlockLSTM.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/BlockLSTMGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/CTCLossV2.java | 3 +++ .../gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Conv2d.java | 3 +++ .../gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Conv3d.java | 3 +++ .../gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java | 3 +++ .../gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/CtcLoss.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/CudnnRNN.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/CudnnRNNBackprop.java | 3 +++ .../java/org/tensorflow/op/nn/CudnnRNNCanonicalToParams.java | 3 +++ .../java/org/tensorflow/op/nn/CudnnRNNParamsToCanonical.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java | 3 +++ .../gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/DepthToSpace.java | 3 +++ .../gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java | 3 +++ .../tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java | 3 +++ .../tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Dilation2d.java | 3 +++ .../java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java | 3 +++ .../gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Elu.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/EluGrad.java | 3 +++ .../org/tensorflow/op/nn/FixedUnigramCandidateSampler.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java | 3 +++ .../gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java | 3 +++ .../gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java | 3 +++ .../gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/GRUBlockCell.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/GRUBlockCellGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/InTopK.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/InvGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/L2Loss.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/LSTMBlockCell.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/LSTMBlockCellGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/LeakyRelu.java | 3 +++ .../org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java | 3 +++ .../java/org/tensorflow/op/nn/LocalResponseNormalization.java | 3 +++ .../org/tensorflow/op/nn/LocalResponseNormalizationGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/LogSoftmax.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPool.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPool3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java | 3 +++ .../java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java | 3 +++ .../gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/NthElement.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java | 3 +++ .../op/nn/QuantizedBatchNormWithGlobalNormalization.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java | 3 +++ .../gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRelu.java | 3 +++ .../tensorflow/op/nn/QuantizedConv2DAndReluAndRequantize.java | 3 +++ .../org/tensorflow/op/nn/QuantizedConv2DAndRequantize.java | 3 +++ .../java/org/tensorflow/op/nn/QuantizedConv2DPerChannel.java | 3 +++ .../gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBias.java | 3 +++ .../org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRelu.java | 3 +++ .../op/nn/QuantizedConv2DWithBiasAndReluAndRequantize.java | 3 +++ .../tensorflow/op/nn/QuantizedConv2DWithBiasAndRequantize.java | 3 +++ .../QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java | 3 +++ .../tensorflow/op/nn/QuantizedConv2DWithBiasSumAndRelu.java | 3 +++ .../op/nn/QuantizedConv2DWithBiasSumAndReluAndRequantize.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java | 3 +++ .../java/org/tensorflow/op/nn/QuantizedDepthwiseConv2D.java | 3 +++ .../org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBias.java | 3 +++ .../op/nn/QuantizedDepthwiseConv2DWithBiasAndRelu.java | 3 +++ .../QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java | 3 +++ .../gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Relu.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Relu6.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Relu6Grad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/ReluGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Selu.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/SeluGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Softmax.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/Softsign.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/SpaceToDepth.java | 3 +++ .../src/gen/java/org/tensorflow/op/nn/TopK.java | 3 +++ 104 files changed, 312 insertions(+) diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java index de1a858b738..527d1a49713 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool.java @@ -123,6 +123,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AvgPool"; + private Output output; private AvgPool(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java index 1700745d1ba..87467c8a982 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3d.java @@ -122,6 +122,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AvgPool3D"; + private Output output; private AvgPool3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java index 9426ff8f682..3e34c87f9b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPool3dGrad.java @@ -125,6 +125,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AvgPool3DGrad"; + private Output output; private AvgPool3dGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java index 9389f98ad3b..7ec252eaac0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/AvgPoolGrad.java @@ -123,6 +123,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AvgPoolGrad"; + private Output output; private AvgPoolGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalization.java index 23cc0b463ba..6c30a52cf2e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalization.java @@ -83,6 +83,9 @@ public Output asOutput() { return result; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchNormWithGlobalNormalization"; + private Output result; private BatchNormWithGlobalNormalization(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalizationGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalizationGrad.java index fe2813b3342..be07a5eea25 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalizationGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BatchNormWithGlobalNormalizationGrad.java @@ -106,6 +106,9 @@ public Output dg() { return dg; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchNormWithGlobalNormalizationGrad"; + private Output dx; private Output dm; private Output dv; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAdd.java index 6296f75db61..462eaa6edc7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAdd.java @@ -113,6 +113,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BiasAdd"; + private Output output; private BiasAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAddGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAddGrad.java index dcc2b537f65..df90cf9a2f3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAddGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BiasAddGrad.java @@ -112,6 +112,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BiasAddGrad"; + private Output output; private BiasAddGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTM.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTM.java index 22f0d16f540..79de4f2f88c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTM.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTM.java @@ -192,6 +192,9 @@ public Output h() { return h; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BlockLSTMV2"; + private Output i; private Output cs; private Output f; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTMGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTMGrad.java index e80bea4006d..4e49f23cb6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTMGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/BlockLSTMGrad.java @@ -146,6 +146,9 @@ public Output bGrad() { return bGrad; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BlockLSTMGradV2"; + private Output xGrad; private Output csPrevGrad; private Output hPrevGrad; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CTCLossV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CTCLossV2.java index 918230851c3..c60fef4b2a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CTCLossV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CTCLossV2.java @@ -158,6 +158,9 @@ public Output gradient() { return gradient; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CTCLossV2"; + private Output loss; private Output gradient; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java index a11bb983ae9..f6daea0df2e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ComputeAccidentalHits.java @@ -139,6 +139,9 @@ public Output weights() { return weights; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ComputeAccidentalHits"; + private Output indices; private Output ids; private Output weights; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java index 632d54c3890..79f2022d807 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2d.java @@ -222,6 +222,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conv2D"; + private Output output; private Conv2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java index 91e147def81..9c145dc3d60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropFilter.java @@ -205,6 +205,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conv2DBackpropFilter"; + private Output output; private Conv2dBackpropFilter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java index 389ddb0be4e..492c4f2aebb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv2dBackpropInput.java @@ -204,6 +204,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conv2DBackpropInput"; + private Output output; private Conv2dBackpropInput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java index 1e80fdb7f80..94ae4ffd2b5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3d.java @@ -154,6 +154,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conv3D"; + private Output output; private Conv3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java index d6d85797b3f..0d73e491717 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropFilter.java @@ -154,6 +154,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conv3DBackpropFilterV2"; + private Output output; private Conv3dBackpropFilter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java index 08e163494bf..8b153890811 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Conv3dBackpropInput.java @@ -153,6 +153,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conv3DBackpropInputV2"; + private Output output; private Conv3dBackpropInput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java index 8d212909901..96f179641e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcBeamSearchDecoder.java @@ -136,6 +136,9 @@ public Output logProbability() { return logProbability; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CTCBeamSearchDecoder"; + private List> decodedIndices; private List> decodedValues; private List> decodedShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java index eecea029a34..b8b35b8ceaa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcGreedyDecoder.java @@ -131,6 +131,9 @@ public Output logProbability() { return logProbability; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CTCGreedyDecoder"; + private Output decodedIndices; private Output decodedValues; private Output decodedShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java index b39f344373e..ceb60a4baf7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CtcLoss.java @@ -161,6 +161,9 @@ public Output gradient() { return gradient; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CTCLoss"; + private Output loss; private Output gradient; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNN.java index 9159d1c69c3..7cd9771acf1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNN.java @@ -313,6 +313,9 @@ public Output hostReserved() { return hostReserved; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CudnnRNNV3"; + private Output output; private Output outputH; private Output outputC; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNBackprop.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNBackprop.java index adeadb27292..3719c186716 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNBackprop.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNBackprop.java @@ -314,6 +314,9 @@ public Output paramsBackprop() { return paramsBackprop; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CudnnRNNBackpropV3"; + private Output inputBackprop; private Output inputHBackprop; private Output inputCBackprop; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNCanonicalToParams.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNCanonicalToParams.java index 945fdacdf62..155cfd2c0a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNCanonicalToParams.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNCanonicalToParams.java @@ -251,6 +251,9 @@ public Output asOutput() { return params; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CudnnRNNCanonicalToParamsV2"; + private Output params; private CudnnRNNCanonicalToParams(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNParamsToCanonical.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNParamsToCanonical.java index e7fbeebf99f..ea575f2d7a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNParamsToCanonical.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRNNParamsToCanonical.java @@ -255,6 +255,9 @@ public List> biases() { return biases; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CudnnRNNParamsToCanonicalV2"; + private List> weights; private List> biases; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java index 6cff6fe9836..94421d0aa6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/CudnnRnnParamsSize.java @@ -242,6 +242,9 @@ public Output asOutput() { return paramsSize; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CudnnRNNParamsSize"; + private Output paramsSize; private CudnnRnnParamsSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java index eb82df7184c..6b1ff40761b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatDimMap.java @@ -119,6 +119,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DataFormatDimMap"; + private Output y; private DataFormatDimMap(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java index 5a04c0847c7..ba218c1923f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DataFormatVecPermute.java @@ -118,6 +118,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DataFormatVecPermute"; + private Output y; private DataFormatVecPermute(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthToSpace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthToSpace.java index 523977a1db0..6456eff1f95 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthToSpace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthToSpace.java @@ -177,6 +177,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DepthToSpace"; + private Output output; private DepthToSpace(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java index 36277e498d5..8775abedbaa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNative.java @@ -164,6 +164,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DepthwiseConv2dNative"; + private Output output; private DepthwiseConv2dNative(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java index 074d37aba9b..bdbcf9f384b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropFilter.java @@ -160,6 +160,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DepthwiseConv2dNativeBackpropFilter"; + private Output output; private DepthwiseConv2dNativeBackpropFilter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java index 323890cbc1e..b5315e2ffde 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/DepthwiseConv2dNativeBackpropInput.java @@ -160,6 +160,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DepthwiseConv2dNativeBackpropInput"; + private Output output; private DepthwiseConv2dNativeBackpropInput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java index 984c4621881..c7135b20361 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2d.java @@ -106,6 +106,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Dilation2D"; + private Output output; private Dilation2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java index 1e413d9a08c..9254ff8c285 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropFilter.java @@ -84,6 +84,9 @@ public Output asOutput() { return filterBackprop; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Dilation2DBackpropFilter"; + private Output filterBackprop; private Dilation2dBackpropFilter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java index 7d247c4288b..525e06182c5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Dilation2dBackpropInput.java @@ -84,6 +84,9 @@ public Output asOutput() { return inBackprop; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Dilation2DBackpropInput"; + private Output inBackprop; private Dilation2dBackpropInput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java index f138ee46ce3..daeef97895b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Elu.java @@ -65,6 +65,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Elu"; + private Output activations; private Elu(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java index fd41f261813..664475879a0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/EluGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EluGrad"; + private Output backprops; private EluGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java index e99a41a2c56..25fd11071f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FixedUnigramCandidateSampler.java @@ -312,6 +312,9 @@ public Output sampledExpectedCount() { return sampledExpectedCount; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FixedUnigramCandidateSampler"; + private Output sampledCandidates; private Output trueExpectedCount; private Output sampledExpectedCount; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java index 189f1b9c27c..101ea21ec8c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPool.java @@ -230,6 +230,9 @@ public Output colPoolingSequence() { return colPoolingSequence; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FractionalAvgPool"; + private Output output; private Output rowPoolingSequence; private Output colPoolingSequence; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java index 26c06215c54..03ae0136311 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalAvgPoolGrad.java @@ -128,6 +128,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FractionalAvgPoolGrad"; + private Output output; private FractionalAvgPoolGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java index 015b99a14eb..a621e037740 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPool.java @@ -254,6 +254,9 @@ public Output colPoolingSequence() { return colPoolingSequence; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FractionalMaxPool"; + private Output output; private Output rowPoolingSequence; private Output colPoolingSequence; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java index cabbf2e038a..1b2bcc62dbf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FractionalMaxPoolGrad.java @@ -124,6 +124,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FractionalMaxPoolGrad"; + private Output output; private FractionalMaxPoolGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java index 464ae92f2ae..04e8d71e1e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNorm.java @@ -205,6 +205,9 @@ public Output reserveSpace3() { return reserveSpace3; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FusedBatchNormV3"; + private Output y; private Output batchMean; private Output batchVariance; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java index 52bd5e98084..4d2ecc74a4f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedBatchNormGrad.java @@ -187,6 +187,9 @@ public Output reserveSpace5() { return reserveSpace5; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FusedBatchNormGradV3"; + private Output xBackprop; private Output scaleBackprop; private Output offsetBackprop; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java index 11ec154a076..2d3de921f0b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedPadConv2d.java @@ -93,6 +93,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FusedPadConv2D"; + private Output output; private FusedPadConv2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java index 4eda6e97eaa..02f82242c7a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/FusedResizeAndPadConv2d.java @@ -131,6 +131,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FusedResizeAndPadConv2D"; + private Output output; private FusedResizeAndPadConv2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCell.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCell.java index 49c7d619410..446f43cfb0c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCell.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCell.java @@ -129,6 +129,9 @@ public Output h() { return h; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GRUBlockCell"; + private Output r; private Output u; private Output c; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCellGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCellGrad.java index bea3442c6c9..4a6b72b8e4c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCellGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/GRUBlockCellGrad.java @@ -173,6 +173,9 @@ public Output dRBarUBar() { return dRBarUBar; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GRUBlockCellGrad"; + private Output dX; private Output dHPrev; private Output dCBar; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java index 1255067ed44..d38388a3fd5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InTopK.java @@ -82,6 +82,9 @@ public Output asOutput() { return precision; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InTopKV2"; + private Output precision; private InTopK(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InvGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InvGrad.java index b0df0c43ee0..161d8771b83 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InvGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/InvGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InvGrad"; + private Output z; private InvGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java index 91d141c787c..b38d9e99d96 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/L2Loss.java @@ -67,6 +67,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "L2Loss"; + private Output output; private L2Loss(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCell.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCell.java index a10d335bc0b..ab5d1b8aee2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCell.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCell.java @@ -210,6 +210,9 @@ public Output h() { return h; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LSTMBlockCell"; + private Output i; private Output cs; private Output f; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCellGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCellGrad.java index bfb5dae0118..3635ec433d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCellGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LSTMBlockCellGrad.java @@ -119,6 +119,9 @@ public Output wcoGrad() { return wcoGrad; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LSTMBlockCellGrad"; + private Output csPrevGrad; private Output dicfo; private Output wciGrad; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java index 54579426b78..230b4238047 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LeakyRelu.java @@ -95,6 +95,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LeakyRelu"; + private Output activations; private LeakyRelu(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java index 017ee428cde..3f850ce672c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LearnedUnigramCandidateSampler.java @@ -154,6 +154,9 @@ public Output sampledExpectedCount() { return sampledExpectedCount; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LearnedUnigramCandidateSampler"; + private Output sampledCandidates; private Output trueExpectedCount; private Output sampledExpectedCount; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java index 0004fed685b..a560c9cfb58 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalization.java @@ -165,6 +165,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LRN"; + private Output output; private LocalResponseNormalization(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java index 24d769e571a..08f10c12f26 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LocalResponseNormalizationGrad.java @@ -157,6 +157,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LRNGrad"; + private Output output; private LocalResponseNormalizationGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java index 58035248560..bd1bff467a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/LogSoftmax.java @@ -67,6 +67,9 @@ public Output asOutput() { return logsoftmax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LogSoftmax"; + private Output logsoftmax; private LogSoftmax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java index 4df68034706..f7b75951e31 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool.java @@ -112,6 +112,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPoolV2"; + private Output output; private MaxPool(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java index c38fd7b341e..61bf43372cc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3d.java @@ -122,6 +122,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPool3D"; + private Output output; private MaxPool3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java index 8361c38b80a..7e11914cca2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGrad.java @@ -125,6 +125,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPool3DGrad"; + private Output output; private MaxPool3dGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java index 93407692efa..4243e1e5143 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPool3dGradGrad.java @@ -126,6 +126,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPool3DGradGrad"; + private Output output; private MaxPool3dGradGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java index 7db3693e736..6f5cbd2ce64 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGrad.java @@ -117,6 +117,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPoolGradV2"; + private Output output; private MaxPoolGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java index 9fee7af4c0e..4f9255e9286 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGrad.java @@ -117,6 +117,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPoolGradGradV2"; + private Output output; private MaxPoolGradGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java index 232f2ec18a8..6258024daa9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradGradWithArgmax.java @@ -118,6 +118,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPoolGradGradWithArgmax"; + private Output output; private MaxPoolGradGradWithArgmax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java index 8d1aa1da798..329c88b4d33 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolGradWithArgmax.java @@ -117,6 +117,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPoolGradWithArgmax"; + private Output output; private MaxPoolGradWithArgmax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java index 4eeb66cbc68..63f92de1fea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/MaxPoolWithArgmax.java @@ -147,6 +147,9 @@ public Output argmax() { return argmax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxPoolWithArgmax"; + private Output output; private Output argmax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java index cf379fa5ecf..340cd4b98f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/NthElement.java @@ -111,6 +111,9 @@ public Output asOutput() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NthElement"; + private Output values; private NthElement(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java index 9ac24133f7c..0da9f10b1ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedAvgPool.java @@ -92,6 +92,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedAvgPool"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java index dd5b716b401..41cc16017fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBatchNormWithGlobalNormalization.java @@ -115,6 +115,9 @@ public Output resultMax() { return resultMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedBatchNormWithGlobalNormalization"; + private Output result; private Output resultMin; private Output resultMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java index 818c4455ac5..62a8002ad49 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedBiasAdd.java @@ -86,6 +86,9 @@ public Output maxOut() { return maxOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedBiasAdd"; + private Output output; private Output minOut; private Output maxOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRelu.java index f1258c3ac71..961a4245155 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRelu.java @@ -149,6 +149,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DAndRelu"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndReluAndRequantize.java index 9a763e629d9..8b231edc09b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndReluAndRequantize.java @@ -153,6 +153,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DAndReluAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRequantize.java index ac1ca66f079..8c9f1247d97 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DAndRequantize.java @@ -153,6 +153,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DPerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DPerChannel.java index da2dfa6e491..efc0132e2a8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DPerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DPerChannel.java @@ -131,6 +131,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DPerChannel"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBias.java index da843bf735a..bc78b5b4ec1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBias.java @@ -151,6 +151,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBias"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRelu.java index 6176626745d..719150ee139 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRelu.java @@ -151,6 +151,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBiasAndRelu"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndReluAndRequantize.java index d6700e175a5..a61cab41d5e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndReluAndRequantize.java @@ -155,6 +155,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBiasAndReluAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRequantize.java index 7f8d24095e4..af89fd48962 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasAndRequantize.java @@ -155,6 +155,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBiasAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java index cc3d6cc73dc..cfa7770cf25 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSignedSumAndReluAndRequantize.java @@ -161,6 +161,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBiasSignedSumAndReluAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndRelu.java index 69759e0bc8a..1096fa12578 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndRelu.java @@ -153,6 +153,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBiasSumAndRelu"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndReluAndRequantize.java index e6d03b99188..55adb0e016d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2DWithBiasSumAndReluAndRequantize.java @@ -161,6 +161,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2DWithBiasSumAndReluAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java index c791a624c51..39913922bdb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedConv2d.java @@ -145,6 +145,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConv2D"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2D.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2D.java index 2145de9c8eb..f64d9a7efbb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2D.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2D.java @@ -131,6 +131,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedDepthwiseConv2D"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBias.java index 5aa0d466d0e..be5e2bb8657 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBias.java @@ -133,6 +133,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedDepthwiseConv2DWithBias"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndRelu.java index 46e628f2c29..8abd12b865f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndRelu.java @@ -156,6 +156,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedDepthwiseConv2DWithBiasAndRelu"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java index 3a13eaaa567..78c8048266e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize.java @@ -160,6 +160,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedDepthwiseConv2DWithBiasAndReluAndRequantize"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java index ba393889984..839338a1458 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedInstanceNorm.java @@ -190,6 +190,9 @@ public Output yMax() { return yMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedInstanceNorm"; + private Output y; private Output yMin; private Output yMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java index 94c00253cc5..2cec96e411c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedMaxPool.java @@ -92,6 +92,9 @@ public Output maxOutput() { return maxOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMaxPool"; + private Output output; private Output minOutput; private Output maxOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java index 9c9407e0b9a..308e14e9512 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu.java @@ -79,6 +79,9 @@ public Output maxActivations() { return maxActivations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedRelu"; + private Output activations; private Output minActivations; private Output maxActivations; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java index 150ec50779e..46f04fd5722 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedRelu6.java @@ -79,6 +79,9 @@ public Output maxActivations() { return maxActivations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedRelu6"; + private Output activations; private Output minActivations; private Output maxActivations; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java index 2d446c3a45d..e47a6a5c043 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/QuantizedReluX.java @@ -81,6 +81,9 @@ public Output maxActivations() { return maxActivations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedReluX"; + private Output activations; private Output minActivations; private Output maxActivations; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu.java index 2facaa697ec..c6a515d4c75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu.java @@ -66,6 +66,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Relu"; + private Output activations; private Relu(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java index f32eb410f00..e4e674b7e35 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6.java @@ -62,6 +62,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Relu6"; + private Output activations; private Relu6(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java index 7cd8e3197e6..cf4edc9debf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Relu6Grad.java @@ -66,6 +66,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Relu6Grad"; + private Output backprops; private Relu6Grad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java index c467c606b69..d1c7cf7d44c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/ReluGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReluGrad"; + private Output backprops; private ReluGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java index dae469aa5a3..2ce8484b299 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Selu.java @@ -70,6 +70,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Selu"; + private Output activations; private Selu(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java index 91389503235..514ad00b38d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SeluGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SeluGrad"; + private Output backprops; private SeluGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java index c1744627645..d9971b6667d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softmax.java @@ -67,6 +67,9 @@ public Output asOutput() { return softmax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Softmax"; + private Output softmax; private Softmax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java index e117be94537..e4276c679a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/Softsign.java @@ -62,6 +62,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Softsign"; + private Output activations; private Softsign(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java index 2c4fd467661..220763e57a2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftsignGrad.java @@ -64,6 +64,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SoftsignGrad"; + private Output backprops; private SoftsignGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java index b8ab8d48658..9b1796c99aa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToBatch.java @@ -142,6 +142,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SpaceToBatch"; + private Output output; private SpaceToBatch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToDepth.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToDepth.java index 100ac91e7da..0e9068c9b31 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToDepth.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SpaceToDepth.java @@ -171,6 +171,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SpaceToDepth"; + private Output output; private SpaceToDepth(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java index 28a810ebc54..acd4ba679f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/TopK.java @@ -116,6 +116,9 @@ public Output indices() { return indices; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TopKV2"; + private Output values; private Output indices; From 84f49db3fb6c085befabfcb8356ab77589facf5d Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 10:03:38 -0400 Subject: [PATCH 08/55] Generated classes now have public static final String OP_NAME = "XXXXXXXX"; --- .../src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java | 3 +++ .../src/gen/java/org/tensorflow/op/audio/DecodeWav.java | 3 +++ .../src/gen/java/org/tensorflow/op/audio/EncodeWav.java | 3 +++ .../src/gen/java/org/tensorflow/op/audio/Mfcc.java | 3 +++ .../src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java | 3 +++ .../src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java | 3 +++ .../src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java | 3 +++ .../src/gen/java/org/tensorflow/op/bitwise/Invert.java | 3 +++ .../src/gen/java/org/tensorflow/op/bitwise/LeftShift.java | 3 +++ .../src/gen/java/org/tensorflow/op/bitwise/RightShift.java | 3 +++ .../org/tensorflow/op/cluster/KMC2ChainInitialization.java | 3 +++ .../tensorflow/op/cluster/KmeansPlusPlusInitialization.java | 3 +++ .../src/gen/java/org/tensorflow/op/collective/AllReduce.java | 3 +++ .../gen/java/org/tensorflow/op/collective/BroadcastRecv.java | 3 +++ .../gen/java/org/tensorflow/op/collective/BroadcastSend.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Abort.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/All.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Any.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/AssertThat.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Assign.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/AssignAdd.java | 3 +++ .../gen/java/org/tensorflow/op/core/AssignAddVariableOp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/AssignSub.java | 3 +++ .../gen/java/org/tensorflow/op/core/AssignSubVariableOp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/AssignVariableOp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Barrier.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BarrierClose.java | 3 +++ .../gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BarrierReadySize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Batch.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BatchToSpace.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Bitcast.java | 3 +++ .../gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java | 3 +++ .../gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/BroadcastTo.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Bucketize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ClipByValue.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/CollectiveGather.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Concat.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ConsumeMutexLock.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ControlTrigger.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Copy.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/CopyHost.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/CountUpTo.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/DecodeProto.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/DeepCopy.java | 3 +++ .../gen/java/org/tensorflow/op/core/DeleteSessionTensor.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java | 3 +++ .../java/org/tensorflow/op/core/DestroyTemporaryVariable.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/DummyMemoryCache.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/DynamicPartition.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/DynamicStitch.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/EditDistance.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Empty.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/EmptyTensorList.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/EncodeProto.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/EnsureShape.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Enter.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Exit.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ExpandDims.java | 3 +++ .../gen/java/org/tensorflow/op/core/ExtractVolumePatches.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Fill.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Fingerprint.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Gather.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/GatherNd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/GetSessionHandle.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/GetSessionTensor.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/GuaranteeConst.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/HashTable.java | 3 +++ .../gen/java/org/tensorflow/op/core/HistogramFixedWidth.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Identity.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/IdentityN.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ImmutableConst.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/InitializeTable.java | 3 +++ .../org/tensorflow/op/core/InitializeTableFromTextFile.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/InplaceAdd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/InplaceSub.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/InplaceUpdate.java | 3 +++ .../gen/java/org/tensorflow/op/core/IsVariableInitialized.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LinSpace.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LookupTableExport.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LookupTableFind.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LookupTableImport.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LookupTableInsert.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LookupTableRemove.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LookupTableSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LoopCond.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/LowerBound.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapClear.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapPeek.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapStage.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapUnstage.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Max.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Merge.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Min.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MirrorPad.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MlirPassthroughOp.java | 3 +++ .../gen/java/org/tensorflow/op/core/MutableDenseHashTable.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MutableHashTable.java | 3 +++ .../java/org/tensorflow/op/core/MutableHashTableOfTensors.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Mutex.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/MutexLock.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/NcclAllReduce.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/NcclBroadcast.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/NcclReduce.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/NextIteration.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/NoOp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OneHot.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OnesLike.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OrderedMapClear.java | 3 +++ .../java/org/tensorflow/op/core/OrderedMapIncompleteSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OrderedMapSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OrderedMapStage.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/OrderedMapUnstage.java | 3 +++ .../java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Pad.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ParallelConcat.java | 3 +++ .../gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Placeholder.java | 3 +++ .../java/org/tensorflow/op/core/PlaceholderWithDefault.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Print.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Prod.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/QuantizedReshape.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Range.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Rank.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReadVariableOp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Recv.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReduceAll.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReduceAny.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReduceMax.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReduceMin.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReduceProd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReduceSum.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefEnter.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefExit.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefIdentity.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefMerge.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefNextIteration.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefSelect.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/RefSwitch.java | 3 +++ .../java/org/tensorflow/op/core/RemoteFusedGraphExecute.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Reshape.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ResourceGather.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterAdd.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterDiv.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterMax.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterMin.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterMul.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java | 3 +++ .../java/org/tensorflow/op/core/ResourceScatterNdUpdate.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterSub.java | 3 +++ .../gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java | 3 +++ .../org/tensorflow/op/core/ResourceStridedSliceAssign.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Reverse.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ReverseSequence.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Roll.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Rpc.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterAdd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterDiv.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterMax.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterMin.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterMul.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterNd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java | 3 +++ .../java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterNdSub.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterSub.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ScatterUpdate.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Select.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Send.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/SetDiff1d.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/SetSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Shape.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ShapeN.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Size.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Skipgram.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Slice.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Snapshot.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Split.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/SplitV.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Squeeze.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Stack.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Stage.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/StageClear.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/StagePeek.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/StageSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/StopGradient.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/StridedSlice.java | 3 +++ .../gen/java/org/tensorflow/op/core/StridedSliceAssign.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Sum.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/SwitchCond.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TemporaryVariable.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArray.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayClose.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayGather.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java | 3 +++ .../java/org/tensorflow/op/core/TensorArrayGradWithShape.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayPack.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayRead.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorArrayScatter.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArraySize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArraySplit.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java | 3 +++ .../org/tensorflow/op/core/TensorForestCreateTreeVariable.java | 3 +++ .../org/tensorflow/op/core/TensorForestTreeDeserialize.java | 3 +++ .../tensorflow/op/core/TensorForestTreeIsInitializedOp.java | 3 +++ .../java/org/tensorflow/op/core/TensorForestTreePredict.java | 3 +++ .../tensorflow/op/core/TensorForestTreeResourceHandleOp.java | 3 +++ .../java/org/tensorflow/op/core/TensorForestTreeSerialize.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorForestTreeSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListConcat.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorListConcatLists.java | 3 +++ .../java/org/tensorflow/op/core/TensorListElementShape.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorListFromTensor.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListGather.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListGetItem.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListLength.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListPopBack.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorListPushBack.java | 3 +++ .../java/org/tensorflow/op/core/TensorListPushBackBatch.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListReserve.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListResize.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListScatter.java | 3 +++ .../tensorflow/op/core/TensorListScatterIntoExistingList.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListSetItem.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListSplit.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TensorListStack.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorScatterNdAdd.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorScatterNdSub.java | 3 +++ .../gen/java/org/tensorflow/op/core/TensorScatterNdUpdate.java | 3 +++ .../java/org/tensorflow/op/core/TensorStridedSliceUpdate.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Tile.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Timestamp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/TryRpc.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Unbatch.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/UnbatchGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Unique.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/UnravelIndex.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Unstack.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Unstage.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/UpperBound.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/VarHandleOp.java | 3 +++ .../gen/java/org/tensorflow/op/core/VarIsInitializedOp.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Variable.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/VariableShape.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Where.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/ZerosLike.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/AnonymousIterator.java | 3 +++ .../gen/java/org/tensorflow/op/data/AnonymousMemoryCache.java | 3 +++ .../org/tensorflow/op/data/AnonymousMultiDeviceIterator.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/AssertNextDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/AutoShardDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/BatchDataset.java | 3 +++ .../java/org/tensorflow/op/data/BytesProducedStatsDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/CSVDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/CacheDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/CacheDatasetV2.java | 3 +++ .../gen/java/org/tensorflow/op/data/ChooseFastestDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/ConcatenateDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/DatasetCardinality.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/DatasetFromGraph.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/DatasetToGraph.java | 3 +++ .../java/org/tensorflow/op/data/DatasetToSingleElement.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/DeleteIterator.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java | 3 +++ .../java/org/tensorflow/op/data/DeleteMultiDeviceIterator.java | 3 +++ .../java/org/tensorflow/op/data/DenseToSparseBatchDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/DeserializeIterator.java | 3 +++ .../java/org/tensorflow/op/data/DirectedInterleaveDataset.java | 3 +++ .../org/tensorflow/op/data/FilterByLastComponentDataset.java | 3 +++ .../java/org/tensorflow/op/data/FixedLengthRecordDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/IgnoreErrorsDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/Iterator.java | 3 +++ .../java/org/tensorflow/op/data/IteratorFromStringHandle.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/IteratorGetDevice.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/IteratorGetNext.java | 3 +++ .../java/org/tensorflow/op/data/IteratorGetNextAsOptional.java | 3 +++ .../gen/java/org/tensorflow/op/data/IteratorGetNextSync.java | 3 +++ .../java/org/tensorflow/op/data/IteratorToStringHandle.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/LMDBDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/LatencyStatsDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/MakeIterator.java | 3 +++ .../gen/java/org/tensorflow/op/data/MatchingFilesDataset.java | 3 +++ .../org/tensorflow/op/data/MaxIntraOpParallelismDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/ModelDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/MultiDeviceIterator.java | 3 +++ .../op/data/MultiDeviceIteratorFromStringHandle.java | 3 +++ .../op/data/MultiDeviceIteratorGetNextFromShard.java | 3 +++ .../java/org/tensorflow/op/data/MultiDeviceIteratorInit.java | 3 +++ .../tensorflow/op/data/MultiDeviceIteratorToStringHandle.java | 3 +++ .../java/org/tensorflow/op/data/NonSerializableDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/OptimizeDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/OptionalFromValue.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/OptionalGetValue.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/OptionalHasValue.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/OptionalNone.java | 3 +++ .../gen/java/org/tensorflow/op/data/PaddedBatchDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/PrefetchDataset.java | 3 +++ .../java/org/tensorflow/op/data/PrivateThreadPoolDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/RandomDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/RangeDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/RebatchDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/RepeatDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/SamplingDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/SerializeIterator.java | 3 +++ .../java/org/tensorflow/op/data/SetStatsAggregatorDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/ShardDataset.java | 3 +++ .../java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/ShuffleDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/SkipDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/SleepDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/SlidingWindowDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/SnapshotDataset.java | 3 +++ .../java/org/tensorflow/op/data/SparseTensorSliceDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/SqlDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/StatsAggregatorHandle.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/TakeDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/TensorDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/TensorSliceDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/TextLineDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/TfRecordDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/ThreadPoolDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/ThreadPoolHandle.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/UnbatchDataset.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/UniqueDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/UnwrapDatasetVariant.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/WindowDataset.java | 3 +++ .../gen/java/org/tensorflow/op/data/WrapDatasetVariant.java | 3 +++ .../src/gen/java/org/tensorflow/op/data/ZipDataset.java | 3 +++ .../op/data/experimental/AssertCardinalityDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/AssertNextDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/AutoShardDataset.java | 3 +++ .../op/data/experimental/BytesProducedStatsDataset.java | 3 +++ .../java/org/tensorflow/op/data/experimental/CSVDataset.java | 3 +++ .../tensorflow/op/data/experimental/ChooseFastestDataset.java | 3 +++ .../tensorflow/op/data/experimental/DatasetCardinality.java | 3 +++ .../org/tensorflow/op/data/experimental/DatasetToTFRecord.java | 3 +++ .../op/data/experimental/DenseToSparseBatchDataset.java | 3 +++ .../op/data/experimental/DirectedInterleaveDataset.java | 3 +++ .../tensorflow/op/data/experimental/IgnoreErrorsDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/IteratorGetDevice.java | 3 +++ .../tensorflow/op/data/experimental/LatencyStatsDataset.java | 3 +++ .../java/org/tensorflow/op/data/experimental/LmdbDataset.java | 3 +++ .../tensorflow/op/data/experimental/MatchingFilesDataset.java | 3 +++ .../op/data/experimental/MaxIntraOpParallelismDataset.java | 3 +++ .../op/data/experimental/NonSerializableDataset.java | 3 +++ .../tensorflow/op/data/experimental/ParseExampleDataset.java | 3 +++ .../op/data/experimental/PrivateThreadPoolDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/RandomDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/RebatchDataset.java | 3 +++ .../op/data/experimental/SetStatsAggregatorDataset.java | 3 +++ .../java/org/tensorflow/op/data/experimental/SleepDataset.java | 3 +++ .../tensorflow/op/data/experimental/SlidingWindowDataset.java | 3 +++ .../java/org/tensorflow/op/data/experimental/SqlDataset.java | 3 +++ .../tensorflow/op/data/experimental/StatsAggregatorHandle.java | 3 +++ .../op/data/experimental/StatsAggregatorSetSummaryWriter.java | 3 +++ .../op/data/experimental/StatsAggregatorSummary.java | 3 +++ .../org/tensorflow/op/data/experimental/ThreadPoolDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/ThreadPoolHandle.java | 3 +++ .../org/tensorflow/op/data/experimental/UnbatchDataset.java | 3 +++ .../org/tensorflow/op/data/experimental/UniqueDataset.java | 3 +++ .../gen/java/org/tensorflow/op/debugging/CheckNumerics.java | 3 +++ .../org/tensorflow/op/debugging/DebugGradientIdentity.java | 3 +++ .../org/tensorflow/op/debugging/DebugGradientRefIdentity.java | 3 +++ .../gen/java/org/tensorflow/op/debugging/DebugIdentity.java | 3 +++ .../gen/java/org/tensorflow/op/debugging/DebugNanCount.java | 3 +++ .../java/org/tensorflow/op/debugging/DebugNumericsSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/dtypes/AsString.java | 3 +++ .../src/gen/java/org/tensorflow/op/dtypes/Cast.java | 3 +++ .../src/gen/java/org/tensorflow/op/dtypes/Complex.java | 3 +++ .../src/gen/java/org/tensorflow/op/dtypes/ToBool.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesAggregateStats.java | 3 +++ .../org/tensorflow/op/estimator/BoostedTreesBucketize.java | 3 +++ .../op/estimator/BoostedTreesCalculateBestFeatureSplit.java | 3 +++ .../op/estimator/BoostedTreesCalculateBestFeatureSplitV2.java | 3 +++ .../op/estimator/BoostedTreesCalculateBestGainsPerFeature.java | 3 +++ .../org/tensorflow/op/estimator/BoostedTreesCenterBias.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesCreateEnsemble.java | 3 +++ .../op/estimator/BoostedTreesCreateQuantileStreamResource.java | 3 +++ .../op/estimator/BoostedTreesDeserializeEnsemble.java | 3 +++ .../op/estimator/BoostedTreesEnsembleResourceHandleOp.java | 3 +++ .../op/estimator/BoostedTreesExampleDebugOutputs.java | 3 +++ .../op/estimator/BoostedTreesFlushQuantileSummaries.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesGetEnsembleStates.java | 3 +++ .../op/estimator/BoostedTreesMakeQuantileSummaries.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesMakeStatsSummary.java | 3 +++ .../java/org/tensorflow/op/estimator/BoostedTreesPredict.java | 3 +++ .../BoostedTreesQuantileStreamResourceAddSummaries.java | 3 +++ .../BoostedTreesQuantileStreamResourceDeserialize.java | 3 +++ .../op/estimator/BoostedTreesQuantileStreamResourceFlush.java | 3 +++ .../BoostedTreesQuantileStreamResourceGetBucketBoundaries.java | 3 +++ .../estimator/BoostedTreesQuantileStreamResourceHandleOp.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesSerializeEnsemble.java | 3 +++ .../op/estimator/BoostedTreesSparseAggregateStats.java | 3 +++ .../estimator/BoostedTreesSparseCalculateBestFeatureSplit.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesTrainingPredict.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java | 3 +++ .../tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java | 3 +++ .../op/estimator/IsBoostedTreesEnsembleInitialized.java | 3 +++ .../IsBoostedTreesQuantileStreamResourceInitialized.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/AdjustContrast.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/AdjustHue.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/AdjustSaturation.java | 3 +++ .../org/tensorflow/op/image/CombinedNonMaxSuppression.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/CropAndResize.java | 3 +++ .../java/org/tensorflow/op/image/CropAndResizeGradBoxes.java | 3 +++ .../java/org/tensorflow/op/image/CropAndResizeGradImage.java | 3 +++ .../gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/DecodeBmp.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/DecodeGif.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/DecodeJpeg.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/DecodePng.java | 3 +++ .../gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/EncodeJpeg.java | 3 +++ .../org/tensorflow/op/image/EncodeJpegVariableQuality.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/EncodePng.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java | 3 +++ .../gen/java/org/tensorflow/op/image/ExtractImagePatches.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java | 3 +++ .../org/tensorflow/op/image/GenerateBoundingBoxProposals.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/HsvToRgb.java | 3 +++ .../org/tensorflow/op/image/ImageProjectiveTransformV2.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/NearestNeighbors.java | 3 +++ .../gen/java/org/tensorflow/op/image/NonMaxSuppression.java | 3 +++ .../org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java | 3 +++ .../java/org/tensorflow/op/image/QuantizedResizeBilinear.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/RandomCrop.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/ResizeArea.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/ResizeBicubic.java | 3 +++ .../gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/ResizeBilinear.java | 3 +++ .../gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java | 3 +++ .../java/org/tensorflow/op/image/ResizeNearestNeighbor.java | 3 +++ .../org/tensorflow/op/image/ResizeNearestNeighborGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/image/RgbToHsv.java | 3 +++ .../org/tensorflow/op/image/SampleDistortedBoundingBox.java | 3 +++ .../gen/java/org/tensorflow/op/image/ScaleAndTranslate.java | 3 +++ .../java/org/tensorflow/op/image/ScaleAndTranslateGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/DecodeBase64.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/DecodeCompressed.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/DecodeCsv.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/DecodePaddedRaw.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/DecodeRaw.java | 3 +++ .../gen/java/org/tensorflow/op/io/DeserializeManySparse.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/EncodeBase64.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/FifoQueue.java | 3 +++ .../gen/java/org/tensorflow/op/io/FixedLengthRecordReader.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/IdentityReader.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/LmdbReader.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/MatchingFiles.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ParseExample.java | 3 +++ .../gen/java/org/tensorflow/op/io/ParseSequenceExample.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ParseSingleExample.java | 3 +++ .../java/org/tensorflow/op/io/ParseSingleSequenceExample.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ParseTensor.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/PriorityQueue.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueClose.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueDequeue.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueEnqueue.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueIsClosed.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/QueueSize.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ReadFile.java | 3 +++ .../java/org/tensorflow/op/io/ReaderNumRecordsProduced.java | 3 +++ .../java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ReaderRead.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ReaderReset.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java | 3 +++ .../gen/java/org/tensorflow/op/io/ReaderSerializeState.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/SerializeManySparse.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/SerializeSparse.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/SerializeTensor.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ShardedFilename.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/ShardedFilespec.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/TextLineReader.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/TfRecordReader.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/WholeFileReader.java | 3 +++ .../src/gen/java/org/tensorflow/op/io/WriteFile.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/BandPart.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java | 3 +++ .../java/org/tensorflow/op/linalg/BatchMatrixDeterminant.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiag.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchMatrixDiagPart.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchMatrixSetDiag.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java | 3 +++ .../org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/BatchSvd.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Cholesky.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Cross.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Det.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Eig.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Einsum.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/EuclideanNorm.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Inv.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java | 3 +++ .../java/org/tensorflow/op/linalg/LogMatrixDeterminant.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Lu.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatMul.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatrixDiag.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatrixDiagPart.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/MatrixDiagPartV3.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatrixDiagV3.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatrixLogarithm.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatrixSetDiag.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Qr.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java | 3 +++ .../java/org/tensorflow/op/linalg/QuantizedMatMulWithBias.java | 3 +++ .../tensorflow/op/linalg/QuantizedMatMulWithBiasAndRelu.java | 3 +++ .../op/linalg/QuantizedMatMulWithBiasAndReluAndRequantize.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/SelfAdjointEig.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Solve.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Sqrtm.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Svd.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/TensorDiag.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/TensorDiagPart.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/Transpose.java | 3 +++ .../src/gen/java/org/tensorflow/op/linalg/TriangularSolve.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/TridiagonalMatMul.java | 3 +++ .../gen/java/org/tensorflow/op/linalg/TridiagonalSolve.java | 3 +++ .../tensorflow/op/linalg/sparse/CSRSparseMatrixComponents.java | 3 +++ .../tensorflow/op/linalg/sparse/CSRSparseMatrixToDense.java | 3 +++ .../op/linalg/sparse/CSRSparseMatrixToSparseTensor.java | 3 +++ .../tensorflow/op/linalg/sparse/DenseToCSRSparseMatrix.java | 3 +++ .../java/org/tensorflow/op/linalg/sparse/SparseMatrixAdd.java | 3 +++ .../org/tensorflow/op/linalg/sparse/SparseMatrixMatMul.java | 3 +++ .../java/org/tensorflow/op/linalg/sparse/SparseMatrixMul.java | 3 +++ .../java/org/tensorflow/op/linalg/sparse/SparseMatrixNNZ.java | 3 +++ .../tensorflow/op/linalg/sparse/SparseMatrixOrderingAMD.java | 3 +++ .../org/tensorflow/op/linalg/sparse/SparseMatrixSoftmax.java | 3 +++ .../tensorflow/op/linalg/sparse/SparseMatrixSoftmaxGrad.java | 3 +++ .../op/linalg/sparse/SparseMatrixSparseCholesky.java | 3 +++ .../tensorflow/op/linalg/sparse/SparseMatrixSparseMatMul.java | 3 +++ .../org/tensorflow/op/linalg/sparse/SparseMatrixTranspose.java | 3 +++ .../org/tensorflow/op/linalg/sparse/SparseMatrixZeros.java | 3 +++ .../op/linalg/sparse/SparseTensorToCSRSparseMatrix.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Abs.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/AccumulateN.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Acos.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Acosh.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Add.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/AddN.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Angle.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/ApproximateEqual.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/ArgMax.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/ArgMin.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Asin.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Asinh.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Atan.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Atan2.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Atanh.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/BesselI0e.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/BesselI1e.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Betainc.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Bincount.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Ceil.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/ComplexAbs.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Conj.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Cos.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Cosh.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Cumprod.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Cumsum.java | 3 +++ .../gen/java/org/tensorflow/op/math/CumulativeLogsumexp.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Digamma.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Div.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/DivNoNan.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Equal.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Erf.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Erfc.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Exp.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Expm1.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Fact.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Floor.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/FloorDiv.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/FloorMod.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Greater.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/GreaterEqual.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Igamma.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/IgammaGradA.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Igammac.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Imag.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/InvertPermutation.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/IsFinite.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/IsInf.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/IsNan.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Less.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/LessEqual.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Lgamma.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Log.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Log1p.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/LogicalAnd.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/LogicalNot.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/LogicalOr.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Maximum.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Mean.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Minimum.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Mod.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Mul.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/MulNoNan.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Ndtri.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Neg.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/NextAfter.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/NotEqual.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Polygamma.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/PopulationCount.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Pow.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/QuantizedAdd.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/QuantizedMul.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Real.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/RealDiv.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Reciprocal.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/ReciprocalGrad.java | 3 +++ .../org/tensorflow/op/math/RequantizationRangePerChannel.java | 3 +++ .../gen/java/org/tensorflow/op/math/RequantizePerChannel.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Rint.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Round.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Rsqrt.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/RsqrtGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SegmentMax.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SegmentMean.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SegmentMin.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SegmentProd.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SegmentSum.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Sigmoid.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SigmoidGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Sign.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Sin.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Sinh.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SobolSample.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Softplus.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SoftplusGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Sqrt.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SqrtGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Square.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/SquaredDifference.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Sub.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Tan.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Tanh.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/TanhGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/TruncateDiv.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/TruncateMod.java | 3 +++ .../gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java | 3 +++ .../gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java | 3 +++ .../gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java | 3 +++ .../gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Xdivy.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Xlog1py.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Xlogy.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/Zeta.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/erfinv.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/special/Dawsn.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/special/Expint.java | 3 +++ .../gen/java/org/tensorflow/op/math/special/FresnelCos.java | 3 +++ .../gen/java/org/tensorflow/op/math/special/FresnelSin.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/special/Spence.java | 3 +++ .../gen/java/org/tensorflow/op/quantization/Dequantize.java | 3 +++ .../tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java | 3 +++ .../op/quantization/FakeQuantWithMinMaxArgsGradient.java | 3 +++ .../tensorflow/op/quantization/FakeQuantWithMinMaxVars.java | 3 +++ .../op/quantization/FakeQuantWithMinMaxVarsGradient.java | 3 +++ .../op/quantization/FakeQuantWithMinMaxVarsPerChannel.java | 3 +++ .../FakeQuantWithMinMaxVarsPerChannelGradient.java | 3 +++ .../src/gen/java/org/tensorflow/op/quantization/Quantize.java | 3 +++ .../org/tensorflow/op/quantization/QuantizeAndDequantize.java | 3 +++ .../tensorflow/op/quantization/QuantizeDownAndShrinkRange.java | 3 +++ .../java/org/tensorflow/op/quantization/QuantizedConcat.java | 3 +++ .../op/quantization/QuantizedMatMulWithBiasAndDequantize.java | 3 +++ .../op/quantization/QuantizedMatMulWithBiasAndRequantize.java | 3 +++ .../org/tensorflow/op/quantization/RequantizationRange.java | 3 +++ .../gen/java/org/tensorflow/op/quantization/Requantize.java | 3 +++ .../src/gen/java/org/tensorflow/op/ragged/RaggedGather.java | 3 +++ .../src/gen/java/org/tensorflow/op/ragged/RaggedRange.java | 3 +++ .../java/org/tensorflow/op/ragged/RaggedTensorFromVariant.java | 3 +++ .../java/org/tensorflow/op/ragged/RaggedTensorToSparse.java | 3 +++ .../java/org/tensorflow/op/ragged/RaggedTensorToTensor.java | 3 +++ .../java/org/tensorflow/op/ragged/RaggedTensorToVariant.java | 3 +++ .../gen/java/org/tensorflow/op/random/AllCandidateSampler.java | 3 +++ .../org/tensorflow/op/random/AnonymousRandomSeedGenerator.java | 3 +++ .../org/tensorflow/op/random/DeleteRandomSeedGenerator.java | 3 +++ .../org/tensorflow/op/random/LogUniformCandidateSampler.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/Multinomial.java | 3 +++ .../java/org/tensorflow/op/random/NonDeterministicInts.java | 3 +++ .../org/tensorflow/op/random/ParameterizedTruncatedNormal.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RandomGamma.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RandomPoisson.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RandomShuffle.java | 3 +++ .../java/org/tensorflow/op/random/RandomStandardNormal.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RandomUniform.java | 3 +++ .../gen/java/org/tensorflow/op/random/RandomUniformInt.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RecordInput.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/RngSkip.java | 3 +++ .../java/org/tensorflow/op/random/StatefulRandomBinomial.java | 3 +++ .../java/org/tensorflow/op/random/StatefulStandardNormal.java | 3 +++ .../java/org/tensorflow/op/random/StatefulTruncatedNormal.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/StatefulUniform.java | 3 +++ .../java/org/tensorflow/op/random/StatefulUniformFullInt.java | 3 +++ .../gen/java/org/tensorflow/op/random/StatefulUniformInt.java | 3 +++ .../java/org/tensorflow/op/random/StatelessMultinomial.java | 3 +++ .../java/org/tensorflow/op/random/StatelessRandomBinomial.java | 3 +++ .../java/org/tensorflow/op/random/StatelessRandomGamma.java | 3 +++ .../java/org/tensorflow/op/random/StatelessRandomNormal.java | 3 +++ .../java/org/tensorflow/op/random/StatelessRandomPoisson.java | 3 +++ .../java/org/tensorflow/op/random/StatelessRandomUniform.java | 3 +++ .../tensorflow/op/random/StatelessRandomUniformFullInt.java | 3 +++ .../org/tensorflow/op/random/StatelessRandomUniformInt.java | 3 +++ .../org/tensorflow/op/random/StatelessTruncatedNormal.java | 3 +++ .../src/gen/java/org/tensorflow/op/random/TruncatedNormal.java | 3 +++ .../java/org/tensorflow/op/random/UniformCandidateSampler.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/BatchFft.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/BatchFft2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/BatchFft3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/BatchIfft.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/BatchIfft2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/BatchIfft3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Fft.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Fft2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Fft3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Ifft.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Ifft2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Ifft3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Irfft.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Irfft2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Irfft3d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Rfft.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Rfft2d.java | 3 +++ .../src/gen/java/org/tensorflow/op/signal/Rfft3d.java | 3 +++ .../org/tensorflow/op/sparse/AddManySparseToTensorsMap.java | 3 +++ .../java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java | 3 +++ .../org/tensorflow/op/sparse/DenseToDenseSetOperation.java | 3 +++ .../org/tensorflow/op/sparse/DenseToSparseSetOperation.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/DeserializeSparse.java | 3 +++ .../tensorflow/op/sparse/SparseAccumulatorApplyGradient.java | 3 +++ .../tensorflow/op/sparse/SparseAccumulatorTakeGradient.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseAdd.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseConcat.java | 3 +++ .../org/tensorflow/op/sparse/SparseConditionalAccumulator.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseCross.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseReduceSumSparse.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseReorder.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseReshape.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java | 3 +++ .../tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java | 3 +++ .../op/sparse/SparseSegmentSqrtNWithNumSegments.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java | 3 +++ .../tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseSlice.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseSplit.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java | 3 +++ .../java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java | 3 +++ .../src/gen/java/org/tensorflow/op/sparse/SparseToDense.java | 3 +++ .../org/tensorflow/op/sparse/SparseToSparseSetOperation.java | 3 +++ .../org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/Join.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/Lower.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/ReduceJoin.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/RegexReplace.java | 3 +++ .../java/org/tensorflow/op/strings/StaticRegexFullMatch.java | 3 +++ .../gen/java/org/tensorflow/op/strings/StaticRegexReplace.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/StringFormat.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/StringLength.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/StringNGrams.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/StringSplit.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/Strip.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/Substr.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/ToHashBucket.java | 3 +++ .../gen/java/org/tensorflow/op/strings/ToHashBucketFast.java | 3 +++ .../gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/ToNumber.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/UnicodeDecode.java | 3 +++ .../org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/UnicodeEncode.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/UnicodeScript.java | 3 +++ .../gen/java/org/tensorflow/op/strings/UnicodeTranscode.java | 3 +++ .../java/org/tensorflow/op/strings/UnsortedSegmentJoin.java | 3 +++ .../src/gen/java/org/tensorflow/op/strings/Upper.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/AudioSummary.java | 3 +++ .../gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java | 3 +++ .../java/org/tensorflow/op/summary/CreateSummaryDbWriter.java | 3 +++ .../org/tensorflow/op/summary/CreateSummaryFileWriter.java | 3 +++ .../gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java | 3 +++ .../gen/java/org/tensorflow/op/summary/HistogramSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/ImageSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/ImportEvent.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/MergeSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/ScalarSummary.java | 3 +++ .../java/org/tensorflow/op/summary/StatsAggregatorSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/SummaryWriter.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/TensorSummary.java | 3 +++ .../gen/java/org/tensorflow/op/summary/WriteAudioSummary.java | 3 +++ .../gen/java/org/tensorflow/op/summary/WriteGraphSummary.java | 3 +++ .../java/org/tensorflow/op/summary/WriteHistogramSummary.java | 3 +++ .../gen/java/org/tensorflow/op/summary/WriteImageSummary.java | 3 +++ .../java/org/tensorflow/op/summary/WriteRawProtoSummary.java | 3 +++ .../gen/java/org/tensorflow/op/summary/WriteScalarSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/summary/WriteSummary.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/AllToAll.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/CollectivePermute.java | 3 +++ .../java/org/tensorflow/op/tpu/ConfigureDistributedTPU.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/CrossReplicaSum.java | 3 +++ .../org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java | 3 +++ .../org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java | 3 +++ .../op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/InfeedDequeue.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/InfeedDequeueTuple.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java | 3 +++ .../tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java | 3 +++ .../org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java | 3 +++ .../op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java | 3 +++ .../tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java | 3 +++ .../tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java | 3 +++ .../tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java | 3 +++ .../tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java | 3 +++ .../op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java | 3 +++ .../org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java | 3 +++ .../op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java | 3 +++ .../op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java | 3 +++ .../tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java | 3 +++ .../tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java | 3 +++ .../op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java | 3 +++ ...oadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java | 3 +++ .../tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java | 3 +++ .../tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java | 3 +++ .../LoadTPUEmbeddingStochasticGradientDescentParameters.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/OutfeedDequeue.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/OutfeedDequeueTuple.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/Prelinearize.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/PrelinearizeTuple.java | 3 +++ .../org/tensorflow/op/tpu/RecvTPUEmbeddingActivations.java | 3 +++ .../tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParameters.java | 3 +++ .../tpu/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingAdadeltaParameters.java | 3 +++ .../RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingAdagradParameters.java | 3 +++ .../RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingCenteredRMSPropParameters.java | 3 +++ .../tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParameters.java | 3 +++ .../tpu/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingMDLAdagradLightParameters.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingMomentumParameters.java | 3 +++ .../RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingProximalAdagradParameters.java | 3 +++ ...eveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java | 3 +++ .../op/tpu/RetrieveTPUEmbeddingRMSPropParameters.java | 3 +++ .../RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java | 3 +++ ...etrieveTPUEmbeddingStochasticGradientDescentParameters.java | 3 +++ .../java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/ShutdownDistributedTPU.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/TPUCompilationResult.java | 3 +++ .../java/org/tensorflow/op/tpu/TPUEmbeddingActivations.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/TPUOrdinalSelector.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/TPUReplicateMetadata.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/TPUReplicatedInput.java | 3 +++ .../gen/java/org/tensorflow/op/tpu/TPUReplicatedOutput.java | 3 +++ .../src/gen/java/org/tensorflow/op/tpu/WorkerHeartbeat.java | 3 +++ .../java/org/tensorflow/op/train/AccumulatorApplyGradient.java | 3 +++ .../org/tensorflow/op/train/AccumulatorNumAccumulated.java | 3 +++ .../java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java | 3 +++ .../java/org/tensorflow/op/train/AccumulatorTakeGradient.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAdaMax.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAdadelta.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAdagrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAdagradV2.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAdam.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyAddSign.java | 3 +++ .../gen/java/org/tensorflow/op/train/ApplyCenteredRmsProp.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyFtrl.java | 3 +++ .../gen/java/org/tensorflow/op/train/ApplyGradientDescent.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyMomentum.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyPowerSign.java | 3 +++ .../gen/java/org/tensorflow/op/train/ApplyProximalAdagrad.java | 3 +++ .../org/tensorflow/op/train/ApplyProximalGradientDescent.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/ApplyRmsProp.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/BatchMatMul.java | 3 +++ .../java/org/tensorflow/op/train/ConditionalAccumulator.java | 3 +++ .../java/org/tensorflow/op/train/GenerateVocabRemapping.java | 3 +++ .../gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/NegTrain.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/PreventGradient.java | 3 +++ .../tensorflow/op/train/ResourceAccumulatorApplyGradient.java | 3 +++ .../tensorflow/op/train/ResourceAccumulatorNumAccumulated.java | 3 +++ .../tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java | 3 +++ .../tensorflow/op/train/ResourceAccumulatorTakeGradient.java | 3 +++ .../gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java | 3 +++ .../java/org/tensorflow/op/train/ResourceApplyAdadelta.java | 3 +++ .../gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java | 3 +++ .../java/org/tensorflow/op/train/ResourceApplyAdagradDa.java | 3 +++ .../gen/java/org/tensorflow/op/train/ResourceApplyAdam.java | 3 +++ .../org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java | 3 +++ .../gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java | 3 +++ .../org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java | 3 +++ .../gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java | 3 +++ .../org/tensorflow/op/train/ResourceApplyGradientDescent.java | 3 +++ .../org/tensorflow/op/train/ResourceApplyKerasMomentum.java | 3 +++ .../java/org/tensorflow/op/train/ResourceApplyMomentum.java | 3 +++ .../java/org/tensorflow/op/train/ResourceApplyPowerSign.java | 3 +++ .../org/tensorflow/op/train/ResourceApplyProximalAdagrad.java | 3 +++ .../op/train/ResourceApplyProximalGradientDescent.java | 3 +++ .../gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java | 3 +++ .../tensorflow/op/train/ResourceConditionalAccumulator.java | 3 +++ .../org/tensorflow/op/train/ResourceSparseApplyAdadelta.java | 3 +++ .../org/tensorflow/op/train/ResourceSparseApplyAdagrad.java | 3 +++ .../org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java | 3 +++ .../org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java | 3 +++ .../op/train/ResourceSparseApplyCenteredRmsProp.java | 3 +++ .../java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java | 3 +++ .../tensorflow/op/train/ResourceSparseApplyKerasMomentum.java | 3 +++ .../org/tensorflow/op/train/ResourceSparseApplyMomentum.java | 3 +++ .../op/train/ResourceSparseApplyProximalAdagrad.java | 3 +++ .../op/train/ResourceSparseApplyProximalGradientDescent.java | 3 +++ .../org/tensorflow/op/train/ResourceSparseApplyRmsProp.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/Restore.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/RestoreSlice.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/Save.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/SaveSlices.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/SdcaFprint.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java | 3 +++ .../gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java | 3 +++ .../gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java | 3 +++ .../gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java | 3 +++ .../org/tensorflow/op/train/SparseApplyCenteredRmsProp.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java | 3 +++ .../gen/java/org/tensorflow/op/train/SparseApplyMomentum.java | 3 +++ .../org/tensorflow/op/train/SparseApplyProximalAdagrad.java | 3 +++ .../op/train/SparseApplyProximalGradientDescent.java | 3 +++ .../gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java | 3 +++ .../src/gen/java/org/tensorflow/op/train/TileGrad.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/BroadcastHelper.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/ClusterOutput.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Conv.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Dequantize.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Dot.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/DynamicSlice.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/DynamicUpdateSlice.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Einsum.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Gather.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/KeyValueSort.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Pad.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Recv.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/ReplicaId.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/SelfAdjointEig.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Send.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Sharding.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Sort.java | 3 +++ .../src/gen/java/org/tensorflow/op/xla/Svd.java | 3 +++ 1002 files changed, 3006 insertions(+) diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java index 6774323de4d..28fdb7791bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/AudioSpectrogram.java @@ -127,6 +127,9 @@ public Output asOutput() { return spectrogram; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AudioSpectrogram"; + private Output spectrogram; private AudioSpectrogram(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java index a58d814660c..ec80ffdaf7c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/DecodeWav.java @@ -132,6 +132,9 @@ public Output sampleRate() { return sampleRate; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeWav"; + private Output audio; private Output sampleRate; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java index 2336a3124c5..b1920318564 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/EncodeWav.java @@ -72,6 +72,9 @@ public Output asOutput() { return contents; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EncodeWav"; + private Output contents; private EncodeWav(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java index a13d22fdb4a..07ab4a13215 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/audio/Mfcc.java @@ -165,6 +165,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Mfcc"; + private Output output; private Mfcc(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java index 70318891190..e199ff2201f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseAnd.java @@ -84,6 +84,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BitwiseAnd"; + private Output z; private BitwiseAnd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java index 4d882a6c202..264c2bc340b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseOr.java @@ -84,6 +84,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BitwiseOr"; + private Output z; private BitwiseOr(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java index 597ae15fb90..1d8f668c175 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/BitwiseXor.java @@ -84,6 +84,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BitwiseXor"; + private Output z; private BitwiseXor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java index 6cbacade24d..9f8bdfd56d8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/Invert.java @@ -103,6 +103,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Invert"; + private Output y; private Invert(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java index bddf9269c42..f7a47534d81 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/LeftShift.java @@ -95,6 +95,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LeftShift"; + private Output z; private LeftShift(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java index 92487345d8c..99c5fe5766e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/bitwise/RightShift.java @@ -98,6 +98,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RightShift"; + private Output z; private RightShift(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KMC2ChainInitialization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KMC2ChainInitialization.java index 350036bbdc6..272695dad5c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KMC2ChainInitialization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KMC2ChainInitialization.java @@ -68,6 +68,9 @@ public Output asOutput() { return index; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "KMC2ChainInitialization"; + private Output index; private KMC2ChainInitialization(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KmeansPlusPlusInitialization.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KmeansPlusPlusInitialization.java index a8d6f3eb70b..63d8ef01222 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KmeansPlusPlusInitialization.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/cluster/KmeansPlusPlusInitialization.java @@ -74,6 +74,9 @@ public Output asOutput() { return samples; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "KmeansPlusPlusInitialization"; + private Output samples; private KmeansPlusPlusInitialization(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java index 40125fa7856..3776697d4e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/AllReduce.java @@ -135,6 +135,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CollectiveReduce"; + private Output output; private AllReduce(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java index c754a3d9dea..babdee94a27 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastRecv.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CollectiveBcastRecv"; + private Output output; private BroadcastRecv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java index 72f721a9fa3..41b8faa0f67 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/collective/BroadcastSend.java @@ -103,6 +103,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CollectiveBcastSend"; + private Output output; private BroadcastSend(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java index 6fde31b3dbc..53e9401dfa2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java @@ -101,6 +101,9 @@ public static Options exitWithoutError(Boolean exitWithoutError) { return new Options().exitWithoutError(exitWithoutError); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Abort"; + private Abort(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java index 2c92e6934cc..909427d1a57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/All.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "All"; + private Output output; private All(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java index c30305b2207..0316e5e1a94 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Any.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Any"; + private Output output; private Any(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java index a56b01c90aa..950830b7462 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java @@ -87,6 +87,9 @@ public static Options summarize(Long summarize) { return new Options().summarize(summarize); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Assert"; + private AssertThat(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Assign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Assign.java index c0319759f33..27f66d3da23 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Assign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Assign.java @@ -127,6 +127,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Assign"; + private Output outputRef; private Assign(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAdd.java index 9208756aa95..770842d2764 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAdd.java @@ -104,6 +104,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssignAdd"; + private Output outputRef; private AssignAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java index 3725c318637..5adaccf15e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java @@ -52,6 +52,9 @@ public static AssignAddVariableOp create(Scope scope, Operand< return new AssignAddVariableOp(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssignAddVariableOp"; + private AssignAddVariableOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSub.java index 13506b03543..37841e0dadc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSub.java @@ -104,6 +104,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssignSub"; + private Output outputRef; private AssignSub(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java index c47fc330702..4bb683c97d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java @@ -52,6 +52,9 @@ public static AssignSubVariableOp create(Scope scope, Operand< return new AssignSubVariableOp(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssignSubVariableOp"; + private AssignSubVariableOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java index bdd89c0204d..90cabd12a24 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java @@ -52,6 +52,9 @@ public static AssignVariableOp create(Scope scope, Operand return new AssignVariableOp(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssignVariableOp"; + private AssignVariableOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java index dea40abd45c..b9c5c84083f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Barrier.java @@ -181,6 +181,9 @@ public Output asOutput() { return handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Barrier"; + private Output handle; private Barrier(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java index 2b1cbc84c2b..a777d684ec1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java @@ -92,6 +92,9 @@ public static Options cancelPendingEnqueues(Boolean cancelPendingEnqueues) { return new Options().cancelPendingEnqueues(cancelPendingEnqueues); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BarrierClose"; + private BarrierClose(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java index 62bcdcf1e56..72dbe1533d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierIncompleteSize.java @@ -62,6 +62,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BarrierIncompleteSize"; + private Output size; private BarrierIncompleteSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java index 8e16fe1df11..31488738838 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java @@ -60,6 +60,9 @@ public static BarrierInsertMany create(Scope scope, Operand asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BarrierReadySize"; + private Output size; private BarrierReadySize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java index 481cdcd1d7a..6c391fab5fa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierTakeMany.java @@ -172,6 +172,9 @@ public List> values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BarrierTakeMany"; + private Output indices; private Output keys; private List> values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java index 895ad5e3c77..21d7cf0a6c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Batch.java @@ -228,6 +228,9 @@ public Output id() { return id; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Batch"; + private List> batchedTensors; private Output batchIndex; private Output id; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java index 3d1fc8af44e..b20c60ee4ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpace.java @@ -134,6 +134,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchToSpace"; + private Output output; private BatchToSpace(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java index 8c2a3d9b703..ef6f31d0f89 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BatchToSpaceNd.java @@ -168,6 +168,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchToSpaceND"; + private Output output; private BatchToSpaceNd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java index fa7777e0d98..b01c8598ae6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bitcast.java @@ -115,6 +115,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Bitcast"; + private Output output; private Bitcast(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java index 88758189167..3027e8234a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastDynamicShape.java @@ -67,6 +67,9 @@ public Output asOutput() { return r0; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BroadcastArgs"; + private Output r0; private BroadcastDynamicShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java index 309cfef9430..2d95c71086e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastGradientArgs.java @@ -66,6 +66,9 @@ public Output r1() { return r1; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BroadcastGradientArgs"; + private Output r0; private Output r1; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java index e4c1b80764f..7e1a7b89324 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BroadcastTo.java @@ -84,6 +84,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BroadcastTo"; + private Output output; private BroadcastTo(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java index f7f32115de1..84e9b454d0d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Bucketize.java @@ -84,6 +84,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Bucketize"; + private Output output; private Bucketize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ClipByValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ClipByValue.java index 1c33f21ba98..8a5b99d9389 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ClipByValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ClipByValue.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ClipByValue"; + private Output output; private ClipByValue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java index da4f82ad2a2..22ce5634f75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CollectiveGather.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CollectiveGather"; + private Output output; private CollectiveGather(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java index eb62cb86bf5..9782b3d6ec9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Concat.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConcatV2"; + private Output output; private Concat(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConsumeMutexLock.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConsumeMutexLock.java index 8a7440297f3..39dd4ffc7d9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConsumeMutexLock.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ConsumeMutexLock.java @@ -54,6 +54,9 @@ public static ConsumeMutexLock create(Scope scope, Operand mutexLock) { return new ConsumeMutexLock(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConsumeMutexLock"; + private ConsumeMutexLock(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java index 9c1baf17ed3..721112b8204 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java @@ -45,6 +45,9 @@ public static ControlTrigger create(Scope scope) { return new ControlTrigger(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ControlTrigger"; + private ControlTrigger(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Copy.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Copy.java index 6ca879bf1b9..fb9cbbb122a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Copy.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Copy.java @@ -135,6 +135,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Copy"; + private Output output; private Copy(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CopyHost.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CopyHost.java index b57961ead25..566258c0430 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CopyHost.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CopyHost.java @@ -133,6 +133,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CopyHost"; + private Output output; private CopyHost(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java index 84dfbc90633..2884783695d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/CountUpTo.java @@ -67,6 +67,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CountUpTo"; + private Output output; private CountUpTo(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java index 8a423575c08..28af55f8465 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DecodeProto.java @@ -206,6 +206,9 @@ public List> values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeProtoV2"; + private Output sizes; private List> values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeepCopy.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeepCopy.java index 0abe365a8a9..da22489acc9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeepCopy.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeepCopy.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeepCopy"; + private Output y; private DeepCopy(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java index 2da72b19db9..50c7615a0ff 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java @@ -47,6 +47,9 @@ public static DeleteSessionTensor create(Scope scope, Operand handle) { return new DeleteSessionTensor(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeleteSessionTensor"; + private DeleteSessionTensor(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java index dc494cea751..e1958682ee1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java @@ -85,6 +85,9 @@ public static Options ignoreLookupError(Boolean ignoreLookupError) { return new Options().ignoreLookupError(ignoreLookupError); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DestroyResourceOp"; + private DestroyResourceOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyTemporaryVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyTemporaryVariable.java index 65fa9c62e4a..7941a7a5870 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyTemporaryVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyTemporaryVariable.java @@ -72,6 +72,9 @@ public Output asOutput() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DestroyTemporaryVariable"; + private Output value; private DestroyTemporaryVariable(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DummyMemoryCache.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DummyMemoryCache.java index c5a6187d1ed..56f16d48a9b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DummyMemoryCache.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DummyMemoryCache.java @@ -56,6 +56,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DummyMemoryCache"; + private Output handle; private DummyMemoryCache(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java index 48dd3b54f8e..d9da09b5d34 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicPartition.java @@ -104,6 +104,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DynamicPartition"; + private List> outputs; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java index ba41dcf77f8..b7dd72f8a57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DynamicStitch.java @@ -120,6 +120,9 @@ public Output asOutput() { return merged; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DynamicStitch"; + private Output merged; private DynamicStitch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java index 7c0a35798d5..29423a3c548 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EditDistance.java @@ -151,6 +151,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EditDistance"; + private Output output; private EditDistance(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java index 0e39ea25f92..c8305349d37 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Empty.java @@ -102,6 +102,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Empty"; + private Output output; private Empty(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java index e91ebafbb03..619fb90657f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EmptyTensorList.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EmptyTensorList"; + private Output handle; private EmptyTensorList(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java index 6f2e448d053..4d0396dcb9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EncodeProto.java @@ -147,6 +147,9 @@ public Output asOutput() { return bytes; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EncodeProto"; + private Output bytes; private EncodeProto(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java index 3b8a8790afa..8ea86427b7c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/EnsureShape.java @@ -68,6 +68,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EnsureShape"; + private Output output; private EnsureShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Enter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Enter.java index d6802061959..fa19763defb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Enter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Enter.java @@ -122,6 +122,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Enter"; + private Output output; private Enter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Exit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Exit.java index 879225e5dbc..4e42bb0bb0e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Exit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Exit.java @@ -63,6 +63,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Exit"; + private Output output; private Exit(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java index 12cb36b98dc..eb0e977e163 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExpandDims.java @@ -97,6 +97,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExpandDims"; + private Output output; private ExpandDims(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java index 6816275860b..0b9bcd78e20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ExtractVolumePatches.java @@ -90,6 +90,9 @@ public Output asOutput() { return patches; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExtractVolumePatches"; + private Output patches; private ExtractVolumePatches(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java index adbcc23f363..79b827ea2aa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fill.java @@ -91,6 +91,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Fill"; + private Output output; private Fill(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java index 4aca6b0201e..0ea88f2b1f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Fingerprint.java @@ -96,6 +96,9 @@ public Output asOutput() { return fingerprint; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Fingerprint"; + private Output fingerprint; private Fingerprint(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java index 8eaec57f813..f40581ef26c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Gather.java @@ -130,6 +130,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GatherV2"; + private Output output; private Gather(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java index 917db87705f..e932794001e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GatherNd.java @@ -159,6 +159,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GatherNd"; + private Output output; private GatherNd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionHandle.java index 57754705177..93a31f1cba1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionHandle.java @@ -62,6 +62,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GetSessionHandleV2"; + private Output handle; private GetSessionHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java index 634b23ed56c..93ba5af508c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GetSessionTensor.java @@ -66,6 +66,9 @@ public Output asOutput() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GetSessionTensor"; + private Output value; private GetSessionTensor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GuaranteeConst.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GuaranteeConst.java index ff9064f3ac9..df0a48ad28f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GuaranteeConst.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/GuaranteeConst.java @@ -68,6 +68,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GuaranteeConst"; + private Output output; private GuaranteeConst(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java index 2b097647e32..87d9cab4c3f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HashTable.java @@ -146,6 +146,9 @@ public Output asOutput() { return (Output) tableHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "HashTableV2"; + private Output tableHandle; private HashTable(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java index b7f7a90a90d..da1c1a7b713 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/HistogramFixedWidth.java @@ -105,6 +105,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "HistogramFixedWidth"; + private Output out; private HistogramFixedWidth(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Identity.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Identity.java index 32c3d0d4cab..1cafffdf5c9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Identity.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Identity.java @@ -61,6 +61,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Identity"; + private Output output; private Identity(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IdentityN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IdentityN.java index 4ad5ab1f261..e000005eabf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IdentityN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IdentityN.java @@ -80,6 +80,9 @@ public Iterator> iterator() { return (Iterator) output.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IdentityN"; + private List> output; private IdentityN(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java index c301ab66ca4..ecbc3154498 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ImmutableConst.java @@ -70,6 +70,9 @@ public Output asOutput() { return tensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ImmutableConst"; + private Output tensor; private ImmutableConst(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java index 2ffb3c37290..5de2ca6ff07 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java @@ -51,6 +51,9 @@ public static InitializeTable create(Scope sc return new InitializeTable(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InitializeTableV2"; + private InitializeTable(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java index 672bf052e49..0a88cea3ef2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java @@ -118,6 +118,9 @@ public static Options delimiter(String delimiter) { return new Options().delimiter(delimiter); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InitializeTableFromTextFileV2"; + private InitializeTableFromTextFile(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java index 5eab2e36d95..8de34bc569f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceAdd.java @@ -69,6 +69,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InplaceAdd"; + private Output y; private InplaceAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java index 7ff3c5ef9bc..999f793c869 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceSub.java @@ -69,6 +69,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InplaceSub"; + private Output y; private InplaceSub(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java index 877c9400f7f..a7c616cbbc2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InplaceUpdate.java @@ -69,6 +69,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InplaceUpdate"; + private Output y; private InplaceUpdate(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java index f4f6bf5fe36..e9dc32ec1d7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/IsVariableInitialized.java @@ -62,6 +62,9 @@ public Output asOutput() { return isInitialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IsVariableInitialized"; + private Output isInitialized; private IsVariableInitialized(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java index c8b4d2dfa95..5dbd14154de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LinSpace.java @@ -77,6 +77,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LinSpace"; + private Output output; private LinSpace(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java index 0f31790fe45..6bebbb35895 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableExport.java @@ -70,6 +70,9 @@ public Output values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LookupTableExportV2"; + private Output keys; private Output values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableFind.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableFind.java index e0dbead12d2..bfc8e92e16f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableFind.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableFind.java @@ -73,6 +73,9 @@ public Output asOutput() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LookupTableFindV2"; + private Output values; private LookupTableFind(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java index 3df4d4653e0..a94393a50f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java @@ -54,6 +54,9 @@ public static LookupTableImport create(Scope return new LookupTableImport(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LookupTableImportV2"; + private LookupTableImport(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java index 9e355312479..c31784ea942 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java @@ -54,6 +54,9 @@ public static LookupTableInsert create(Scope return new LookupTableInsert(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LookupTableInsertV2"; + private LookupTableInsert(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java index 875bbfa486c..584e7e1325c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java @@ -51,6 +51,9 @@ public static LookupTableRemove create(Scope scope, Operand return new LookupTableRemove(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LookupTableRemoveV2"; + private LookupTableRemove(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java index 441c2208bd3..10e84953496 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableSize.java @@ -60,6 +60,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LookupTableSizeV2"; + private Output size; private LookupTableSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java index bef80f40840..57b82598f84 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LoopCond.java @@ -63,6 +63,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoopCond"; + private Output output; private LoopCond(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java index dfce8ac4d1f..6f0f5158cca 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LowerBound.java @@ -103,6 +103,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LowerBound"; + private Output output; private LowerBound(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java index 5ffc0da9c6c..ea7581ef2c7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java @@ -142,6 +142,9 @@ public static Options sharedName(String sharedName) { return new Options().sharedName(sharedName); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapClear"; + private MapClear(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java index a4522bb2993..19e9e87a08a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapIncompleteSize.java @@ -156,6 +156,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapIncompleteSize"; + private Output size; private MapIncompleteSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java index 38087a7b46f..1925ca680ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapPeek.java @@ -168,6 +168,9 @@ public Iterator> iterator() { return (Iterator) values.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapPeek"; + private List> values; private MapPeek(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java index 20a2b619d1e..7f4eea906f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapSize.java @@ -156,6 +156,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapSize"; + private Output size; private MapSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java index cc09bdf78a2..5d72ce8f22f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java @@ -157,6 +157,9 @@ public static Options sharedName(String sharedName) { return new Options().sharedName(sharedName); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapStage"; + private MapStage(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java index 932c1f4f970..849f6f3ef6a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstage.java @@ -168,6 +168,9 @@ public Iterator> iterator() { return (Iterator) values.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapUnstage"; + private List> values; private MapUnstage(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java index a915362108e..10a119ec6c4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapUnstageNoKey.java @@ -164,6 +164,9 @@ public List> values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MapUnstageNoKey"; + private Output key; private List> values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java index e97fc9d17ca..94bcd0f544c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Max.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Max"; + private Output output; private Max(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java index 476253b5601..41eca5fc33f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Merge.java @@ -72,6 +72,9 @@ public Output valueIndex() { return valueIndex; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Merge"; + private Output output; private Output valueIndex; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java index c19b8eaefdf..ed8ea366e7a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Min.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Min"; + private Output output; private Min(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java index beb9448138c..6c8292a671a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPad.java @@ -98,6 +98,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MirrorPad"; + private Output output; private MirrorPad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java index ee3a76eab9f..7b1727c3fb5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MirrorPadGrad.java @@ -86,6 +86,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MirrorPadGrad"; + private Output output; private MirrorPadGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MlirPassthroughOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MlirPassthroughOp.java index fc482784607..a6c92896683 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MlirPassthroughOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MlirPassthroughOp.java @@ -103,6 +103,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MlirPassthroughOp"; + private List> outputs; private MlirPassthroughOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java index 1b5fca24ce2..4ff3c1f3ea6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableDenseHashTable.java @@ -212,6 +212,9 @@ public Output asOutput() { return (Output) tableHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MutableDenseHashTableV2"; + private Output tableHandle; private MutableDenseHashTable(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java index 74d304d82ab..a11789f9f34 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTable.java @@ -146,6 +146,9 @@ public Output asOutput() { return (Output) tableHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MutableHashTableV2"; + private Output tableHandle; private MutableHashTable(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java index 6ef45423fba..975f040ae3b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutableHashTableOfTensors.java @@ -164,6 +164,9 @@ public Output asOutput() { return (Output) tableHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MutableHashTableOfTensorsV2"; + private Output tableHandle; private MutableHashTableOfTensors(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Mutex.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Mutex.java index 41f57d9a755..1af2b439372 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Mutex.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Mutex.java @@ -116,6 +116,9 @@ public Output asOutput() { return (Output) resource; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MutexV2"; + private Output resource; private Mutex(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutexLock.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutexLock.java index e67ea7a228b..de28b8f5025 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutexLock.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MutexLock.java @@ -99,6 +99,9 @@ public Output asOutput() { return (Output) mutexLock; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MutexLock"; + private Output mutexLock; private MutexLock(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java index 179e8f08e1d..a44611b5a41 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclAllReduce.java @@ -80,6 +80,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NcclAllReduce"; + private Output output; private NcclAllReduce(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java index 70339b3853a..da0832e437a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclBroadcast.java @@ -74,6 +74,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NcclBroadcast"; + private Output output; private NcclBroadcast(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java index c6376f1a908..ced1473e60a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NcclReduce.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NcclReduce"; + private Output output; private NcclReduce(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextIteration.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextIteration.java index 99f0fa0dd1b..69b6be6a810 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextIteration.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NextIteration.java @@ -62,6 +62,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NextIteration"; + private Output output; private NextIteration(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java index aa37e24c61a..862aabcd795 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java @@ -43,6 +43,9 @@ public static NoOp create(Scope scope) { return new NoOp(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NoOp"; + private NoOp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java index 9b4d6a4927d..442b9ae9108 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OneHot.java @@ -185,6 +185,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OneHot"; + private Output output; private OneHot(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OnesLike.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OnesLike.java index 5d9ce5861c2..986d0201f26 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OnesLike.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OnesLike.java @@ -62,6 +62,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OnesLike"; + private Output y; private OnesLike(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java index df85e76bc3b..29f4133ce09 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java @@ -142,6 +142,9 @@ public static Options sharedName(String sharedName) { return new Options().sharedName(sharedName); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapClear"; + private OrderedMapClear(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java index 9ae3fd09642..865810568db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapIncompleteSize.java @@ -156,6 +156,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapIncompleteSize"; + private Output size; private OrderedMapIncompleteSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java index dd7fc0e3f40..21c6adcc039 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapPeek.java @@ -169,6 +169,9 @@ public Iterator> iterator() { return (Iterator) values.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapPeek"; + private List> values; private OrderedMapPeek(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java index d16383393f4..afdee7de1bd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapSize.java @@ -156,6 +156,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapSize"; + private Output size; private OrderedMapSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java index c752a0dd84e..b51f94c148a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java @@ -159,6 +159,9 @@ public static Options sharedName(String sharedName) { return new Options().sharedName(sharedName); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapStage"; + private OrderedMapStage(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstage.java index c44e344638d..e2460e42dd8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstage.java @@ -168,6 +168,9 @@ public Iterator> iterator() { return (Iterator) values.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapUnstage"; + private List> values; private OrderedMapUnstage(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java index d0fa6beea68..f20a23b9806 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapUnstageNoKey.java @@ -164,6 +164,9 @@ public List> values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OrderedMapUnstageNoKey"; + private Output key; private List> values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java index c21f7aa9a58..205e6ab0a62 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Pad.java @@ -91,6 +91,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PadV2"; + private Output output; private Pad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java index ed9af9dde57..e373612bb68 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelConcat.java @@ -83,6 +83,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParallelConcat"; + private Output output; private ParallelConcat(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java index 3fd6514f285..2770fa01591 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ParallelDynamicStitch.java @@ -119,6 +119,9 @@ public Output asOutput() { return merged; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParallelDynamicStitch"; + private Output merged; private ParallelDynamicStitch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java index c9c7727fcf8..caef9fc0783 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Placeholder.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Placeholder"; + private Output output; private Placeholder(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java index e794a0623cb..59a9ca223ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/PlaceholderWithDefault.java @@ -65,6 +65,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PlaceholderWithDefault"; + private Output output; private PlaceholderWithDefault(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java index 1f341e11de5..3e96c00d369 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java @@ -102,6 +102,9 @@ public static Options end(String end) { return new Options().end(end); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PrintV2"; + private Print(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java index b9b7b8b65a4..6bf1b7cd37d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Prod.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Prod"; + private Output output; private Prod(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java index f4996cd8875..e644855bbc9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/QuantizedReshape.java @@ -80,6 +80,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedReshape"; + private Output output; private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java index 5134f49c314..967a490382e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Range.java @@ -79,6 +79,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Range"; + private Output output; private Range(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java index f7e1959280d..071551d6492 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rank.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Rank"; + private Output output; private Rank(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java index c535547a925..aa2d1d2b9b2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReadVariableOp.java @@ -71,6 +71,9 @@ public Output asOutput() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReadVariableOp"; + private Output value; private ReadVariableOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Recv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Recv.java index 5feb610b6fd..db6511c1583 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Recv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Recv.java @@ -110,6 +110,9 @@ public Output asOutput() { return tensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Recv"; + private Output tensor; private Recv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java index 195a7bbbce8..9a5ad026ac8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAll.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "All"; + private Output output; private ReduceAll(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java index 9dde0ff6238..de479629f97 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceAny.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Any"; + private Output output; private ReduceAny(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java index 1df06cb441d..997481542b8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMax.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Max"; + private Output output; private ReduceMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java index 2ebdaa01247..60d64c3a58c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceMin.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Min"; + private Output output; private ReduceMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java index 37fcf044469..7c9872758b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceProd.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Prod"; + private Output output; private ReduceProd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java index 82bf9d35558..f87e5b22e15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReduceSum.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sum"; + private Output output; private ReduceSum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefEnter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefEnter.java index bec8abb5f80..8292dcbb379 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefEnter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefEnter.java @@ -121,6 +121,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefEnter"; + private Output output; private RefEnter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefExit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefExit.java index 80399854da4..d8896a59211 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefExit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefExit.java @@ -63,6 +63,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefExit"; + private Output output; private RefExit(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefIdentity.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefIdentity.java index e3840bfa886..9deff66c3a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefIdentity.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefIdentity.java @@ -60,6 +60,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefIdentity"; + private Output output; private RefIdentity(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java index eab96521ea6..990cfaaadb6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefMerge.java @@ -71,6 +71,9 @@ public Output valueIndex() { return valueIndex; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefMerge"; + private Output output; private Output valueIndex; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefNextIteration.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefNextIteration.java index bb1423440fd..c151662820e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefNextIteration.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefNextIteration.java @@ -62,6 +62,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefNextIteration"; + private Output output; private RefNextIteration(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java index 23864ed4820..8be3ae40e9e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSelect.java @@ -66,6 +66,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefSelect"; + private Output output; private RefSelect(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java index b45250bb083..f0128f668fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RefSwitch.java @@ -72,6 +72,9 @@ public Output outputTrue() { return outputTrue; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RefSwitch"; + private Output outputFalse; private Output outputTrue; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java index 0242749bda6..bd76549c976 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/RemoteFusedGraphExecute.java @@ -83,6 +83,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RemoteFusedGraphExecute"; + private List> outputs; private RemoteFusedGraphExecute(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java index eaeaa5ded4e..2829a332b0e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reshape.java @@ -124,6 +124,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Reshape"; + private Output output; private Reshape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java index cce86ab05ce..19f630dd014 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceCountUpTo.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceCountUpTo"; + private Output output; private ResourceCountUpTo(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java index fd8ccc35cfa..38aa1fbd407 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGather.java @@ -134,6 +134,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceGather"; + private Output output; private ResourceGather(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java index f2c501ec524..85e422179f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceGatherNd.java @@ -65,6 +65,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceGatherNd"; + private Output output; private ResourceGatherNd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java index 630a3716695..5383062823b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java @@ -72,6 +72,9 @@ public static ResourceScatterAdd create(Sco return new ResourceScatterAdd(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterAdd"; + private ResourceScatterAdd(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java index dba2e37ec12..ed950863242 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java @@ -72,6 +72,9 @@ public static ResourceScatterDiv create(Sco return new ResourceScatterDiv(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterDiv"; + private ResourceScatterDiv(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java index 6068660a905..7553fab4812 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java @@ -72,6 +72,9 @@ public static ResourceScatterMax create(Sco return new ResourceScatterMax(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterMax"; + private ResourceScatterMax(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java index 3e0ffeae23a..68518b4c640 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java @@ -72,6 +72,9 @@ public static ResourceScatterMin create(Sco return new ResourceScatterMin(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterMin"; + private ResourceScatterMin(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java index 1a8feb21838..f52b338de57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java @@ -72,6 +72,9 @@ public static ResourceScatterMul create(Sco return new ResourceScatterMul(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterMul"; + private ResourceScatterMul(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java index a230b7d58bf..5abfcbea5ee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java @@ -122,6 +122,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterNdAdd"; + private ResourceScatterNdAdd(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java index 9912c63f129..c4b6060d611 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java @@ -122,6 +122,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterNdSub"; + private ResourceScatterNdSub(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java index 625010c6aac..b47fb4a1367 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java @@ -124,6 +124,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterNdUpdate"; + private ResourceScatterNdUpdate(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java index 727dc01ab32..2559ff21a93 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java @@ -72,6 +72,9 @@ public static ResourceScatterSub create(Sco return new ResourceScatterSub(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterSub"; + private ResourceScatterSub(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java index c75107a4bb7..eff04c6c08a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java @@ -63,6 +63,9 @@ public static ResourceScatterUpdate create( return new ResourceScatterUpdate(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterUpdate"; + private ResourceScatterUpdate(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java index 10c93185348..2002140573b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java @@ -173,6 +173,9 @@ public static Options shrinkAxisMask(Long shrinkAxisMask) { return new Options().shrinkAxisMask(shrinkAxisMask); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceStridedSliceAssign"; + private ResourceStridedSliceAssign(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java index e64e165182f..340336ee9f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Reverse.java @@ -113,6 +113,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReverseV2"; + private Output output; private Reverse(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java index a78de7f9a4c..46fd2b54aa9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ReverseSequence.java @@ -155,6 +155,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReverseSequence"; + private Output output; private ReverseSequence(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java index 8f6559ca09f..761be92e533 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Roll.java @@ -96,6 +96,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Roll"; + private Output output; private Roll(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java index 2d753afec51..ad3195933bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Rpc.java @@ -196,6 +196,9 @@ public Output asOutput() { return response; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Rpc"; + private Output response; private Rpc(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java index 5d18510e225..c91e799a643 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterAdd.java @@ -127,6 +127,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterAdd"; + private Output outputRef; private ScatterAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java index 800dada981d..12a27c67960 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterDiv.java @@ -123,6 +123,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterDiv"; + private Output outputRef; private ScatterDiv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java index 99e97ee0d23..20b84f016ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMax.java @@ -127,6 +127,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterMax"; + private Output outputRef; private ScatterMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java index 3b96560077a..5010da14eaa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMin.java @@ -127,6 +127,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterMin"; + private Output outputRef; private ScatterMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java index 38305790fb5..ba0892e1a04 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterMul.java @@ -123,6 +123,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterMul"; + private Output outputRef; private ScatterMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java index c59c526ca86..86acb2935db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNd.java @@ -145,6 +145,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNd"; + private Output output; private ScatterNd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java index 11b1ddc0ef8..09192e601e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdAdd.java @@ -138,6 +138,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNdAdd"; + private Output outputRef; private ScatterNdAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java index 400f7e8b11c..98ce3cceba4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdNonAliasingAdd.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNdNonAliasingAdd"; + private Output output; private ScatterNdNonAliasingAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java index bbeafdaa08b..39327cd553d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdSub.java @@ -140,6 +140,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNdSub"; + private Output outputRef; private ScatterNdSub(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java index c715f6c1c92..87e5949c07c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdUpdate.java @@ -142,6 +142,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNdUpdate"; + private Output outputRef; private ScatterNdUpdate(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java index 5bdb1e39081..bad245da96e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterSub.java @@ -126,6 +126,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterSub"; + private Output outputRef; private ScatterSub(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java index fc548962aa7..9790e2fc934 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterUpdate.java @@ -130,6 +130,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterUpdate"; + private Output outputRef; private ScatterUpdate(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Select.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Select.java index fff55e1cf71..0aaa338eb1a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Select.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Select.java @@ -64,6 +64,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SelectV2"; + private Output output; private Select(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java index 04f1f5813b3..bf3db1cd88a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java @@ -94,6 +94,9 @@ public static Options clientTerminated(Boolean clientTerminated) { return new Options().clientTerminated(clientTerminated); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Send"; + private Send(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java index 1b13994eebc..c7e458931e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetDiff1d.java @@ -105,6 +105,9 @@ public Output idx() { return idx; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ListDiff"; + private Output out; private Output idx; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java index bd666afe4b2..2fcdf728542 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SetSize.java @@ -109,6 +109,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SetSize"; + private Output size; private SetSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java index aef7aec2816..5d613401fc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Shape.java @@ -87,6 +87,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Shape"; + private Output output; private Shape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java index 307e86b38a2..42340a8a83d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ShapeN.java @@ -85,6 +85,9 @@ public Iterator> iterator() { return (Iterator) output.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ShapeN"; + private List> output; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java index d79f317a591..4aaccae0f30 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Size.java @@ -88,6 +88,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Size"; + private Output output; private Size(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java index cef935f3389..9c63d317f98 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Skipgram.java @@ -176,6 +176,9 @@ public Output labels() { return labels; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Skipgram"; + private Output vocabWord; private Output vocabFreq; private Output wordsPerEpoch; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java index e141b0a2243..31edde00b81 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Slice.java @@ -77,6 +77,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Slice"; + private Output output; private Slice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Snapshot.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Snapshot.java index 8599dac37e6..7209bccaaee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Snapshot.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Snapshot.java @@ -61,6 +61,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Snapshot"; + private Output output; private Snapshot(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java index 80e9a72e37f..150e18256e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SpaceToBatchNd.java @@ -167,6 +167,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SpaceToBatchND"; + private Output output; private SpaceToBatchNd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java index f810c353427..fffd73f8ef5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Split.java @@ -75,6 +75,9 @@ public Iterator> iterator() { return (Iterator) output.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Split"; + private List> output; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java index 49646eecfc2..02b740c4d03 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SplitV.java @@ -79,6 +79,9 @@ public Iterator> iterator() { return (Iterator) output.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SplitV"; + private List> output; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Squeeze.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Squeeze.java index 5bc2ba50645..3f962adc789 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Squeeze.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Squeeze.java @@ -123,6 +123,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Squeeze"; + private Output output; private Squeeze(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stack.java index 6e98ac9ab4b..f70f50b0d2b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stack.java @@ -117,6 +117,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Pack"; + private Output output; private Stack(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java index c741a3ae391..408b6eca252 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java @@ -148,6 +148,9 @@ public static Options sharedName(String sharedName) { return new Options().sharedName(sharedName); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Stage"; + private Stage(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java index ebe153dab5e..755e7ab72d9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java @@ -142,6 +142,9 @@ public static Options sharedName(String sharedName) { return new Options().sharedName(sharedName); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StageClear"; + private StageClear(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java index 0d00e7f1db9..2126de722df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StagePeek.java @@ -166,6 +166,9 @@ public Iterator> iterator() { return (Iterator) values.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StagePeek"; + private List> values; private StagePeek(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java index a6069a51690..94ef566e708 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageSize.java @@ -156,6 +156,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StageSize"; + private Output size; private StageSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StopGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StopGradient.java index f884e7b98f7..b3c7d144ca5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StopGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StopGradient.java @@ -86,6 +86,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StopGradient"; + private Output output; private StopGradient(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java index e19467389c2..719fb0787c7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSlice.java @@ -304,6 +304,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StridedSlice"; + private Output output; private StridedSlice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java index e89e6657ad7..b6836c65fca 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceAssign.java @@ -187,6 +187,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StridedSliceAssign"; + private Output outputRef; private StridedSliceAssign(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java index f475104bc81..241d6d567e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StridedSliceGrad.java @@ -189,6 +189,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StridedSliceGrad"; + private Output output; private StridedSliceGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java index 4fe6e275bad..c153cdf4760 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Sum.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sum"; + private Output output; private Sum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java index b0abd4c0d55..191eb6292d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/SwitchCond.java @@ -72,6 +72,9 @@ public Output outputTrue() { return outputTrue; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Switch"; + private Output outputFalse; private Output outputTrue; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java index dedd9f6d588..43d9247fe21 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TemporaryVariable.java @@ -117,6 +117,9 @@ public Output asOutput() { return ref; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TemporaryVariable"; + private Output ref; private TemporaryVariable(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java index 24b9a610f1f..f34dc414484 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArray.java @@ -204,6 +204,9 @@ public Output flow() { return flow; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayV3"; + private Output handle; private Output flow; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java index fe58e12dd65..a16e856ae72 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java @@ -49,6 +49,9 @@ public static TensorArrayClose create(Scope scope, Operand handle) { return new TensorArrayClose(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayCloseV3"; + private TensorArrayClose(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java index 1c39d8922bb..e25b7a2f958 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayConcat.java @@ -126,6 +126,9 @@ public Output lengths() { return lengths; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayConcatV3"; + private Output value; private Output lengths; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java index cd697f550d3..13c6dce3122 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGather.java @@ -113,6 +113,9 @@ public Output asOutput() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayGatherV3"; + private Output value; private TensorArrayGather(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java index a4cf654bdcc..dca362c6934 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGrad.java @@ -102,6 +102,9 @@ public Output flowOut() { return flowOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayGradV3"; + private Output gradHandle; private Output flowOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java index 7ffbc95fac5..6128775dce6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayGradWithShape.java @@ -75,6 +75,9 @@ public Output flowOut() { return flowOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayGradWithShape"; + private Output gradHandle; private Output flowOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java index 05643c5d774..4b4be4ac089 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayPack.java @@ -101,6 +101,9 @@ public Output asOutput() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayPack"; + private Output value; private TensorArrayPack(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java index 22065261a6a..55cf48bb020 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayRead.java @@ -71,6 +71,9 @@ public Output asOutput() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayReadV3"; + private Output value; private TensorArrayRead(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java index f31f6b1428a..7b3eb238026 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayScatter.java @@ -70,6 +70,9 @@ public Output asOutput() { return flowOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayScatterV3"; + private Output flowOut; private TensorArrayScatter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java index 89642346996..3e7987bc388 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySize.java @@ -63,6 +63,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArraySizeV3"; + private Output size; private TensorArraySize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java index ca755929b77..d6aedc34a4a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArraySplit.java @@ -91,6 +91,9 @@ public Output asOutput() { return flowOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArraySplitV3"; + private Output flowOut; private TensorArraySplit(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java index 7d9e2b68ae1..9d2d92c4b85 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayUnpack.java @@ -64,6 +64,9 @@ public Output asOutput() { return flowOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayUnpack"; + private Output flowOut; private TensorArrayUnpack(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java index 8f5c56e524a..a83a07a458b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayWrite.java @@ -68,6 +68,9 @@ public Output asOutput() { return flowOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorArrayWriteV3"; + private Output flowOut; private TensorArrayWrite(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java index ec0df709465..e647f58b2f3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java @@ -48,6 +48,9 @@ public static TensorForestCreateTreeVariable create(Scope scope, Operand tree return new TensorForestCreateTreeVariable(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestCreateTreeVariable"; + private TensorForestCreateTreeVariable(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java index a7585be7577..5fb704b2361 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java @@ -48,6 +48,9 @@ public static TensorForestTreeDeserialize create(Scope scope, Operand treeHan return new TensorForestTreeDeserialize(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestTreeDeserialize"; + private TensorForestTreeDeserialize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java index d0c39ab0de9..4dfe64cdf19 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeIsInitializedOp.java @@ -59,6 +59,9 @@ public Output asOutput() { return isInitialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestTreeIsInitializedOp"; + private Output isInitialized; private TensorForestTreeIsInitializedOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java index 3b8dc79c2d9..3962212c5b7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreePredict.java @@ -63,6 +63,9 @@ public Output asOutput() { return logits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestTreePredict"; + private Output logits; private TensorForestTreePredict(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeResourceHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeResourceHandleOp.java index f56d34d8df0..c72860e1ea7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeResourceHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeResourceHandleOp.java @@ -110,6 +110,9 @@ public Output asOutput() { return (Output) resource; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestTreeResourceHandleOp"; + private Output resource; private TensorForestTreeResourceHandleOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java index 07838bb9028..d46e23a08ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSerialize.java @@ -59,6 +59,9 @@ public Output asOutput() { return treeConfig; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestTreeSerialize"; + private Output treeConfig; private TensorForestTreeSerialize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java index 03eddda317e..17cf008d470 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeSize.java @@ -59,6 +59,9 @@ public Output asOutput() { return treeSize; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorForestTreeSize"; + private Output treeSize; private TensorForestTreeSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java index 249e6a07b1d..2f1771797e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcat.java @@ -84,6 +84,9 @@ public Output lengths() { return lengths; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListConcatV2"; + private Output tensor; private Output lengths; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java index 3d685a10b34..fdca8e2d6cd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListConcatLists.java @@ -64,6 +64,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListConcatLists"; + private Output output; private TensorListConcatLists(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java index 4115dfebda5..2c3e3a5b90c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListElementShape.java @@ -68,6 +68,9 @@ public Output asOutput() { return elementShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListElementShape"; + private Output elementShape; private TensorListElementShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java index 8569b6b936c..97a45046767 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListFromTensor.java @@ -68,6 +68,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListFromTensor"; + private Output outputHandle; private TensorListFromTensor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java index b1c4aa520fb..dbb565a29a6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGather.java @@ -76,6 +76,9 @@ public Output asOutput() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListGather"; + private Output values; private TensorListGather(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java index 1ee5e084768..9af925e1425 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListGetItem.java @@ -67,6 +67,9 @@ public Output asOutput() { return item; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListGetItem"; + private Output item; private TensorListGetItem(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java index c901d022f64..d2dc93a6e06 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListLength.java @@ -62,6 +62,9 @@ public Output asOutput() { return length; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListLength"; + private Output length; private TensorListLength(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java index f4fb817b2fc..96fd3433e07 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPopBack.java @@ -75,6 +75,9 @@ public Output tensor() { return tensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListPopBack"; + private Output outputHandle; private Output tensor; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBack.java index 216a5d44c4b..3bde4981422 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBack.java @@ -68,6 +68,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListPushBack"; + private Output outputHandle; private TensorListPushBack(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBackBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBackBatch.java index 065e7d0b6ed..de772f74891 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBackBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListPushBackBatch.java @@ -61,6 +61,9 @@ public Output asOutput() { return (Output) outputHandles; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListPushBackBatch"; + private Output outputHandles; private TensorListPushBackBatch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java index 0c3294795c1..3f798e0f998 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListReserve.java @@ -72,6 +72,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListReserve"; + private Output handle; private TensorListReserve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java index fb0380aa5a7..4b70c31f277 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListResize.java @@ -68,6 +68,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListResize"; + private Output outputHandle; private TensorListResize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java index 12fd2667321..700e3e715a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatter.java @@ -80,6 +80,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListScatterV2"; + private Output outputHandle; private TensorListScatter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java index 4d8d27ed14a..4b91b1bc0b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListScatterIntoExistingList.java @@ -73,6 +73,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListScatterIntoExistingList"; + private Output outputHandle; private TensorListScatterIntoExistingList(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java index d570a3083a4..358397a927e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSetItem.java @@ -64,6 +64,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListSetItem"; + private Output outputHandle; private TensorListSetItem(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java index aed272880fb..e93635d7713 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListSplit.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListSplit"; + private Output outputHandle; private TensorListSplit(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java index 95075e1bb6d..c0ecf388b3d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorListStack.java @@ -108,6 +108,9 @@ public Output asOutput() { return tensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorListStack"; + private Output tensor; private TensorListStack(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdAdd.java index 77ffefde6f5..22c7462b994 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdAdd.java @@ -126,6 +126,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorScatterAdd"; + private Output output; private TensorScatterNdAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdSub.java index 307a2d4b801..14737a1fd95 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdSub.java @@ -126,6 +126,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorScatterSub"; + private Output output; private TensorScatterNdSub(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdUpdate.java index ac7d0635b66..7dff39f733f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdUpdate.java @@ -142,6 +142,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorScatterUpdate"; + private Output output; private TensorScatterNdUpdate(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java index d3bf1403073..c8c5e36e3c6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorStridedSliceUpdate.java @@ -187,6 +187,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorStridedSliceUpdate"; + private Output output; private TensorStridedSliceUpdate(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java index abd9d462993..d28588cada5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Tile.java @@ -91,6 +91,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Tile"; + private Output output; private Tile(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java index ef460f466cd..cbbf650a32f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Timestamp.java @@ -62,6 +62,9 @@ public Output asOutput() { return ts; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Timestamp"; + private Output ts; private Timestamp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java index acb69b45d48..3aa6c3a76ad 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TryRpc.java @@ -209,6 +209,9 @@ public Output statusMessage() { return statusMessage; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TryRpc"; + private Output response; private Output statusCode; private Output statusMessage; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java index 5cb23e99e7e..84d2063ae8c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unbatch.java @@ -140,6 +140,9 @@ public Output asOutput() { return unbatchedTensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Unbatch"; + private Output unbatchedTensor; private Unbatch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java index 1309c7e80c8..10062f204fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnbatchGrad.java @@ -136,6 +136,9 @@ public Output asOutput() { return batchedGrad; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnbatchGrad"; + private Output batchedGrad; private UnbatchGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java index 9f203229625..f3b8b04aead 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unique.java @@ -128,6 +128,9 @@ public Output idx() { return idx; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UniqueV2"; + private Output y; private Output idx; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java index a98e6736594..732d4432333 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UniqueWithCounts.java @@ -139,6 +139,9 @@ public Output count() { return count; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UniqueWithCountsV2"; + private Output y; private Output idx; private Output count; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java index e272d05ec2a..ecc073e37a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UnravelIndex.java @@ -87,6 +87,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnravelIndex"; + private Output output; private UnravelIndex(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstack.java index fcf759828b7..a48f57289ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstack.java @@ -117,6 +117,9 @@ public Iterator> iterator() { return (Iterator) output.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Unpack"; + private List> output; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java index 806d2d451c4..1878ce6fb88 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Unstage.java @@ -162,6 +162,9 @@ public Iterator> iterator() { return (Iterator) values.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Unstage"; + private List> values; private Unstage(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java index 7f978707572..c46fbcba4de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/UpperBound.java @@ -103,6 +103,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UpperBound"; + private Output output; private UpperBound(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java index 93a48a32093..945f05522c3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarHandleOp.java @@ -118,6 +118,9 @@ public Output asOutput() { return (Output) resource; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "VarHandleOp"; + private Output resource; private VarHandleOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java index 0aaf43a2f1b..f2c3df0456d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VarIsInitializedOp.java @@ -61,6 +61,9 @@ public Output asOutput() { return isInitialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "VarIsInitializedOp"; + private Output isInitialized; private VarIsInitializedOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java index 4f663493860..7353dfee688 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Variable.java @@ -127,6 +127,9 @@ public Output asOutput() { return ref; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "VariableV2"; + private Output ref; private Variable(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java index 76fb3c770d0..6573cb8de11 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/VariableShape.java @@ -87,6 +87,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "VariableShape"; + private Output output; private VariableShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java index 2e22fe12311..a1af7f9282a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Where.java @@ -120,6 +120,9 @@ public Output asOutput() { return index; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Where"; + private Output index; private Where(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ZerosLike.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ZerosLike.java index 60767fe78bf..5b9352ef6bd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ZerosLike.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ZerosLike.java @@ -62,6 +62,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ZerosLike"; + private Output y; private ZerosLike(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java index d912c335063..bd3d1a400f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousIterator.java @@ -76,6 +76,9 @@ public Output deleter() { return deleter; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AnonymousIteratorV2"; + private Output handle; private Output deleter; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMemoryCache.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMemoryCache.java index d76e74fdf14..4bc4523c1ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMemoryCache.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMemoryCache.java @@ -54,6 +54,9 @@ public Output deleter() { return deleter; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AnonymousMemoryCache"; + private Output handle; private Output deleter; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMultiDeviceIterator.java index 58ecad7ddce..bff57b33c8f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AnonymousMultiDeviceIterator.java @@ -81,6 +81,9 @@ public Output deleter() { return deleter; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AnonymousMultiDeviceIterator"; + private Output handle; private Output deleter; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AssertNextDataset.java index 0dff0c406cc..c2825e29b93 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AssertNextDataset.java @@ -88,6 +88,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssertNextDataset"; + private Output handle; private AssertNextDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AutoShardDataset.java index ab9d7753834..aca90031261 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/AutoShardDataset.java @@ -121,6 +121,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AutoShardDataset"; + private Output handle; private AutoShardDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java index f85b08a64c5..b0fd6ef0c0c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BatchDataset.java @@ -116,6 +116,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchDatasetV2"; + private Output handle; private BatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java index a92c52ce5fd..a3b95d92909 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/BytesProducedStatsDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BytesProducedStatsDataset"; + private Output handle; private BytesProducedStatsDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CSVDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CSVDataset.java index 2374a884850..f6c8f72232d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CSVDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CSVDataset.java @@ -87,6 +87,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CSVDataset"; + private Output handle; private CSVDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java index 798519589d0..07384fb6b3e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDataset.java @@ -83,6 +83,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CacheDataset"; + private Output handle; private CacheDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDatasetV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDatasetV2.java index f75ce86e7d0..ba370108e04 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDatasetV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/CacheDatasetV2.java @@ -78,6 +78,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CacheDatasetV2"; + private Output handle; private CacheDatasetV2(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ChooseFastestDataset.java index e0acfa0e521..a8d9ce445fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ChooseFastestDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ChooseFastestDataset"; + private Output handle; private ChooseFastestDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java index 0a9b49b8fe6..19cf0b4a706 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ConcatenateDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConcatenateDataset"; + private Output handle; private ConcatenateDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetCardinality.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetCardinality.java index 44d118b6d32..d851c211420 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetCardinality.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetCardinality.java @@ -62,6 +62,9 @@ public Output asOutput() { return cardinality; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DatasetCardinality"; + private Output cardinality; private DatasetCardinality(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetFromGraph.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetFromGraph.java index fa931c0cd72..6223baa7251 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetFromGraph.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetFromGraph.java @@ -63,6 +63,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DatasetFromGraph"; + private Output handle; private DatasetFromGraph(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java index 908aea9eb42..afaab68330a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToGraph.java @@ -114,6 +114,9 @@ public Output asOutput() { return graph; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DatasetToGraphV2"; + private Output graph; private DatasetToGraph(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java index a37b7e51a96..91fd5032439 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToSingleElement.java @@ -77,6 +77,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DatasetToSingleElement"; + private List> components; private DatasetToSingleElement(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java index 237f73b12a3..41617c9b690 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java @@ -51,6 +51,9 @@ public static DatasetToTfRecord create(Scope scope, Operand inputDataset, Ope return new DatasetToTfRecord(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DatasetToTFRecord"; + private DatasetToTfRecord(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java index 5a92fcb5f82..ec3629a8eb7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java @@ -48,6 +48,9 @@ public static DeleteIterator create(Scope scope, Operand handle, Operand d return new DeleteIterator(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeleteIterator"; + private DeleteIterator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java index 06077aae830..3c0f37dc409 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java @@ -46,6 +46,9 @@ public static DeleteMemoryCache create(Scope scope, Operand handle, Operand multiDevi return new DeleteMultiDeviceIterator(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeleteMultiDeviceIterator"; + private DeleteMultiDeviceIterator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java index fe69f57646a..32bd135c325 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DenseToSparseBatchDataset.java @@ -82,6 +82,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DenseToSparseBatchDataset"; + private Output handle; private DenseToSparseBatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java index a8c05b2d5ad..528fd09bc53 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java @@ -49,6 +49,9 @@ public static DeserializeIterator create(Scope scope, Operand resourceHandle, return new DeserializeIterator(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeserializeIterator"; + private DeserializeIterator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DirectedInterleaveDataset.java index b2031c8fc11..6883e2218d9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DirectedInterleaveDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DirectedInterleaveDataset"; + private Output handle; private DirectedInterleaveDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java index 2adf749ab8a..d6c2b576d7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FilterByLastComponentDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FilterByLastComponentDataset"; + private Output output; private FilterByLastComponentDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java index 47dbcf7c9ab..d1bfa77177b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/FixedLengthRecordDataset.java @@ -70,6 +70,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FixedLengthRecordDatasetV2"; + private Output handle; private FixedLengthRecordDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IgnoreErrorsDataset.java index e7a4c8d69dd..7ffca90d150 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IgnoreErrorsDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IgnoreErrorsDataset"; + private Output handle; private IgnoreErrorsDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java index 5ada431831c..45030001714 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/Iterator.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorV2"; + private Output handle; private Iterator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java index e394c9b347a..8264419635a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorFromStringHandle.java @@ -106,6 +106,9 @@ public Output asOutput() { return (Output) resourceHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorFromStringHandleV2"; + private Output resourceHandle; private IteratorFromStringHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetDevice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetDevice.java index d1ac024b6b2..d2aee159583 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetDevice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetDevice.java @@ -58,6 +58,9 @@ public Output asOutput() { return device; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorGetDevice"; + private Output device; private IteratorGetDevice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java index 2b8e80de880..b7be406e7bd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNext.java @@ -77,6 +77,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorGetNext"; + private List> components; private IteratorGetNext(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java index 41382765531..682b7ba6f35 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextAsOptional.java @@ -75,6 +75,9 @@ public Output asOutput() { return (Output) optional; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorGetNextAsOptional"; + private Output optional; private IteratorGetNextAsOptional(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java index 97f1ee35918..3cb4f072307 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorGetNextSync.java @@ -82,6 +82,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorGetNextSync"; + private List> components; private IteratorGetNextSync(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java index 19e8fcf2ed4..d715d8b8f2d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/IteratorToStringHandle.java @@ -60,6 +60,9 @@ public Output asOutput() { return stringHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IteratorToStringHandle"; + private Output stringHandle; private IteratorToStringHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LMDBDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LMDBDataset.java index 9d8725757db..d0057d60323 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LMDBDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LMDBDataset.java @@ -87,6 +87,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LMDBDataset"; + private Output handle; private LMDBDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java index 5391e373273..731b70867a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LatencyStatsDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LatencyStatsDataset"; + private Output handle; private LatencyStatsDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java index 9832f573eda..3fb21bd4a6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/LeakyReluGrad.java @@ -99,6 +99,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LeakyReluGrad"; + private Output backprops; private LeakyReluGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java index a2f380b0a49..685574a92d5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java @@ -51,6 +51,9 @@ public static MakeIterator create(Scope scope, Operand dataset, Operand it return new MakeIterator(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MakeIterator"; + private MakeIterator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java index 6a83be042c6..2c798a8d807 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MatchingFilesDataset.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatchingFilesDataset"; + private Output handle; private MatchingFilesDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MaxIntraOpParallelismDataset.java index 5f45170d93e..d7c67924b55 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MaxIntraOpParallelismDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MaxIntraOpParallelismDataset"; + private Output handle; private MaxIntraOpParallelismDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java index ca8566ff06f..53b6f10204d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ModelDataset.java @@ -129,6 +129,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ModelDataset"; + private Output handle; private ModelDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java index e4de4452636..a3dfeeb5665 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIterator.java @@ -85,6 +85,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MultiDeviceIterator"; + private Output handle; private MultiDeviceIterator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java index a80f5d9cdc2..a9b0b8ec07e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorFromStringHandle.java @@ -108,6 +108,9 @@ public Output asOutput() { return (Output) multiDeviceIterator; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MultiDeviceIteratorFromStringHandle"; + private Output multiDeviceIterator; private MultiDeviceIteratorFromStringHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java index 6f2eeb28daa..4781bc2d56e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorGetNextFromShard.java @@ -83,6 +83,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MultiDeviceIteratorGetNextFromShard"; + private List> components; private MultiDeviceIteratorGetNextFromShard(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java index fec8ee78e0b..a8e957c64b5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorInit.java @@ -64,6 +64,9 @@ public Output asOutput() { return incarnationId; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MultiDeviceIteratorInit"; + private Output incarnationId; private MultiDeviceIteratorInit(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java index 6f6045a848c..5697c7e7699 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MultiDeviceIteratorToStringHandle.java @@ -59,6 +59,9 @@ public Output asOutput() { return stringHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MultiDeviceIteratorToStringHandle"; + private Output stringHandle; private MultiDeviceIteratorToStringHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/NonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/NonSerializableDataset.java index e42a75dbf83..34043a14f9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/NonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/NonSerializableDataset.java @@ -73,6 +73,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NonSerializableDataset"; + private Output handle; private NonSerializableDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java index b7e557c816d..73e27b3ffc9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptimizeDataset.java @@ -117,6 +117,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OptimizeDataset"; + private Output handle; private OptimizeDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalFromValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalFromValue.java index 7832d3cbd58..a8fc1d4eaea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalFromValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalFromValue.java @@ -61,6 +61,9 @@ public Output asOutput() { return (Output) optional; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OptionalFromValue"; + private Output optional; private OptionalFromValue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java index c38d1177c28..8d3be67da03 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalGetValue.java @@ -77,6 +77,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OptionalGetValue"; + private List> components; private OptionalGetValue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java index d77f53ff5ca..af5900c38a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalHasValue.java @@ -59,6 +59,9 @@ public Output asOutput() { return hasValue; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OptionalHasValue"; + private Output hasValue; private OptionalHasValue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalNone.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalNone.java index ee871daef2e..fa3deabf28f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalNone.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/OptionalNone.java @@ -58,6 +58,9 @@ public Output asOutput() { return (Output) optional; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OptionalNone"; + private Output optional; private OptionalNone(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java index 65da0acf0c8..0685e5e9e74 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PaddedBatchDataset.java @@ -118,6 +118,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PaddedBatchDatasetV2"; + private Output handle; private PaddedBatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java index a56c2e70054..78995ad6d20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrefetchDataset.java @@ -131,6 +131,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PrefetchDataset"; + private Output handle; private PrefetchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrivateThreadPoolDataset.java index d637c1b081a..b06618ce07a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/PrivateThreadPoolDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PrivateThreadPoolDataset"; + private Output handle; private PrivateThreadPoolDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java index 6549d26c515..2b944e789dc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RandomDataset.java @@ -90,6 +90,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomDataset"; + private Output handle; private RandomDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java index 964d99e90e4..bc83590e03e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RangeDataset.java @@ -80,6 +80,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RangeDataset"; + private Output handle; private RangeDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RebatchDataset.java index baa5d56fea3..b5a21c7b6b8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RebatchDataset.java @@ -116,6 +116,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RebatchDataset"; + private Output handle; private RebatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java index 85d27c01df8..b832025853c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RepeatDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RepeatDataset"; + private Output handle; private RepeatDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SamplingDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SamplingDataset.java index b9a584f0ac0..7876fe27587 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SamplingDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SamplingDataset.java @@ -89,6 +89,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SamplingDataset"; + private Output handle; private SamplingDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SerializeIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SerializeIterator.java index 8dc271706f3..f051994e6f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SerializeIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SerializeIterator.java @@ -96,6 +96,9 @@ public Output asOutput() { return (Output) serialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SerializeIterator"; + private Output serialized; private SerializeIterator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java index b635c38df18..5181c0b1f71 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SetStatsAggregatorDataset.java @@ -80,6 +80,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SetStatsAggregatorDataset"; + private Output handle; private SetStatsAggregatorDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShardDataset.java index 71864817d93..62e18f3fadf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShardDataset.java @@ -113,6 +113,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ShardDataset"; + private Output handle; private ShardDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java index 67bf83b9b5d..9234210b6d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java @@ -90,6 +90,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ShuffleAndRepeatDataset"; + private Output handle; private ShuffleAndRepeatDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java index ccc51d49a37..a31b296950d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java @@ -78,6 +78,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ShuffleDatasetV2"; + private Output handle; private ShuffleDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java index 7de29fc4976..4e409b5a4ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SkipDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SkipDataset"; + private Output handle; private SkipDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SleepDataset.java index 23f6e214ec4..67605099106 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SleepDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SleepDataset"; + private Output handle; private SleepDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SlidingWindowDataset.java index 2eb9ac29140..89f440efd77 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SlidingWindowDataset.java @@ -84,6 +84,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SlidingWindowDataset"; + private Output handle; private SlidingWindowDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SnapshotDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SnapshotDataset.java index c166f4a4fd7..f6bc66e8297 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SnapshotDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SnapshotDataset.java @@ -363,6 +363,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SnapshotDataset"; + private Output handle; private SnapshotDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java index 9c45e99c9e3..fa5b61137ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SparseTensorSliceDataset.java @@ -64,6 +64,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseTensorSliceDataset"; + private Output handle; private SparseTensorSliceDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java index 9c8ef660137..59a0a47cd4d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/SqlDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SqlDataset"; + private Output handle; private SqlDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/StatsAggregatorHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/StatsAggregatorHandle.java index b96fcb2a07e..f510b437c7d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/StatsAggregatorHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/StatsAggregatorHandle.java @@ -110,6 +110,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatsAggregatorHandle"; + private Output handle; private StatsAggregatorHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java index 9fb312ddac7..3229f055924 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TakeDataset.java @@ -80,6 +80,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TakeDataset"; + private Output handle; private TakeDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java index 35f30f733ae..974f9562859 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorDataset.java @@ -68,6 +68,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorDataset"; + private Output handle; private TensorDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java index 45fc9c1eef5..0d0ca40de32 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TensorSliceDataset.java @@ -69,6 +69,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorSliceDataset"; + private Output handle; private TensorSliceDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java index 614d3bc2b4c..a80851bb2ed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TextLineDataset.java @@ -68,6 +68,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TextLineDataset"; + private Output handle; private TextLineDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java index ba889f8f3af..4795e623f82 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/TfRecordDataset.java @@ -69,6 +69,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TFRecordDataset"; + private Output handle; private TfRecordDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolDataset.java index b0443de050e..0b1ab263ffa 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ThreadPoolDataset"; + private Output handle; private ThreadPoolDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolHandle.java index 9c5ad809be0..6d9434cdff3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ThreadPoolHandle.java @@ -139,6 +139,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ThreadPoolHandle"; + private Output handle; private ThreadPoolHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java index e92d5a72d41..1bca9b693cc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnbatchDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnbatchDataset"; + private Output handle; private UnbatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UniqueDataset.java index fc7796939c2..817519ef6f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UniqueDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UniqueDataset"; + private Output handle; private UniqueDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnwrapDatasetVariant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnwrapDatasetVariant.java index 1ba2fb16027..d5125db92c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnwrapDatasetVariant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/UnwrapDatasetVariant.java @@ -58,6 +58,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnwrapDatasetVariant"; + private Output outputHandle; private UnwrapDatasetVariant(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java index c08069ff65f..d5edcc917d8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WindowDataset.java @@ -131,6 +131,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WindowDataset"; + private Output handle; private WindowDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WrapDatasetVariant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WrapDatasetVariant.java index 94ab283621f..bcea6df7895 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WrapDatasetVariant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/WrapDatasetVariant.java @@ -58,6 +58,9 @@ public Output asOutput() { return (Output) outputHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WrapDatasetVariant"; + private Output outputHandle; private WrapDatasetVariant(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java index 0829a5435c3..d4f54946f5f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ZipDataset.java @@ -82,6 +82,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ZipDataset"; + private Output handle; private ZipDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertCardinalityDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertCardinalityDataset.java index 271026cab6c..96c02bf5fc1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertCardinalityDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertCardinalityDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AssertCardinalityDataset"; + private Output handle; private AssertCardinalityDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertNextDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertNextDataset.java index 3ced6851207..cd0c5300df6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertNextDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AssertNextDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalAssertNextDataset"; + private Output handle; private AssertNextDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AutoShardDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AutoShardDataset.java index e1a8ffbffbe..3c1eb053091 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AutoShardDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/AutoShardDataset.java @@ -121,6 +121,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalAutoShardDataset"; + private Output handle; private AutoShardDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/BytesProducedStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/BytesProducedStatsDataset.java index aaf9e88a544..7fe1290b130 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/BytesProducedStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/BytesProducedStatsDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalBytesProducedStatsDataset"; + private Output handle; private BytesProducedStatsDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CSVDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CSVDataset.java index 764d02ab240..d0498612cde 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CSVDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CSVDataset.java @@ -86,6 +86,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalCSVDataset"; + private Output handle; private CSVDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ChooseFastestDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ChooseFastestDataset.java index a4335e73817..f731d948490 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ChooseFastestDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ChooseFastestDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalChooseFastestDataset"; + private Output handle; private ChooseFastestDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetCardinality.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetCardinality.java index 290bec84df8..81ca505ca91 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetCardinality.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetCardinality.java @@ -62,6 +62,9 @@ public Output asOutput() { return cardinality; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalDatasetCardinality"; + private Output cardinality; private DatasetCardinality(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java index 3bb2bc62b4b..ee0f494fa73 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java @@ -51,6 +51,9 @@ public static DatasetToTFRecord create(Scope scope, Operand inputDataset, Ope return new DatasetToTFRecord(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalDatasetToTFRecord"; + private DatasetToTFRecord(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DenseToSparseBatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DenseToSparseBatchDataset.java index 550ddde8c54..d464f422836 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DenseToSparseBatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DenseToSparseBatchDataset.java @@ -82,6 +82,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalDenseToSparseBatchDataset"; + private Output handle; private DenseToSparseBatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DirectedInterleaveDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DirectedInterleaveDataset.java index 62ba3a97b7f..63a06a16201 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DirectedInterleaveDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DirectedInterleaveDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalDirectedInterleaveDataset"; + private Output handle; private DirectedInterleaveDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IgnoreErrorsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IgnoreErrorsDataset.java index 77c750ea775..22d734831da 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IgnoreErrorsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IgnoreErrorsDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalIgnoreErrorsDataset"; + private Output handle; private IgnoreErrorsDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IteratorGetDevice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IteratorGetDevice.java index 2e19177a58f..7602eca94fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IteratorGetDevice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/IteratorGetDevice.java @@ -58,6 +58,9 @@ public Output asOutput() { return device; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalIteratorGetDevice"; + private Output device; private IteratorGetDevice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LatencyStatsDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LatencyStatsDataset.java index 6a54aa3586c..ad901295c28 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LatencyStatsDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LatencyStatsDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalLatencyStatsDataset"; + private Output handle; private LatencyStatsDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LmdbDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LmdbDataset.java index a7680b1cbe9..e6c489833af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LmdbDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/LmdbDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalLMDBDataset"; + private Output handle; private LmdbDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MatchingFilesDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MatchingFilesDataset.java index fcd78e95ee7..e2e29feeba4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MatchingFilesDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MatchingFilesDataset.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalMatchingFilesDataset"; + private Output handle; private MatchingFilesDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MaxIntraOpParallelismDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MaxIntraOpParallelismDataset.java index f7db67ed8a8..fb69729fab0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MaxIntraOpParallelismDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/MaxIntraOpParallelismDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalMaxIntraOpParallelismDataset"; + private Output handle; private MaxIntraOpParallelismDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/NonSerializableDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/NonSerializableDataset.java index 5d19824576d..9f07f37f804 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/NonSerializableDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/NonSerializableDataset.java @@ -73,6 +73,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalNonSerializableDataset"; + private Output handle; private NonSerializableDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ParseExampleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ParseExampleDataset.java index f87553458b2..4c24cf99558 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ParseExampleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ParseExampleDataset.java @@ -195,6 +195,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParseExampleDatasetV2"; + private Output handle; private ParseExampleDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/PrivateThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/PrivateThreadPoolDataset.java index 963fb615d65..a52fd41140e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/PrivateThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/PrivateThreadPoolDataset.java @@ -77,6 +77,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalPrivateThreadPoolDataset"; + private Output handle; private PrivateThreadPoolDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RandomDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RandomDataset.java index aed4a2b7ee4..8f9109ab3d5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RandomDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RandomDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalRandomDataset"; + private Output handle; private RandomDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RebatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RebatchDataset.java index cb33dd922e4..6111166128e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RebatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/RebatchDataset.java @@ -116,6 +116,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalRebatchDataset"; + private Output handle; private RebatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SetStatsAggregatorDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SetStatsAggregatorDataset.java index 705753f7835..e2535dcecd7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SetStatsAggregatorDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SetStatsAggregatorDataset.java @@ -80,6 +80,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalSetStatsAggregatorDataset"; + private Output handle; private SetStatsAggregatorDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SleepDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SleepDataset.java index e953bcf3949..97ddeb96999 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SleepDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SleepDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalSleepDataset"; + private Output handle; private SleepDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SlidingWindowDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SlidingWindowDataset.java index efe23924930..b8dbded85e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SlidingWindowDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SlidingWindowDataset.java @@ -84,6 +84,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalSlidingWindowDataset"; + private Output handle; private SlidingWindowDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SqlDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SqlDataset.java index ca01538ebdb..a68f46a5c08 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SqlDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/SqlDataset.java @@ -79,6 +79,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalSqlDataset"; + private Output handle; private SqlDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorHandle.java index e3749bfc10b..ec2e57ae4e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorHandle.java @@ -109,6 +109,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatsAggregatorHandleV2"; + private Output handle; private StatsAggregatorHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java index 44acd09f14c..ad63ff056d8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java @@ -47,6 +47,9 @@ public static StatsAggregatorSetSummaryWriter create(Scope scope, Operand sta return new StatsAggregatorSetSummaryWriter(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatsAggregatorSetSummaryWriter"; + private StatsAggregatorSetSummaryWriter(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSummary.java index 1a4d285dfe3..a24bfdbaada 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSummary.java @@ -58,6 +58,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalStatsAggregatorSummary"; + private Output summary; private StatsAggregatorSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolDataset.java index a7daf34b40f..e3fdc2b92cf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolDataset.java @@ -76,6 +76,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalThreadPoolDataset"; + private Output handle; private ThreadPoolDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolHandle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolHandle.java index 9a2527ec80e..15adc678211 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolHandle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/ThreadPoolHandle.java @@ -139,6 +139,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalThreadPoolHandle"; + private Output handle; private ThreadPoolHandle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UnbatchDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UnbatchDataset.java index 7fbcf202d9c..dfa611faa0e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UnbatchDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UnbatchDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalUnbatchDataset"; + private Output handle; private UnbatchDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UniqueDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UniqueDataset.java index 853152d2760..eb213348e72 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UniqueDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UniqueDataset.java @@ -74,6 +74,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExperimentalUniqueDataset"; + private Output handle; private UniqueDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/CheckNumerics.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/CheckNumerics.java index 1124b625a73..e26417c561d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/CheckNumerics.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/CheckNumerics.java @@ -68,6 +68,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CheckNumericsV2"; + private Output output; private CheckNumerics(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientIdentity.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientIdentity.java index 9840b9b1607..4214a50ab41 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientIdentity.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientIdentity.java @@ -64,6 +64,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DebugGradientIdentity"; + private Output output; private DebugGradientIdentity(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientRefIdentity.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientRefIdentity.java index 3746e4891f7..fb4a1d4cfef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientRefIdentity.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugGradientRefIdentity.java @@ -64,6 +64,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DebugGradientRefIdentity"; + private Output output; private DebugGradientRefIdentity(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugIdentity.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugIdentity.java index cf3503ffca3..812973efca5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugIdentity.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugIdentity.java @@ -191,6 +191,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DebugIdentityV2"; + private Output output; private DebugIdentity(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNanCount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNanCount.java index 12e011c67ac..30bc6931743 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNanCount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNanCount.java @@ -169,6 +169,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DebugNanCount"; + private Output output; private DebugNanCount(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNumericsSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNumericsSummary.java index 32e3291a909..85c20b1eef0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNumericsSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/debugging/DebugNumericsSummary.java @@ -241,6 +241,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DebugNumericSummaryV2"; + private Output output; private DebugNumericsSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java index 6a3cac82067..9d95a0ee6a0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/AsString.java @@ -193,6 +193,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AsString"; + private Output output; private AsString(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java index 5acd9c542f6..49699f07c8c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Cast.java @@ -98,6 +98,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cast"; + private Output y; private Cast(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java index a342009290f..5e8918785a0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/Complex.java @@ -82,6 +82,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Complex"; + private Output out; private Complex(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/ToBool.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/ToBool.java index 2130c1279a6..72b3d46d00c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/ToBool.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/dtypes/ToBool.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ToBool"; + private Output output; private ToBool(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesAggregateStats.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesAggregateStats.java index 8a89bc639ba..ac772ea4ae0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesAggregateStats.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesAggregateStats.java @@ -73,6 +73,9 @@ public Output asOutput() { return statsSummary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesAggregateStats"; + private Output statsSummary; private BoostedTreesAggregateStats(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesBucketize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesBucketize.java index 1af298bc2c1..6d57706c19e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesBucketize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesBucketize.java @@ -71,6 +71,9 @@ public Iterator> iterator() { return (Iterator) buckets.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesBucketize"; + private List> buckets; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplit.java index 20de330cd53..41f1d3a6910 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplit.java @@ -154,6 +154,9 @@ public Output splitWithDefaultDirections() { return splitWithDefaultDirections; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesCalculateBestFeatureSplit"; + private Output nodeIds; private Output gains; private Output featureDimensions; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplitV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplitV2.java index 69fe748a5cd..903a02fd65b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplitV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestFeatureSplitV2.java @@ -132,6 +132,9 @@ public Output splitWithDefaultDirections() { return splitWithDefaultDirections; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesCalculateBestFeatureSplitV2"; + private Output nodeIds; private Output gains; private Output featureIds; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestGainsPerFeature.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestGainsPerFeature.java index fdf87628efb..daade3457ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestGainsPerFeature.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCalculateBestGainsPerFeature.java @@ -107,6 +107,9 @@ public List> rightNodeContribsList() { return rightNodeContribsList; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesCalculateBestGainsPerFeature"; + private List> nodeIdsList; private List> gainsList; private List> thresholdsList; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCenterBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCenterBias.java index e1af20a1f14..7359b6039e2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCenterBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCenterBias.java @@ -68,6 +68,9 @@ public Output asOutput() { return continueCentering; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesCenterBias"; + private Output continueCentering; private BoostedTreesCenterBias(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java index c0c9075f784..04613900567 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java @@ -51,6 +51,9 @@ public static BoostedTreesCreateEnsemble create(Scope scope, Operand treeEnse return new BoostedTreesCreateEnsemble(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesCreateEnsemble"; + private BoostedTreesCreateEnsemble(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java index d0ac0b0224d..59362970a58 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java @@ -85,6 +85,9 @@ public static Options maxElements(Long maxElements) { return new Options().maxElements(maxElements); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesCreateQuantileStreamResource"; + private BoostedTreesCreateQuantileStreamResource(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java index 8780ca997bd..6fd83d5785d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java @@ -53,6 +53,9 @@ public static BoostedTreesDeserializeEnsemble create(Scope scope, Operand tre return new BoostedTreesDeserializeEnsemble(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesDeserializeEnsemble"; + private BoostedTreesDeserializeEnsemble(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesEnsembleResourceHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesEnsembleResourceHandleOp.java index d297ccebdb2..13522dd2fd0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesEnsembleResourceHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesEnsembleResourceHandleOp.java @@ -110,6 +110,9 @@ public Output asOutput() { return (Output) resource; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesEnsembleResourceHandleOp"; + private Output resource; private BoostedTreesEnsembleResourceHandleOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesExampleDebugOutputs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesExampleDebugOutputs.java index 4902a23c9eb..8618f401ce4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesExampleDebugOutputs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesExampleDebugOutputs.java @@ -71,6 +71,9 @@ public Output asOutput() { return examplesDebugOutputsSerialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesExampleDebugOutputs"; + private Output examplesDebugOutputsSerialized; private BoostedTreesExampleDebugOutputs(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesFlushQuantileSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesFlushQuantileSummaries.java index d520766a041..d22acc2ca1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesFlushQuantileSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesFlushQuantileSummaries.java @@ -68,6 +68,9 @@ public Iterator> iterator() { return (Iterator) summaries.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesFlushQuantileSummaries"; + private List> summaries; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesGetEnsembleStates.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesGetEnsembleStates.java index 06ef0f63bfc..36e8eb3c4be 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesGetEnsembleStates.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesGetEnsembleStates.java @@ -84,6 +84,9 @@ public Output lastLayerNodesRange() { return lastLayerNodesRange; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesGetEnsembleStates"; + private Output stampToken; private Output numTrees; private Output numFinalizedTrees; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeQuantileSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeQuantileSummaries.java index 6bdbd64dd7a..cf4156bb2ce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeQuantileSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeQuantileSummaries.java @@ -72,6 +72,9 @@ public Iterator> iterator() { return (Iterator) summaries.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesMakeQuantileSummaries"; + private List> summaries; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeStatsSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeStatsSummary.java index ed276f08b20..626e05a6f54 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeStatsSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesMakeStatsSummary.java @@ -73,6 +73,9 @@ public Output asOutput() { return statsSummary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesMakeStatsSummary"; + private Output statsSummary; private BoostedTreesMakeStatsSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesPredict.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesPredict.java index fc12d1cc2ed..e9c7d4a2be1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesPredict.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesPredict.java @@ -70,6 +70,9 @@ public Output asOutput() { return logits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesPredict"; + private Output logits; private BoostedTreesPredict(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java index 08bda03ea19..76480c4be6d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java @@ -53,6 +53,9 @@ public static BoostedTreesQuantileStreamResourceAddSummaries create(Scope scope, return new BoostedTreesQuantileStreamResourceAddSummaries(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesQuantileStreamResourceAddSummaries"; + private BoostedTreesQuantileStreamResourceAddSummaries(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java index 58850d3e981..82066e267d2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java @@ -51,6 +51,9 @@ public static BoostedTreesQuantileStreamResourceDeserialize create(Scope scope, return new BoostedTreesQuantileStreamResourceDeserialize(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesQuantileStreamResourceDeserialize"; + private BoostedTreesQuantileStreamResourceDeserialize(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java index 4f3c4f561b8..359b7b63ff6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java @@ -94,6 +94,9 @@ public static Options generateQuantiles(Boolean generateQuantiles) { return new Options().generateQuantiles(generateQuantiles); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesQuantileStreamResourceFlush"; + private BoostedTreesQuantileStreamResourceFlush(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java index 711e3f6acd6..5d421152254 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceGetBucketBoundaries.java @@ -68,6 +68,9 @@ public Iterator> iterator() { return (Iterator) bucketBoundaries.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesQuantileStreamResourceGetBucketBoundaries"; + private List> bucketBoundaries; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceHandleOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceHandleOp.java index 72898030449..db925d767f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceHandleOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceHandleOp.java @@ -110,6 +110,9 @@ public Output asOutput() { return (Output) resource; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesQuantileStreamResourceHandleOp"; + private Output resource; private BoostedTreesQuantileStreamResourceHandleOp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSerializeEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSerializeEnsemble.java index 8bf4df8541e..287c9e9054a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSerializeEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSerializeEnsemble.java @@ -62,6 +62,9 @@ public Output treeEnsembleSerialized() { return treeEnsembleSerialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesSerializeEnsemble"; + private Output stampToken; private Output treeEnsembleSerialized; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseAggregateStats.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseAggregateStats.java index 23ef1f4f01e..3923ac0e905 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseAggregateStats.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseAggregateStats.java @@ -98,6 +98,9 @@ public Output statsSummaryShape() { return statsSummaryShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesSparseAggregateStats"; + private Output statsSummaryIndices; private Output statsSummaryValues; private Output statsSummaryShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseCalculateBestFeatureSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseCalculateBestFeatureSplit.java index 48afc375b67..b2f2dd1eebf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseCalculateBestFeatureSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesSparseCalculateBestFeatureSplit.java @@ -159,6 +159,9 @@ public Output splitWithDefaultDirections() { return splitWithDefaultDirections; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesSparseCalculateBestFeatureSplit"; + private Output nodeIds; private Output gains; private Output featureDimensions; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesTrainingPredict.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesTrainingPredict.java index 2dd38c35c59..a81509950b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesTrainingPredict.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesTrainingPredict.java @@ -87,6 +87,9 @@ public Output nodeIds() { return nodeIds; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesTrainingPredict"; + private Output partialLogits; private Output treeIds; private Output nodeIds; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java index 05f2d9c1357..c1b7bb44559 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java @@ -76,6 +76,9 @@ public static BoostedTreesUpdateEnsemble create(Scope scope, Operand treeEnse return new BoostedTreesUpdateEnsemble(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesUpdateEnsemble"; + private BoostedTreesUpdateEnsemble(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java index 0e7c81ed3a1..afd9d646c2f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java @@ -115,6 +115,9 @@ public static Options logitsDimension(Long logitsDimension) { return new Options().logitsDimension(logitsDimension); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BoostedTreesUpdateEnsembleV2"; + private BoostedTreesUpdateEnsembleV2(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesEnsembleInitialized.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesEnsembleInitialized.java index f7f78393822..7bf185408df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesEnsembleInitialized.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesEnsembleInitialized.java @@ -59,6 +59,9 @@ public Output asOutput() { return isInitialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IsBoostedTreesEnsembleInitialized"; + private Output isInitialized; private IsBoostedTreesEnsembleInitialized(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesQuantileStreamResourceInitialized.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesQuantileStreamResourceInitialized.java index 6561f2d1eea..66ad4435dfd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesQuantileStreamResourceInitialized.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/IsBoostedTreesQuantileStreamResourceInitialized.java @@ -61,6 +61,9 @@ public Output asOutput() { return isInitialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IsBoostedTreesQuantileStreamResourceInitialized"; + private Output isInitialized; private IsBoostedTreesQuantileStreamResourceInitialized(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java index acca1abe88b..ab5b3f32e61 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustContrast.java @@ -76,6 +76,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AdjustContrastv2"; + private Output output; private AdjustContrast(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java index 39d96bec97e..203980f79f8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustHue.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AdjustHue"; + private Output output; private AdjustHue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java index 3fa15fc4716..393dd196f43 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/AdjustSaturation.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AdjustSaturation"; + private Output output; private AdjustSaturation(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CombinedNonMaxSuppression.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CombinedNonMaxSuppression.java index 1f1926163fc..42bf54e7143 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CombinedNonMaxSuppression.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CombinedNonMaxSuppression.java @@ -178,6 +178,9 @@ public Output validDetections() { return validDetections; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CombinedNonMaxSuppression"; + private Output nmsedBoxes; private Output nmsedScores; private Output nmsedClasses; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java index 19c93f95d4b..f0048c1014b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResize.java @@ -156,6 +156,9 @@ public Output asOutput() { return crops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CropAndResize"; + private Output crops; private CropAndResize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java index e29c2a2c159..67263c1e576 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradBoxes.java @@ -116,6 +116,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CropAndResizeGradBoxes"; + private Output output; private CropAndResizeGradBoxes(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java index 30b7f0b7ddf..6a6415f879d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/CropAndResizeGradImage.java @@ -122,6 +122,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CropAndResizeGradImage"; + private Output output; private CropAndResizeGradImage(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java index c7191af839a..0c2ac4b1471 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeAndCropJpeg.java @@ -232,6 +232,9 @@ public Output asOutput() { return image; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeAndCropJpeg"; + private Output image; private DecodeAndCropJpeg(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java index 23ade8ab9e9..3801822db4e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeBmp.java @@ -109,6 +109,9 @@ public Output asOutput() { return image; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeBmp"; + private Output image; private DecodeBmp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java index c61b81f21c2..6a06a26ee94 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeGif.java @@ -70,6 +70,9 @@ public Output asOutput() { return image; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeGif"; + private Output image; private DecodeGif(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java index 4b30ea87bec..d45e802eb9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodeJpeg.java @@ -229,6 +229,9 @@ public Output asOutput() { return image; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeJpeg"; + private Output image; private DecodeJpeg(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java index 6ff272fc487..eb9ef2a8bee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DecodePng.java @@ -139,6 +139,9 @@ public Output asOutput() { return image; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodePng"; + private Output image; private DecodePng(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java index 08d460a2985..ba674376d07 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/DrawBoundingBoxes.java @@ -82,6 +82,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DrawBoundingBoxesV2"; + private Output output; private DrawBoundingBoxes(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java index a08e1d0fbc8..920961e1115 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpeg.java @@ -275,6 +275,9 @@ public Output asOutput() { return contents; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EncodeJpeg"; + private Output contents; private EncodeJpeg(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java index 8c9fe1afd49..c07fc341f00 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodeJpegVariableQuality.java @@ -68,6 +68,9 @@ public Output asOutput() { return contents; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EncodeJpegVariableQuality"; + private Output contents; private EncodeJpegVariableQuality(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java index 0d01ff0f6f4..cf5b5a0ebc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/EncodePng.java @@ -116,6 +116,9 @@ public Output asOutput() { return contents; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EncodePng"; + private Output contents; private EncodePng(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java index 74ac3be5a05..412daf7387e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java @@ -199,6 +199,9 @@ public Output asOutput() { return glimpse; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExtractGlimpse"; + private Output glimpse; private ExtractGlimpse(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java index 59b3af03fbb..d02d422a005 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractImagePatches.java @@ -92,6 +92,9 @@ public Output asOutput() { return patches; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExtractImagePatches"; + private Output patches; private ExtractImagePatches(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java index 3570c3a6dda..dfa8c4ea7b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractJpegShape.java @@ -83,6 +83,9 @@ public Output asOutput() { return imageShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ExtractJpegShape"; + private Output imageShape; private ExtractJpegShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/GenerateBoundingBoxProposals.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/GenerateBoundingBoxProposals.java index 16d71155a66..1f1563c7d43 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/GenerateBoundingBoxProposals.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/GenerateBoundingBoxProposals.java @@ -123,6 +123,9 @@ public Output roiProbabilities() { return roiProbabilities; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GenerateBoundingBoxProposals"; + private Output rois; private Output roiProbabilities; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java index 6a74b96f923..fb752a83518 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/HsvToRgb.java @@ -69,6 +69,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "HSVToRGB"; + private Output output; private HsvToRgb(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ImageProjectiveTransformV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ImageProjectiveTransformV2.java index 478d41f7943..3363d6a9804 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ImageProjectiveTransformV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ImageProjectiveTransformV2.java @@ -113,6 +113,9 @@ public Output asOutput() { return transformedImages; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ImageProjectiveTransformV2"; + private Output transformedImages; private ImageProjectiveTransformV2(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NearestNeighbors.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NearestNeighbors.java index 55eab58c7fc..f3ad7cb890b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NearestNeighbors.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NearestNeighbors.java @@ -73,6 +73,9 @@ public Output nearestCenterDistances() { return nearestCenterDistances; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NearestNeighbors"; + private Output nearestCenterIndices; private Output nearestCenterDistances; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java index ee83c1d3f06..0745299e34f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppression.java @@ -153,6 +153,9 @@ public Output validOutputs() { return validOutputs; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NonMaxSuppressionV5"; + private Output selectedIndices; private Output selectedScores; private Output validOutputs; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java index 97e14206922..073aee26ff9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/NonMaxSuppressionWithOverlaps.java @@ -90,6 +90,9 @@ public Output asOutput() { return selectedIndices; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NonMaxSuppressionWithOverlaps"; + private Output selectedIndices; private NonMaxSuppressionWithOverlaps(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java index 9903ce2c265..7eb6d8a3a92 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/QuantizedResizeBilinear.java @@ -136,6 +136,9 @@ public Output outMax() { return outMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedResizeBilinear"; + private Output resizedImages; private Output outMin; private Output outMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java index 855a60036d9..47d03d63187 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RandomCrop.java @@ -130,6 +130,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomCrop"; + private Output output; private RandomCrop(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java index dd7d7335570..60d1e473ef0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeArea.java @@ -115,6 +115,9 @@ public Output asOutput() { return resizedImages; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeArea"; + private Output resizedImages; private ResizeArea(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java index 23fa5034437..2519eaa6ea9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubic.java @@ -124,6 +124,9 @@ public Output asOutput() { return resizedImages; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeBicubic"; + private Output resizedImages; private ResizeBicubic(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java index d7cc678f8a4..96296cdf33f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBicubicGrad.java @@ -123,6 +123,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeBicubicGrad"; + private Output output; private ResizeBicubicGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java index fb01887d6f5..d0c28fed013 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinear.java @@ -124,6 +124,9 @@ public Output asOutput() { return resizedImages; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeBilinear"; + private Output resizedImages; private ResizeBilinear(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java index 85fb0ff85e6..b8aef51ba30 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeBilinearGrad.java @@ -123,6 +123,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeBilinearGrad"; + private Output output; private ResizeBilinearGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java index 9183dd63544..dd7865841de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighbor.java @@ -123,6 +123,9 @@ public Output asOutput() { return resizedImages; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeNearestNeighbor"; + private Output resizedImages; private ResizeNearestNeighbor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java index c8fb4f704f8..4897c0f9dc6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ResizeNearestNeighborGrad.java @@ -122,6 +122,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResizeNearestNeighborGrad"; + private Output output; private ResizeNearestNeighborGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java index a0fdcc30ff8..acee7a6061e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/RgbToHsv.java @@ -83,6 +83,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RGBToHSV"; + private Output output; private RgbToHsv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java index 8281880a8b0..7f83b2ee84c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/SampleDistortedBoundingBox.java @@ -275,6 +275,9 @@ public Output bboxes() { return bboxes; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SampleDistortedBoundingBoxV2"; + private Output begin; private Output size; private Output bboxes; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslate.java index bd4cc964f2f..26bf544be2e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslate.java @@ -120,6 +120,9 @@ public Output asOutput() { return resizedImages; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScaleAndTranslate"; + private Output resizedImages; private ScaleAndTranslate(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslateGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslateGrad.java index 8ab90449e1f..4b8d9b0fc4b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslateGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ScaleAndTranslateGrad.java @@ -119,6 +119,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScaleAndTranslateGrad"; + private Output output; private ScaleAndTranslateGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java index 7abe6aaa1f1..db026fd820c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeBase64.java @@ -63,6 +63,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeBase64"; + private Output output; private DecodeBase64(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java index 01a55de64ca..745dba6d063 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCompressed.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeCompressed"; + private Output output; private DecodeCompressed(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java index 4825645c0eb..6b417cb8717 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeCsv.java @@ -174,6 +174,9 @@ public Iterator> iterator() { return (Iterator) output.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeCSV"; + private List> output; private DecodeCsv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java index 0f5b155c267..f3da58ca98d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeJsonExample.java @@ -69,6 +69,9 @@ public Output asOutput() { return binaryExamples; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeJSONExample"; + private Output binaryExamples; private DecodeJsonExample(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodePaddedRaw.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodePaddedRaw.java index 137f69f7015..820b0077ba5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodePaddedRaw.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodePaddedRaw.java @@ -109,6 +109,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodePaddedRaw"; + private Output output; private DecodePaddedRaw(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java index d42e9e79d6c..dfdabfdb466 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DecodeRaw.java @@ -106,6 +106,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DecodeRaw"; + private Output output; private DecodeRaw(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java index 1d80fd486df..8582681c073 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/DeserializeManySparse.java @@ -116,6 +116,9 @@ public Output sparseShape() { return sparseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeserializeManySparse"; + private Output sparseIndices; private Output sparseValues; private Output sparseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java index 9dbfbb079b2..ddb331b4a48 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/EncodeBase64.java @@ -101,6 +101,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EncodeBase64"; + private Output output; private EncodeBase64(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java index 95c5bfcd712..842985b49e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FifoQueue.java @@ -175,6 +175,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FIFOQueueV2"; + private Output handle; private FifoQueue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FixedLengthRecordReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FixedLengthRecordReader.java index a091f665ba4..3678b8190b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FixedLengthRecordReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/FixedLengthRecordReader.java @@ -198,6 +198,9 @@ public Output asOutput() { return (Output) readerHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FixedLengthRecordReaderV2"; + private Output readerHandle; private FixedLengthRecordReader(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/IdentityReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/IdentityReader.java index af9a6ca34e7..99ae027a82e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/IdentityReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/IdentityReader.java @@ -119,6 +119,9 @@ public Output asOutput() { return (Output) readerHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IdentityReaderV2"; + private Output readerHandle; private IdentityReader(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java index aa8c476a0c1..b3b10b2809c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/LmdbReader.java @@ -115,6 +115,9 @@ public Output asOutput() { return readerHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LMDBReader"; + private Output readerHandle; private LmdbReader(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java index 5c9d5bcd681..ed2b33adea3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/MatchingFiles.java @@ -64,6 +64,9 @@ public Output asOutput() { return filenames; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatchingFiles"; + private Output filenames; private MatchingFiles(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java index 516ac396ad7..b72d8188038 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PaddingFifoQueue.java @@ -187,6 +187,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PaddingFIFOQueueV2"; + private Output handle; private PaddingFifoQueue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java index 1c0b73c5cca..bd8f0f4a603 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseExample.java @@ -166,6 +166,9 @@ public List> raggedRowSplits() { return raggedRowSplits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParseExampleV2"; + private List> sparseIndices; private List> sparseValues; private List> sparseShapes; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java index d7d83defcca..8720b3d160e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSequenceExample.java @@ -358,6 +358,9 @@ public List> featureListRaggedInnerSplits() { return featureListRaggedInnerSplits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParseSequenceExampleV2"; + private List> contextSparseIndices; private List> contextSparseValues; private List> contextSparseShapes; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java index 95e8f11018b..2c09ba8ac4c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleExample.java @@ -129,6 +129,9 @@ public List> denseValues() { return denseValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParseSingleExample"; + private List> sparseIndices; private List> sparseValues; private List> sparseShapes; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java index 4457e099ea8..bb1e1eaa576 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseSingleSequenceExample.java @@ -239,6 +239,9 @@ public List> featureListDenseValues() { return featureListDenseValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParseSingleSequenceExample"; + private List> contextSparseIndices; private List> contextSparseValues; private List> contextSparseShapes; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java index bf2a8e62c2d..bebdc1b4419 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ParseTensor.java @@ -67,6 +67,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParseTensor"; + private Output output; private ParseTensor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java index 587994bba0f..569d4ae7eb3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/PriorityQueue.java @@ -161,6 +161,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PriorityQueueV2"; + private Output handle; private PriorityQueue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java index d2bbb349ec0..fb55f708140 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java @@ -88,6 +88,9 @@ public static Options cancelPendingEnqueues(Boolean cancelPendingEnqueues) { return new Options().cancelPendingEnqueues(cancelPendingEnqueues); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueCloseV2"; + private QueueClose(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java index d5c2f67db77..b74fb3ad3e8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeue.java @@ -116,6 +116,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueDequeueV2"; + private List> components; private QueueDequeue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java index f705e660c1b..2906fe6543c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueMany.java @@ -126,6 +126,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueDequeueManyV2"; + private List> components; private QueueDequeueMany(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java index cd1406318ef..51af788104c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueDequeueUpTo.java @@ -130,6 +130,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueDequeueUpToV2"; + private List> components; private QueueDequeueUpTo(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java index 8bbe35eeada..546981e8abf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java @@ -93,6 +93,9 @@ public static Options timeoutMs(Long timeoutMs) { return new Options().timeoutMs(timeoutMs); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueEnqueueV2"; + private QueueEnqueue(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java index 8f973f62260..48df5d3b9d3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java @@ -98,6 +98,9 @@ public static Options timeoutMs(Long timeoutMs) { return new Options().timeoutMs(timeoutMs); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueEnqueueManyV2"; + private QueueEnqueueMany(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java index 0326250f5a5..895965a3c6c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueIsClosed.java @@ -62,6 +62,9 @@ public Output asOutput() { return isClosed; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueIsClosedV2"; + private Output isClosed; private QueueIsClosed(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java index cf904be8436..cefc1b3fd11 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueSize.java @@ -60,6 +60,9 @@ public Output asOutput() { return size; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QueueSizeV2"; + private Output size; private QueueSize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java index ced52fc58cd..cdde1debc95 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/RandomShuffleQueue.java @@ -238,6 +238,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomShuffleQueueV2"; + private Output handle; private RandomShuffleQueue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java index 9ba806c69ae..7109022751a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReadFile.java @@ -59,6 +59,9 @@ public Output asOutput() { return contents; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReadFile"; + private Output contents; private ReadFile(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java index 51ec23956fb..8e4cb9c5692 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumRecordsProduced.java @@ -62,6 +62,9 @@ public Output asOutput() { return recordsProduced; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderNumRecordsProducedV2"; + private Output recordsProduced; private ReaderNumRecordsProduced(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java index 848f1602cb3..bbd6fc8075c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderNumWorkUnitsCompleted.java @@ -59,6 +59,9 @@ public Output asOutput() { return unitsCompleted; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderNumWorkUnitsCompletedV2"; + private Output unitsCompleted; private ReaderNumWorkUnitsCompleted(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java index 33e1e7135e5..9b7110b10ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRead.java @@ -68,6 +68,9 @@ public Output value() { return value; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderReadV2"; + private Output key; private Output value; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java index 897ca83dc9f..e22d5b95576 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReadUpTo.java @@ -72,6 +72,9 @@ public Output values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderReadUpToV2"; + private Output keys; private Output values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java index f99a25a836a..6e3de01134b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java @@ -46,6 +46,9 @@ public static ReaderReset create(Scope scope, Operand readerHandle) { return new ReaderReset(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderResetV2"; + private ReaderReset(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java index 359c4d63284..b0abea1257c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java @@ -53,6 +53,9 @@ public static ReaderRestoreState create(Scope scope, Operand readerHandle, Op return new ReaderRestoreState(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderRestoreStateV2"; + private ReaderRestoreState(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java index d10ce99d2a8..72b927ed171 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderSerializeState.java @@ -62,6 +62,9 @@ public Output asOutput() { return state; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReaderSerializeStateV2"; + private Output state; private ReaderSerializeState(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java index 5cb65e873cc..0afbdcd6edd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeManySparse.java @@ -93,6 +93,9 @@ public Output asOutput() { return serializedSparse; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SerializeManySparse"; + private Output serializedSparse; private SerializeManySparse(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java index d97317b00d4..2d8fc7838e4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeSparse.java @@ -85,6 +85,9 @@ public Output asOutput() { return serializedSparse; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SerializeSparse"; + private Output serializedSparse; private SerializeSparse(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java index 07935a57d3f..d68320b85e3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/SerializeTensor.java @@ -61,6 +61,9 @@ public Output asOutput() { return serialized; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SerializeTensor"; + private Output serialized; private SerializeTensor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java index 3febe213066..88b422a5f6d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilename.java @@ -66,6 +66,9 @@ public Output asOutput() { return filename; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ShardedFilename"; + private Output filename; private ShardedFilename(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java index 4c414afa0a4..f04c0cf1a58 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ShardedFilespec.java @@ -62,6 +62,9 @@ public Output asOutput() { return filename; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ShardedFilespec"; + private Output filename; private ShardedFilespec(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TextLineReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TextLineReader.java index 963710a3708..90bf079d2cf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TextLineReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TextLineReader.java @@ -135,6 +135,9 @@ public Output asOutput() { return (Output) readerHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TextLineReaderV2"; + private Output readerHandle; private TextLineReader(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TfRecordReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TfRecordReader.java index 98d58836334..a12145e7972 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TfRecordReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/TfRecordReader.java @@ -135,6 +135,9 @@ public Output asOutput() { return (Output) readerHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TFRecordReaderV2"; + private Output readerHandle; private TfRecordReader(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WholeFileReader.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WholeFileReader.java index 444b36aec72..8cab4f9b09e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WholeFileReader.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WholeFileReader.java @@ -119,6 +119,9 @@ public Output asOutput() { return (Output) readerHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WholeFileReaderV2"; + private Output readerHandle; private WholeFileReader(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java index 2d8f1ed4a1b..d9fba243fc3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java @@ -51,6 +51,9 @@ public static WriteFile create(Scope scope, Operand filename, Operand asOutput() { return band; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixBandPart"; + private Output band; private BandPart(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java index 988d5a23c7f..733139f4359 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholesky.java @@ -60,6 +60,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchCholesky"; + private Output output; private BatchCholesky(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java index 71b533674a8..d56f45e8abf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchCholeskyGrad.java @@ -62,6 +62,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchCholeskyGrad"; + private Output output; private BatchCholeskyGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java index 7b0a946e593..8c990a8a71c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixBandPart.java @@ -64,6 +64,9 @@ public Output asOutput() { return band; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixBandPart"; + private Output band; private BatchMatrixBandPart(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDeterminant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDeterminant.java index c56dcebd836..f513e9f0057 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDeterminant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDeterminant.java @@ -59,6 +59,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixDeterminant"; + private Output output; private BatchMatrixDeterminant(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiag.java index 3cb73f6e451..b3f9071f9f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiag.java @@ -59,6 +59,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixDiag"; + private Output output; private BatchMatrixDiag(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiagPart.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiagPart.java index 99207f83e9c..47f78ed623d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiagPart.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixDiagPart.java @@ -59,6 +59,9 @@ public Output asOutput() { return diagonal; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixDiagPart"; + private Output diagonal; private BatchMatrixDiagPart(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java index bf8ca469f95..36bbee414e9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixInverse.java @@ -94,6 +94,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixInverse"; + private Output output; private BatchMatrixInverse(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSetDiag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSetDiag.java index 7f8508edbb0..d83ee0194e7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSetDiag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSetDiag.java @@ -61,6 +61,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixSetDiag"; + private Output output; private BatchMatrixSetDiag(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java index a4b086faa3f..677b8aa0e7b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolve.java @@ -96,6 +96,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixSolve"; + private Output output; private BatchMatrixSolve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java index c5a71d9481d..ae4a4366b3b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixSolveLs.java @@ -99,6 +99,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixSolveLs"; + private Output output; private BatchMatrixSolveLs(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java index 186d68a8f68..cb1baa772fd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchMatrixTriangularSolve.java @@ -115,6 +115,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatrixTriangularSolve"; + private Output output; private BatchMatrixTriangularSolve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java index d2c56803f3a..e589f5c49fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSelfAdjointEig.java @@ -95,6 +95,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchSelfAdjointEigV2"; + private Output e; private Output v; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSvd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSvd.java index 25b8da69ab5..21db016713a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSvd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/BatchSvd.java @@ -119,6 +119,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchSvd"; + private Output s; private Output u; private Output v; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cholesky.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cholesky.java index 64216a5a5d3..3acf951d5a7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cholesky.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cholesky.java @@ -76,6 +76,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cholesky"; + private Output output; private Cholesky(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java index e60c7eee5fd..b4171907853 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/CholeskyGrad.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CholeskyGrad"; + private Output output; private CholeskyGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java index a1d82fd5d07..2da45552f35 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/ConjugateTranspose.java @@ -68,6 +68,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConjugateTranspose"; + private Output y; private ConjugateTranspose(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java index 1de44ceb714..0afc8a2bf60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Cross.java @@ -69,6 +69,9 @@ public Output asOutput() { return product; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cross"; + private Output product; private Cross(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Det.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Det.java index 4ae18c47148..7134ef6ea44 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Det.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Det.java @@ -66,6 +66,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixDeterminant"; + private Output output; private Det(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Eig.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Eig.java index faaf6dd5972..68c33487129 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Eig.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Eig.java @@ -115,6 +115,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Eig"; + private Output e; private Output v; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Einsum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Einsum.java index 7471e13882c..6817270edd1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Einsum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Einsum.java @@ -142,6 +142,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Einsum"; + private Output output; private Einsum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/EuclideanNorm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/EuclideanNorm.java index eeb65943fa3..f8ce40f62bf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/EuclideanNorm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/EuclideanNorm.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EuclideanNorm"; + private Output output; private EuclideanNorm(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Inv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Inv.java index 46fbed05b63..e482957bdac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Inv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Inv.java @@ -112,6 +112,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixInverse"; + private Output output; private Inv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java index 58482665ed7..1010c503eba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LoadAndRemapMatrix.java @@ -162,6 +162,9 @@ public Output asOutput() { return outputMatrix; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadAndRemapMatrix"; + private Output outputMatrix; private LoadAndRemapMatrix(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LogMatrixDeterminant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LogMatrixDeterminant.java index a19e1753007..33781d561b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LogMatrixDeterminant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/LogMatrixDeterminant.java @@ -75,6 +75,9 @@ public Output logAbsDeterminant() { return logAbsDeterminant; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LogMatrixDeterminant"; + private Output sign; private Output logAbsDeterminant; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Lu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Lu.java index f243cc902c9..ce37bbcbea2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Lu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Lu.java @@ -111,6 +111,9 @@ public Output p() { return p; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Lu"; + private Output lu; private Output p; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatMul.java index 72466aaceea..8b227e3910c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatMul.java @@ -124,6 +124,9 @@ public Output asOutput() { return product; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatMul"; + private Output product; private MatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiag.java index 97e885f95e8..b187ecc0930 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiag.java @@ -164,6 +164,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixDiagV2"; + private Output output; private MatrixDiag(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPart.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPart.java index 81a80bb0d5c..c4dee3f7d76 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPart.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPart.java @@ -138,6 +138,9 @@ public Output asOutput() { return diagonal; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixDiagPartV2"; + private Output diagonal; private MatrixDiagPart(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPartV3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPartV3.java index d4c9adcf553..5803f9251f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPartV3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagPartV3.java @@ -215,6 +215,9 @@ public Output asOutput() { return diagonal; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixDiagPartV3"; + private Output diagonal; private MatrixDiagPartV3(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagV3.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagV3.java index ef16e3195da..10b57ecc19a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagV3.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixDiagV3.java @@ -239,6 +239,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixDiagV3"; + private Output output; private MatrixDiagV3(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixLogarithm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixLogarithm.java index ba6adbaf0aa..71d3a2c9575 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixLogarithm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixLogarithm.java @@ -81,6 +81,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixLogarithm"; + private Output output; private MatrixLogarithm(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSetDiag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSetDiag.java index fe7c7b42d35..80367a3670b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSetDiag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSetDiag.java @@ -219,6 +219,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixSetDiagV3"; + private Output output; private MatrixSetDiag(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java index 3ed8ddf95d3..633145ce24e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/MatrixSolveLs.java @@ -140,6 +140,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixSolveLs"; + private Output output; private MatrixSolveLs(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Qr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Qr.java index e35661a5ae4..cf58f41507f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Qr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Qr.java @@ -115,6 +115,9 @@ public Output r() { return r; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Qr"; + private Output q; private Output r; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java index 749ba329ea1..445d27e1591 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMul.java @@ -145,6 +145,9 @@ public Output maxOut() { return maxOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMatMul"; + private Output out; private Output minOut; private Output maxOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBias.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBias.java index 48ac255e7a5..30800fc499a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBias.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBias.java @@ -165,6 +165,9 @@ public Output maxOut() { return maxOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMatMulWithBias"; + private Output out; private Output minOut; private Output maxOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndRelu.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndRelu.java index 6958b14a7f3..6e584b6b82f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndRelu.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndRelu.java @@ -166,6 +166,9 @@ public Output maxOut() { return maxOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMatMulWithBiasAndRelu"; + private Output out; private Output minOut; private Output maxOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndReluAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndReluAndRequantize.java index 17d2b2a25d0..c6b38ac66af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndReluAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/QuantizedMatMulWithBiasAndReluAndRequantize.java @@ -171,6 +171,9 @@ public Output maxOut() { return maxOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMatMulWithBiasAndReluAndRequantize"; + private Output out; private Output minOut; private Output maxOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/SelfAdjointEig.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/SelfAdjointEig.java index d0d3e8f4f5f..60bbafe6e70 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/SelfAdjointEig.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/SelfAdjointEig.java @@ -112,6 +112,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SelfAdjointEigV2"; + private Output e; private Output v; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Solve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Solve.java index 087b8ef7991..62f1beb11c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Solve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Solve.java @@ -107,6 +107,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixSolve"; + private Output output; private Solve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Sqrtm.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Sqrtm.java index 86d747a81a5..35c3b88605c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Sqrtm.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Sqrtm.java @@ -82,6 +82,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixSquareRoot"; + private Output output; private Sqrtm(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Svd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Svd.java index df0772367fd..4ff72f0e139 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Svd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Svd.java @@ -149,6 +149,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Svd"; + private Output s; private Output u; private Output v; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiag.java index 40bf987f815..126a8c5cde7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiag.java @@ -79,6 +79,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Diag"; + private Output output; private TensorDiag(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiagPart.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiagPart.java index c14b82af064..e999ca96a4b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiagPart.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TensorDiagPart.java @@ -81,6 +81,9 @@ public Output asOutput() { return diagonal; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DiagPart"; + private Output diagonal; private TensorDiagPart(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java index 5ce582563ea..1df98fabe64 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/Transpose.java @@ -67,6 +67,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Transpose"; + private Output y; private Transpose(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TriangularSolve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TriangularSolve.java index ba5ce4f65c2..da86d99b6c6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TriangularSolve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TriangularSolve.java @@ -176,6 +176,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MatrixTriangularSolve"; + private Output output; private TriangularSolve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalMatMul.java index 7fb782724f9..2ff1c18fc60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalMatMul.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TridiagonalMatMul"; + private Output output; private TridiagonalMatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalSolve.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalSolve.java index 0ad614e24d2..0f581811162 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalSolve.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/TridiagonalSolve.java @@ -110,6 +110,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TridiagonalSolve"; + private Output output; private TridiagonalSolve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixComponents.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixComponents.java index 01e7c156baf..332382cec08 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixComponents.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixComponents.java @@ -79,6 +79,9 @@ public Output values() { return values; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CSRSparseMatrixComponents"; + private Output rowPtrs; private Output colInds; private Output values; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToDense.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToDense.java index f221c56fce1..0d8ceba40d3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToDense.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToDense.java @@ -64,6 +64,9 @@ public Output asOutput() { return denseOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CSRSparseMatrixToDense"; + private Output denseOutput; private CSRSparseMatrixToDense(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToSparseTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToSparseTensor.java index c9796bf7573..0b5a2d41df8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToSparseTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/CSRSparseMatrixToSparseTensor.java @@ -74,6 +74,9 @@ public Output denseShape() { return denseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CSRSparseMatrixToSparseTensor"; + private Output indices; private Output values; private Output denseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/DenseToCSRSparseMatrix.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/DenseToCSRSparseMatrix.java index 93414b7e7f6..0033c9a9760 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/DenseToCSRSparseMatrix.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/DenseToCSRSparseMatrix.java @@ -63,6 +63,9 @@ public Output asOutput() { return (Output) sparseOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DenseToCSRSparseMatrix"; + private Output sparseOutput; private DenseToCSRSparseMatrix(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixAdd.java index 2e7b03b0fb6..d8e676743a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixAdd.java @@ -69,6 +69,9 @@ public Output asOutput() { return (Output) c; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixAdd"; + private Output c; private SparseMatrixAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMatMul.java index 999afbb7a1a..2ee48d29d79 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMatMul.java @@ -217,6 +217,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixMatMul"; + private Output output; private SparseMatrixMatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMul.java index cc6f936e661..ad1571580f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixMul.java @@ -71,6 +71,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixMul"; + private Output output; private SparseMatrixMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixNNZ.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixNNZ.java index 613228d6272..e730d181699 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixNNZ.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixNNZ.java @@ -59,6 +59,9 @@ public Output asOutput() { return nnz; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixNNZ"; + private Output nnz; private SparseMatrixNNZ(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixOrderingAMD.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixOrderingAMD.java index 9acf649aa94..6967ebec973 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixOrderingAMD.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixOrderingAMD.java @@ -107,6 +107,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixOrderingAMD"; + private Output output; private SparseMatrixOrderingAMD(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmax.java index 2d62bbb6899..01cec0f84da 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmax.java @@ -70,6 +70,9 @@ public Output asOutput() { return (Output) softmax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixSoftmax"; + private Output softmax; private SparseMatrixSoftmax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmaxGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmaxGrad.java index 0a698bb7929..8ac96d72177 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmaxGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSoftmaxGrad.java @@ -66,6 +66,9 @@ public Output asOutput() { return (Output) gradient; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixSoftmaxGrad"; + private Output gradient; private SparseMatrixSoftmaxGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseCholesky.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseCholesky.java index 603e4e30c9f..3f52d64f600 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseCholesky.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseCholesky.java @@ -137,6 +137,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixSparseCholesky"; + private Output output; private SparseMatrixSparseCholesky(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseMatMul.java index 2e8bafb9b0b..8e7c545df87 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixSparseMatMul.java @@ -229,6 +229,9 @@ public Output asOutput() { return (Output) c; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixSparseMatMul"; + private Output c; private SparseMatrixSparseMatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixTranspose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixTranspose.java index 6801b45dd6d..90e5ba4294f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixTranspose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixTranspose.java @@ -100,6 +100,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixTranspose"; + private Output output; private SparseMatrixTranspose(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixZeros.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixZeros.java index eab0d59e8c2..3c5bef9daed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixZeros.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseMatrixZeros.java @@ -64,6 +64,9 @@ public Output asOutput() { return (Output) sparseMatrix; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatrixZeros"; + private Output sparseMatrix; private SparseMatrixZeros(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseTensorToCSRSparseMatrix.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseTensorToCSRSparseMatrix.java index a14a09c9433..afda1e8b5f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseTensorToCSRSparseMatrix.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/linalg/sparse/SparseTensorToCSRSparseMatrix.java @@ -65,6 +65,9 @@ public Output asOutput() { return (Output) sparseMatrix; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseTensorToCSRSparseMatrix"; + private Output sparseMatrix; private SparseTensorToCSRSparseMatrix(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java index a04d249dc74..7aa760a535b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Abs.java @@ -66,6 +66,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Abs"; + private Output y; private Abs(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java index 733a7546f57..dc15d9f9d81 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AccumulateN.java @@ -74,6 +74,9 @@ public Output asOutput() { return sum; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AccumulateNV2"; + private Output sum; private AccumulateN(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acos.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acos.java index 200fa10daad..43ba8e54334 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acos.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acos.java @@ -61,6 +61,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Acos"; + private Output y; private Acos(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acosh.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acosh.java index e26f402b14e..0d1aaf95237 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acosh.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Acosh.java @@ -69,6 +69,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Acosh"; + private Output y; private Acosh(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Add.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Add.java index 2c3c69e735f..86d7c82ae38 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Add.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Add.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Add"; + private Output z; private Add(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AddN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AddN.java index aa6abe36421..16a5e22ce16 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AddN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/AddN.java @@ -70,6 +70,9 @@ public Output asOutput() { return sum; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AddN"; + private Output sum; private AddN(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java index 08c203e2625..ce996785568 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Angle.java @@ -94,6 +94,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Angle"; + private Output output; private Angle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java index 83762aa8117..245c42f269d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ApproximateEqual.java @@ -96,6 +96,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApproximateEqual"; + private Output z; private ApproximateEqual(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java index 9670f62b1a5..b45c1268cb2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMax.java @@ -98,6 +98,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ArgMax"; + private Output output; private ArgMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java index 00e84ed2dc3..5a49adecd22 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ArgMin.java @@ -98,6 +98,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ArgMin"; + private Output output; private ArgMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asin.java index 6dd53582f63..941515b013e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asin.java @@ -77,6 +77,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Asin"; + private Output y; private Asin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asinh.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asinh.java index 93131b0b597..c2451727573 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asinh.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Asinh.java @@ -71,6 +71,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Asinh"; + private Output y; private Asinh(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan.java index ae1c0de475b..a3574d549bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan.java @@ -77,6 +77,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Atan"; + private Output y; private Atan(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java index d77090da6a1..d49bc324cb3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atan2.java @@ -70,6 +70,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Atan2"; + private Output z; private Atan2(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atanh.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atanh.java index 2d8596be938..6c53c8828c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atanh.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Atanh.java @@ -73,6 +73,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Atanh"; + private Output y; private Atanh(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java index b951b555fc9..c68eeadc30c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0e.java @@ -67,6 +67,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselI0e"; + private Output y; private BesselI0e(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java index 9d92b8a4d66..f61e846e2b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1e.java @@ -67,6 +67,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselI1e"; + private Output y; private BesselI1e(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java index bf42fa10faf..53ecd2ed396 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Betainc.java @@ -77,6 +77,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Betainc"; + private Output z; private Betainc(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java index 30b96bf1b5d..4217584c4fb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Bincount.java @@ -79,6 +79,9 @@ public Output asOutput() { return bins; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Bincount"; + private Output bins; private Bincount(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java index 36bcf7ce417..c97e5b5ae5d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ceil.java @@ -62,6 +62,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Ceil"; + private Output y; private Ceil(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java index a00341d467d..2538cc59248 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CompareAndBitpack.java @@ -85,6 +85,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CompareAndBitpack"; + private Output output; private CompareAndBitpack(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java index f72854aa5ed..317744e519a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ComplexAbs.java @@ -83,6 +83,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ComplexAbs"; + private Output y; private ComplexAbs(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Conj.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Conj.java index c633957aeb2..b565fe9d322 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Conj.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Conj.java @@ -75,6 +75,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Conj"; + private Output output; private Conj(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cos.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cos.java index 8a61ed1db2a..29f81972b17 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cos.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cos.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cos"; + private Output y; private Cos(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cosh.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cosh.java index 20f70fe2f0c..f65e3e952ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cosh.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cosh.java @@ -71,6 +71,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cosh"; + private Output y; private Cosh(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java index faab91b5bd9..52154403d72 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumprod.java @@ -143,6 +143,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cumprod"; + private Output out; private Cumprod(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java index a1027a8b221..6895cbed39f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Cumsum.java @@ -143,6 +143,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Cumsum"; + private Output out; private Cumsum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CumulativeLogsumexp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CumulativeLogsumexp.java index 82b702e4def..3c8e6f89870 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CumulativeLogsumexp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/CumulativeLogsumexp.java @@ -135,6 +135,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CumulativeLogsumexp"; + private Output out; private CumulativeLogsumexp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java index c217acd7f51..2fd494f637c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Digamma.java @@ -64,6 +64,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Digamma"; + private Output y; private Digamma(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Div.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Div.java index fb34257a1e8..0cd80db04df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Div.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Div.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Div"; + private Output z; private Div(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DivNoNan.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DivNoNan.java index 373dcff32cb..7a1ea66a50d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DivNoNan.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DivNoNan.java @@ -67,6 +67,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DivNoNan"; + private Output z; private DivNoNan(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java index 971a44984c6..d67b38e9ca6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Equal.java @@ -109,6 +109,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Equal"; + private Output z; private Equal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java index 2f8e2f8c302..9f86126bff4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erf.java @@ -62,6 +62,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Erf"; + private Output y; private Erf(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java index a1494ae42a7..b94fecf9ede 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Erfc.java @@ -62,6 +62,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Erfc"; + private Output y; private Erfc(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Exp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Exp.java index 16e93c8ec2c..cee48319f26 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Exp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Exp.java @@ -87,6 +87,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Exp"; + private Output y; private Exp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Expm1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Expm1.java index 6998e3d3fdb..9d76f16b774 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Expm1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Expm1.java @@ -76,6 +76,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Expm1"; + private Output y; private Expm1(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java index 7c8f8af6c95..31d78966166 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Fact.java @@ -57,6 +57,9 @@ public Output asOutput() { return fact; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Fact"; + private Output fact; private Fact(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java index fb1955c2e91..ac8d7a8ffba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Floor.java @@ -62,6 +62,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Floor"; + private Output y; private Floor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorDiv.java index b02797cde81..366b88bc6d9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorDiv.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FloorDiv"; + private Output z; private FloorDiv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java index 79881c593bc..715628b57a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/FloorMod.java @@ -70,6 +70,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FloorMod"; + private Output z; private FloorMod(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java index a2aef106674..e8ef3811fd1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Greater.java @@ -78,6 +78,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Greater"; + private Output z; private Greater(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java index 6097961d214..11a83743031 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/GreaterEqual.java @@ -78,6 +78,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GreaterEqual"; + private Output z; private GreaterEqual(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java index e6492c17a8e..a4687ef3ab1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igamma.java @@ -77,6 +77,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Igamma"; + private Output z; private Igamma(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java index 90e5b649dc5..e57b8d886e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IgammaGradA.java @@ -63,6 +63,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IgammaGradA"; + private Output z; private IgammaGradA(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java index 03c9ab28002..1e2cb0cf0f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Igammac.java @@ -77,6 +77,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Igammac"; + private Output z; private Igammac(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java index dbd5b5b8406..48a8a7107a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Imag.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Imag"; + private Output output; private Imag(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java index 28d0a80d4ad..de9e9c46932 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/InvertPermutation.java @@ -79,6 +79,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InvertPermutation"; + private Output y; private InvertPermutation(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java index b8136095909..ffe9bb99f10 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsFinite.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IsFinite"; + private Output y; private IsFinite(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java index 429e8aee411..3d36e9fbfe9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsInf.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IsInf"; + private Output y; private IsInf(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java index 1c480c08336..b58205a005c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/IsNan.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IsNan"; + private Output y; private IsNan(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java index 106040ab8b1..3d796296f01 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Less.java @@ -78,6 +78,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Less"; + private Output z; private Less(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java index 094bd19e36c..618cd7a9866 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LessEqual.java @@ -78,6 +78,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LessEqual"; + private Output z; private LessEqual(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java index 42a5baad397..9bc18b1b3b8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Lgamma.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Lgamma"; + private Output y; private Lgamma(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log.java index 1ee4bc3c6e2..9db418d1002 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log.java @@ -70,6 +70,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Log"; + private Output y; private Log(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log1p.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log1p.java index 407cfa649ad..3cc2656ea9b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log1p.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Log1p.java @@ -70,6 +70,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Log1p"; + private Output y; private Log1p(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java index 410cd28dc9d..89bb2837f46 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalAnd.java @@ -64,6 +64,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LogicalAnd"; + private Output z; private LogicalAnd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java index 643af8caa45..f59c85fd320 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalNot.java @@ -60,6 +60,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LogicalNot"; + private Output y; private LogicalNot(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java index a9f33397ae1..604e3ea18f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/LogicalOr.java @@ -64,6 +64,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LogicalOr"; + private Output z; private LogicalOr(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java index 998e5fbc3bf..9f72150c5d3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Maximum.java @@ -67,6 +67,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Maximum"; + private Output z; private Maximum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java index 301ff6b1c31..7859b7ce10f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mean.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Mean"; + private Output output; private Mean(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java index 33f6fe5d7af..e11b6e484fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Minimum.java @@ -67,6 +67,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Minimum"; + private Output z; private Minimum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java index 8cd9b2cd30d..7ba98b81b39 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mod.java @@ -70,6 +70,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Mod"; + private Output z; private Mod(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mul.java index d4cf53f8540..20d5f471ba8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Mul.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Mul"; + private Output z; private Mul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/MulNoNan.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/MulNoNan.java index 157b5d1ead0..312a3025870 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/MulNoNan.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/MulNoNan.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MulNoNan"; + private Output z; private MulNoNan(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ndtri.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ndtri.java index 0330942d8b3..55dcf0c434d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ndtri.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Ndtri.java @@ -60,6 +60,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Ndtri"; + private Output y; private Ndtri(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Neg.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Neg.java index 14a1544cb82..53079692e32 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Neg.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Neg.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Neg"; + private Output y; private Neg(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NextAfter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NextAfter.java index 4ac1cde3380..8fa53306eed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NextAfter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NextAfter.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NextAfter"; + private Output output; private NextAfter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java index 647b596f6be..977688031c5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/NotEqual.java @@ -99,6 +99,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NotEqual"; + private Output z; private NotEqual(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java index 415b5b51837..d0021efc2ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Polygamma.java @@ -71,6 +71,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Polygamma"; + private Output z; private Polygamma(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java index 21b22d86fa5..bc721897426 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/PopulationCount.java @@ -68,6 +68,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PopulationCount"; + private Output y; private PopulationCount(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Pow.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Pow.java index cd22d351e6e..27f26e431fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Pow.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Pow.java @@ -72,6 +72,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Pow"; + private Output z; private Pow(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java index fd2f5890d47..ccd6d2e5f98 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedAdd.java @@ -87,6 +87,9 @@ public Output maxZ() { return maxZ; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedAdd"; + private Output z; private Output minZ; private Output maxZ; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java index a629145fa62..e16dc423a63 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/QuantizedMul.java @@ -87,6 +87,9 @@ public Output maxZ() { return maxZ; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMul"; + private Output z; private Output minZ; private Output maxZ; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java index 0b619946e0b..e113597afd8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Real.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Real"; + private Output output; private Real(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RealDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RealDiv.java index 32dcc8988fc..ec322c696db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RealDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RealDiv.java @@ -68,6 +68,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RealDiv"; + private Output z; private RealDiv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Reciprocal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Reciprocal.java index b39118351c5..a0b53da3b7c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Reciprocal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Reciprocal.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Reciprocal"; + private Output y; private Reciprocal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ReciprocalGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ReciprocalGrad.java index 9d9a1f03723..dee41220ba9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ReciprocalGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/ReciprocalGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReciprocalGrad"; + private Output z; private ReciprocalGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizationRangePerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizationRangePerChannel.java index 659dae182cf..feda79c70b2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizationRangePerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizationRangePerChannel.java @@ -69,6 +69,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RequantizationRangePerChannel"; + private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizePerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizePerChannel.java index 793429b9779..53a6201151e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizePerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RequantizePerChannel.java @@ -82,6 +82,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RequantizePerChannel"; + private Output output; private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java index 576508d7d30..b7b152248a8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rint.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Rint"; + private Output y; private Rint(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Round.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Round.java index dbd546baf23..7f892d28ed0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Round.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Round.java @@ -64,6 +64,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Round"; + private Output y; private Round(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rsqrt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rsqrt.java index 43a6886684d..de04c3f1204 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rsqrt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Rsqrt.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Rsqrt"; + private Output y; private Rsqrt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RsqrtGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RsqrtGrad.java index df8cdcfb392..ee0eec068f3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RsqrtGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/RsqrtGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RsqrtGrad"; + private Output z; private RsqrtGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java index 99c1bda676b..fdd40054420 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMax.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SegmentMax"; + private Output output; private SegmentMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java index 263a550e74c..2fe16ce7e12 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMean.java @@ -91,6 +91,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SegmentMean"; + private Output output; private SegmentMean(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java index 38a0e75784c..b7ab590e976 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentMin.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SegmentMin"; + private Output output; private SegmentMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java index 36592e64f85..0f1179072e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentProd.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SegmentProd"; + private Output output; private SegmentProd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java index 54287c045b2..fceec1bfe43 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SegmentSum.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SegmentSum"; + private Output output; private SegmentSum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sigmoid.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sigmoid.java index a12d7061324..a54e4ae51ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sigmoid.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sigmoid.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sigmoid"; + private Output y; private Sigmoid(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SigmoidGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SigmoidGrad.java index c53a0ae603f..125397bfd65 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SigmoidGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SigmoidGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SigmoidGrad"; + private Output z; private SigmoidGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sign.java index 6591ed77c71..c9d8609872e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sign.java @@ -69,6 +69,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sign"; + private Output y; private Sign(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sin.java index 15ef4b31dd2..a17ea9d288e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sin.java @@ -71,6 +71,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sin"; + private Output y; private Sin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sinh.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sinh.java index 8785916850b..613d983eef5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sinh.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sinh.java @@ -71,6 +71,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sinh"; + private Output y; private Sinh(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SobolSample.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SobolSample.java index d66475e2071..131cb7ed792 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SobolSample.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SobolSample.java @@ -92,6 +92,9 @@ public Output asOutput() { return samples; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SobolSample"; + private Output samples; private SobolSample(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java index a4f3a22ebcd..79adcf30d76 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Softplus.java @@ -62,6 +62,9 @@ public Output asOutput() { return activations; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Softplus"; + private Output activations; private Softplus(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java index f885abcbdeb..90174757bc3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SoftplusGrad.java @@ -64,6 +64,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SoftplusGrad"; + private Output backprops; private SoftplusGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sqrt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sqrt.java index 315173746b2..de62810d7ce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sqrt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sqrt.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sqrt"; + private Output y; private Sqrt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SqrtGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SqrtGrad.java index 5ba9497bbdd..2c4b301a60b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SqrtGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SqrtGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SqrtGrad"; + private Output z; private SqrtGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Square.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Square.java index 36fdb6bda9c..01ccd098cc8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Square.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Square.java @@ -63,6 +63,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Square"; + private Output y; private Square(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SquaredDifference.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SquaredDifference.java index c860747add8..bed2fe9bb77 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SquaredDifference.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/SquaredDifference.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SquaredDifference"; + private Output z; private SquaredDifference(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sub.java index 1489a80202d..3578a962622 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Sub.java @@ -66,6 +66,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Sub"; + private Output z; private Sub(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tan.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tan.java index 1b1ddd50ba5..f09d909e8cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tan.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tan.java @@ -72,6 +72,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Tan"; + private Output y; private Tan(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tanh.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tanh.java index f2611083984..04d9d1e092c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tanh.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Tanh.java @@ -71,6 +71,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Tanh"; + private Output y; private Tanh(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TanhGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TanhGrad.java index 3ebc6ab598d..273c5a1f76d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TanhGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TanhGrad.java @@ -65,6 +65,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TanhGrad"; + private Output z; private TanhGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateDiv.java index a0a1f6697d1..5cd4b52fbed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateDiv.java @@ -71,6 +71,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TruncateDiv"; + private Output z; private TruncateDiv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java index cfa0461f460..48c92574eb4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/TruncateMod.java @@ -70,6 +70,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TruncateMod"; + private Output z; private TruncateMod(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java index 4c509457c3e..582113e3320 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMax.java @@ -100,6 +100,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnsortedSegmentMax"; + private Output output; private UnsortedSegmentMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java index bd12cae09b9..397ac5706a0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentMin.java @@ -94,6 +94,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnsortedSegmentMin"; + private Output output; private UnsortedSegmentMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java index 86f2b588cc0..c65fc484e4c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentProd.java @@ -93,6 +93,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnsortedSegmentProd"; + private Output output; private UnsortedSegmentProd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java index 95868ce64d0..aaaf5b7bd23 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/UnsortedSegmentSum.java @@ -96,6 +96,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnsortedSegmentSum"; + private Output output; private UnsortedSegmentSum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xdivy.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xdivy.java index 5372f4b5c11..1a5e57836fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xdivy.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xdivy.java @@ -63,6 +63,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Xdivy"; + private Output z; private Xdivy(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlog1py.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlog1py.java index f0586582e8c..a15f29dab04 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlog1py.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlog1py.java @@ -63,6 +63,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Xlog1py"; + private Output z; private Xlog1py(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlogy.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlogy.java index 6b303403408..a140c8aa6fe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlogy.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Xlogy.java @@ -63,6 +63,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Xlogy"; + private Output z; private Xlogy(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java index 431921f8e2b..0f3cee188fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/Zeta.java @@ -68,6 +68,9 @@ public Output asOutput() { return z; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Zeta"; + private Output z; private Zeta(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/erfinv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/erfinv.java index 385bd855018..de2a4482f65 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/erfinv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/erfinv.java @@ -60,6 +60,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Erfinv"; + private Output y; private erfinv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Dawsn.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Dawsn.java index 0855403368a..74388434149 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Dawsn.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Dawsn.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Dawsn"; + private Output y; private Dawsn(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Expint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Expint.java index 1d2aa725fce..b36c55fdeb6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Expint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Expint.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Expint"; + private Output y; private Expint(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelCos.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelCos.java index 732cfb1ac20..bb9a9f47e78 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelCos.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelCos.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FresnelCos"; + private Output y; private FresnelCos(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelSin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelSin.java index cab6e46cba8..36681c87678 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelSin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/FresnelSin.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FresnelSin"; + private Output y; private FresnelSin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Spence.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Spence.java index c313fb84aee..ed613a28b1a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Spence.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/Spence.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Spence"; + private Output y; private Spence(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java index f759acb0a51..760dd9fe913 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Dequantize.java @@ -207,6 +207,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Dequantize"; + private Output output; private Dequantize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java index 16ea096ef9d..1d79edcb24e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgs.java @@ -167,6 +167,9 @@ public Output asOutput() { return outputs; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FakeQuantWithMinMaxArgs"; + private Output outputs; private FakeQuantWithMinMaxArgs(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java index 71da232b5df..62057eaefed 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxArgsGradient.java @@ -154,6 +154,9 @@ public Output asOutput() { return backprops; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FakeQuantWithMinMaxArgsGradient"; + private Output backprops; private FakeQuantWithMinMaxArgsGradient(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java index 21113c6a6f3..667c5d60014 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVars.java @@ -136,6 +136,9 @@ public Output asOutput() { return outputs; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FakeQuantWithMinMaxVars"; + private Output outputs; private FakeQuantWithMinMaxVars(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java index 7b4e10d9c21..e9fcd339a75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsGradient.java @@ -132,6 +132,9 @@ public Output backpropWrtMax() { return backpropWrtMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FakeQuantWithMinMaxVarsGradient"; + private Output backpropsWrtInput; private Output backpropWrtMin; private Output backpropWrtMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java index 1302ae47b32..f65ed1735de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannel.java @@ -137,6 +137,9 @@ public Output asOutput() { return outputs; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FakeQuantWithMinMaxVarsPerChannel"; + private Output outputs; private FakeQuantWithMinMaxVarsPerChannel(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java index 3e104c42c90..4fba9b56115 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/FakeQuantWithMinMaxVarsPerChannelGradient.java @@ -135,6 +135,9 @@ public Output backpropWrtMax() { return backpropWrtMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FakeQuantWithMinMaxVarsPerChannelGradient"; + private Output backpropsWrtInput; private Output backpropWrtMin; private Output backpropWrtMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java index 1b6ed2fd791..37f58cfa512 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Quantize.java @@ -311,6 +311,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizeV2"; + private Output output; private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java index d90d91706d9..fd75b330e41 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeAndDequantize.java @@ -163,6 +163,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizeAndDequantizeV3"; + private Output output; private QuantizeAndDequantize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java index 3b77c20f70c..362375b40e2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizeDownAndShrinkRange.java @@ -101,6 +101,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizeDownAndShrinkRange"; + private Output output; private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedConcat.java index 46f73857d91..43839d072de 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedConcat.java @@ -84,6 +84,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedConcat"; + private Output output; private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndDequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndDequantize.java index 42da8ab044f..baa20635c51 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndDequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndDequantize.java @@ -151,6 +151,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMatMulWithBiasAndDequantize"; + private Output out; private QuantizedMatMulWithBiasAndDequantize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndRequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndRequantize.java index a3ececf8fb3..950221b1b94 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndRequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/QuantizedMatMulWithBiasAndRequantize.java @@ -157,6 +157,9 @@ public Output maxOut() { return maxOut; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "QuantizedMatMulWithBiasAndRequantize"; + private Output out; private Output minOut; private Output maxOut; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java index 85eddcd506a..86ab731bb50 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/RequantizationRange.java @@ -72,6 +72,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RequantizationRange"; + private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java index 987dd660095..5df8ca0b622 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/quantization/Requantize.java @@ -90,6 +90,9 @@ public Output outputMax() { return outputMax; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Requantize"; + private Output output; private Output outputMin; private Output outputMax; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedGather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedGather.java index c200b82da2a..7cc7de6d3db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedGather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedGather.java @@ -109,6 +109,9 @@ public Output outputDenseValues() { return outputDenseValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedGather"; + private List> outputNestedSplits; private Output outputDenseValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedRange.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedRange.java index 8fd3fb45bea..9d8f5594fd9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedRange.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedRange.java @@ -102,6 +102,9 @@ public Output rtDenseValues() { return rtDenseValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedRange"; + private Output rtNestedSplits; private Output rtDenseValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorFromVariant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorFromVariant.java index 3b094d70e0b..c9dcfe54bda 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorFromVariant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorFromVariant.java @@ -110,6 +110,9 @@ public Output outputDenseValues() { return outputDenseValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedTensorFromVariant"; + private List> outputNestedSplits; private Output outputDenseValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToSparse.java index d4443b915ac..7906048788d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToSparse.java @@ -79,6 +79,9 @@ public Output sparseDenseShape() { return sparseDenseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedTensorToSparse"; + private Output sparseIndices; private Output sparseValues; private Output sparseDenseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToTensor.java index d5b03b37352..e469e6fc020 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToTensor.java @@ -133,6 +133,9 @@ public Output asOutput() { return result; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedTensorToTensor"; + private Output result; private RaggedTensorToTensor(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToVariant.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToVariant.java index b8c1570a573..6c22a0c4529 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToVariant.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedTensorToVariant.java @@ -80,6 +80,9 @@ public Output asOutput() { return (Output) encodedRagged; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedTensorToVariant"; + private Output encodedRagged; private RaggedTensorToVariant(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java index 1fca347c024..de24d12678f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AllCandidateSampler.java @@ -152,6 +152,9 @@ public Output sampledExpectedCount() { return sampledExpectedCount; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AllCandidateSampler"; + private Output sampledCandidates; private Output trueExpectedCount; private Output sampledExpectedCount; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousRandomSeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousRandomSeedGenerator.java index f0d6d9d77cd..a87026cd7f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousRandomSeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousRandomSeedGenerator.java @@ -60,6 +60,9 @@ public Output deleter() { return deleter; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AnonymousRandomSeedGenerator"; + private Output handle; private Output deleter; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java index 63e2698983b..9bc34d98ebb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java @@ -46,6 +46,9 @@ public static DeleteRandomSeedGenerator create(Scope scope, Operand handle, O return new DeleteRandomSeedGenerator(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeleteRandomSeedGenerator"; + private DeleteRandomSeedGenerator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java index 8295f36e678..761f945de1a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/LogUniformCandidateSampler.java @@ -154,6 +154,9 @@ public Output sampledExpectedCount() { return sampledExpectedCount; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LogUniformCandidateSampler"; + private Output sampledCandidates; private Output trueExpectedCount; private Output sampledExpectedCount; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java index 41fb03d9dc2..58cc57d6c52 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/Multinomial.java @@ -142,6 +142,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Multinomial"; + private Output output; private Multinomial(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/NonDeterministicInts.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/NonDeterministicInts.java index b251813e265..246974eaf6f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/NonDeterministicInts.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/NonDeterministicInts.java @@ -79,6 +79,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "NonDeterministicInts"; + private Output output; private NonDeterministicInts(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java index 8ed64aa14a7..4be50b9cde0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/ParameterizedTruncatedNormal.java @@ -133,6 +133,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ParameterizedTruncatedNormal"; + private Output output; private ParameterizedTruncatedNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java index 65ae0fbcbb4..13963e09ecb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGamma.java @@ -130,6 +130,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomGamma"; + private Output output; private RandomGamma(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java index ba25e19b24e..ce3798cef3f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomGammaGrad.java @@ -63,6 +63,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomGammaGrad"; + private Output output; private RandomGammaGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java index e7bcb3d6855..d4b516343ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomPoisson.java @@ -156,6 +156,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomPoissonV2"; + private Output output; private RandomPoisson(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomShuffle.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomShuffle.java index 738d92b7f0e..b08c31031ec 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomShuffle.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomShuffle.java @@ -130,6 +130,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomShuffle"; + private Output output; private RandomShuffle(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java index 48e08f355b3..bdd971cc19d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomStandardNormal.java @@ -125,6 +125,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomStandardNormal"; + private Output output; private RandomStandardNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java index 121a58533c1..5e42c2d9691 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniform.java @@ -126,6 +126,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomUniform"; + private Output output; private RandomUniform(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java index b2eafcadf4b..5232135ac1c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RandomUniformInt.java @@ -132,6 +132,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RandomUniformInt"; + private Output output; private RandomUniformInt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java index a8520fc1144..7e3550cb71c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RecordInput.java @@ -193,6 +193,9 @@ public Output asOutput() { return records; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RecordInput"; + private Output records; private RecordInput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java index af9e90226b4..e3411c3b989 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java @@ -55,6 +55,9 @@ public static RngSkip create(Scope scope, Operand resource, Operand a return new RngSkip(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RngSkip"; + private RngSkip(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulRandomBinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulRandomBinomial.java index f6b9ed59a68..b3c2dfce166 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulRandomBinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulRandomBinomial.java @@ -88,6 +88,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatefulRandomBinomial"; + private Output output; private StatefulRandomBinomial(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulStandardNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulStandardNormal.java index fd0f1cd16a4..12aabfa2a73 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulStandardNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulStandardNormal.java @@ -87,6 +87,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatefulStandardNormalV2"; + private Output output; private StatefulStandardNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulTruncatedNormal.java index 97ad2eb4f00..86904de711f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulTruncatedNormal.java @@ -88,6 +88,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatefulTruncatedNormal"; + private Output output; private StatefulTruncatedNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniform.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniform.java index 8c6d86dd507..dd9a2c10af0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniform.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniform.java @@ -87,6 +87,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatefulUniform"; + private Output output; private StatefulUniform(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformFullInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformFullInt.java index e234af42486..0bf991bd72e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformFullInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformFullInt.java @@ -71,6 +71,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatefulUniformFullInt"; + private Output output; private StatefulUniformFullInt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformInt.java index a5550877593..74337edc44d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatefulUniformInt.java @@ -78,6 +78,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatefulUniformInt"; + private Output output; private StatefulUniformInt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java index d5473395eb3..1dbe0e5a7d0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessMultinomial.java @@ -89,6 +89,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessMultinomial"; + private Output output; private StatelessMultinomial(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomBinomial.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomBinomial.java index 9629ee7620e..03543495413 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomBinomial.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomBinomial.java @@ -95,6 +95,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomBinomial"; + private Output output; private StatelessRandomBinomial(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomGamma.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomGamma.java index 815e4b8c1ad..2c4eef75ff7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomGamma.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomGamma.java @@ -71,6 +71,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomGammaV2"; + private Output output; private StatelessRandomGamma(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java index 028537a3417..07c5298cca0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomNormal.java @@ -86,6 +86,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomNormal"; + private Output output; private StatelessRandomNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomPoisson.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomPoisson.java index e0c7e949dd3..e71c70e2c1f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomPoisson.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomPoisson.java @@ -74,6 +74,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomPoisson"; + private Output output; private StatelessRandomPoisson(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java index 5ea49ccf36d..9eb6edc67e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniform.java @@ -87,6 +87,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomUniform"; + private Output output; private StatelessRandomUniform(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformFullInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformFullInt.java index 657153d3098..291cce74d19 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformFullInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformFullInt.java @@ -71,6 +71,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomUniformFullInt"; + private Output output; private StatelessRandomUniformFullInt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java index ebb569ea222..4695718a186 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessRandomUniformInt.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessRandomUniformInt"; + private Output output; private StatelessRandomUniformInt(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java index 180e5ffa4b5..3d4761fc4df 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessTruncatedNormal.java @@ -88,6 +88,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessTruncatedNormal"; + private Output output; private StatelessTruncatedNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java index b40ddfb6e47..7b88d720386 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/TruncatedNormal.java @@ -128,6 +128,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TruncatedNormal"; + private Output output; private TruncatedNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java index e568dd965ba..9e1f2b1abbd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/UniformCandidateSampler.java @@ -154,6 +154,9 @@ public Output sampledExpectedCount() { return sampledExpectedCount; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UniformCandidateSampler"; + private Output sampledCandidates; private Output trueExpectedCount; private Output sampledExpectedCount; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft.java index 029a9990900..9eaacf4b26a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchFFT"; + private Output output; private BatchFft(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft2d.java index c8357878666..551d7c3f139 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft2d.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchFFT2D"; + private Output output; private BatchFft2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft3d.java index 4ad58e855ae..beeb97ee414 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchFft3d.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchFFT3D"; + private Output output; private BatchFft3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft.java index 0e098f94b72..262b02d2bc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchIFFT"; + private Output output; private BatchIfft(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft2d.java index e689c9061d4..2145f201419 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft2d.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchIFFT2D"; + private Output output; private BatchIfft2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft3d.java index 5f23ed1ca7a..6a271795308 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/BatchIfft3d.java @@ -59,6 +59,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchIFFT3D"; + private Output output; private BatchIfft3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft.java index 802788288a6..632500fad5e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FFT"; + private Output output; private Fft(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft2d.java index aaafdb8392f..201b2e3c8af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft2d.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FFT2D"; + private Output output; private Fft2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft3d.java index a7b29547d0c..7e840fbfb62 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Fft3d.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FFT3D"; + private Output output; private Fft3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft.java index 6ba09167aa0..c020956beec 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IFFT"; + private Output output; private Ifft(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft2d.java index 086dd9d2338..c8cac107ff4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft2d.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IFFT2D"; + private Output output; private Ifft2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft3d.java index d1d114fc2d5..ce7f87a9aa2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Ifft3d.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IFFT3D"; + private Output output; private Ifft3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java index 8cbeb80aec5..80d3bb85291 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft.java @@ -103,6 +103,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IRFFT"; + private Output output; private Irfft(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java index a383b340c45..8acf23a4f23 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft2d.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IRFFT2D"; + private Output output; private Irfft2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java index 278bf3eac13..c7b9efabfd2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Irfft3d.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "IRFFT3D"; + private Output output; private Irfft3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java index 5b3dc8a4199..9764bcbf0f2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft.java @@ -86,6 +86,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RFFT"; + private Output output; private Rfft(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java index 7f47b98f969..91187dced7b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft2d.java @@ -88,6 +88,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RFFT2D"; + private Output output; private Rfft2d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java index 7fa5f8f23b7..1eb113e9cf1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/signal/Rfft3d.java @@ -88,6 +88,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RFFT3D"; + private Output output; private Rfft3d(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java index f3b4e77d1f3..ec66167f7e6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddManySparseToTensorsMap.java @@ -145,6 +145,9 @@ public Output asOutput() { return sparseHandles; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AddManySparseToTensorsMap"; + private Output sparseHandles; private AddManySparseToTensorsMap(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java index 0cc79427ce1..153e326aa9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/AddSparseToTensorsMap.java @@ -136,6 +136,9 @@ public Output asOutput() { return sparseHandle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AddSparseToTensorsMap"; + private Output sparseHandle; private AddSparseToTensorsMap(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java index 7308a8a8ecb..15e62be4fa8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToDenseSetOperation.java @@ -122,6 +122,9 @@ public Output resultShape() { return resultShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DenseToDenseSetOperation"; + private Output resultIndices; private Output resultValues; private Output resultShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java index 85a490c25a0..107f32524ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseToSparseSetOperation.java @@ -137,6 +137,9 @@ public Output resultShape() { return resultShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DenseToSparseSetOperation"; + private Output resultIndices; private Output resultValues; private Output resultShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java index a4fb2ee2e39..a1a6bb2fa49 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DeserializeSparse.java @@ -115,6 +115,9 @@ public Output sparseShape() { return sparseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeserializeSparse"; + private Output sparseIndices; private Output sparseValues; private Output sparseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java index 15751d4ca97..3f36812ea57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java @@ -66,6 +66,9 @@ public static SparseAccumulatorApplyGradient create(Scope scop return new SparseAccumulatorApplyGradient(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseAccumulatorApplyGradient"; + private SparseAccumulatorApplyGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java index d072e331bbf..87cbd112e57 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorTakeGradient.java @@ -87,6 +87,9 @@ public Output shape() { return shape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseAccumulatorTakeGradient"; + private Output indices; private Output values; private Output shape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java index 1bab6a714a0..bc8beb287bb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAdd.java @@ -97,6 +97,9 @@ public Output sumShape() { return sumShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseAdd"; + private Output sumIndices; private Output sumValues; private Output sumShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java index 1709c008119..c3fdf2952a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAddGrad.java @@ -80,6 +80,9 @@ public Output bValGrad() { return bValGrad; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseAddGrad"; + private Output aValGrad; private Output bValGrad; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java index 1ee35437c40..c6866997e30 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConcat.java @@ -122,6 +122,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseConcat"; + private Output outputIndices; private Output outputValues; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java index 7c9eea707df..b38fc0a6c46 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseConditionalAccumulator.java @@ -148,6 +148,9 @@ public Output asOutput() { return handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseConditionalAccumulator"; + private Output handle; private SparseConditionalAccumulator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java index 72d7107e2d5..2cc80dcd83d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java @@ -131,6 +131,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseCross"; + private Output outputIndices; private Output outputValues; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java index aace49ffa77..40c5fc1446b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseAdd.java @@ -79,6 +79,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseDenseCwiseAdd"; + private Output output; private SparseDenseCwiseAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java index 78e4bcfe8b4..1d88f78e482 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseDiv.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseDenseCwiseDiv"; + private Output output; private SparseDenseCwiseDiv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java index 78b37a2306a..b0144601eb3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseDenseCwiseMul.java @@ -77,6 +77,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseDenseCwiseMul"; + private Output output; private SparseDenseCwiseMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java index 47baf154e30..6c8066061fc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRows.java @@ -125,6 +125,9 @@ public Output reverseIndexMap() { return reverseIndexMap; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseFillEmptyRows"; + private Output outputIndices; private Output outputValues; private Output emptyRowIndicator; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java index 7289cfa1eef..3942e8bc8b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseFillEmptyRowsGrad.java @@ -76,6 +76,9 @@ public Output dDefaultValue() { return dDefaultValue; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseFillEmptyRowsGrad"; + private Output dValues; private Output dDefaultValue; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java index 42922e892cd..295063d560a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseMatMul.java @@ -164,6 +164,9 @@ public Output asOutput() { return product; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseMatMul"; + private Output product; private SparseMatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java index 9e8ffaf3484..5288f7b5b88 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMax.java @@ -119,6 +119,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseReduceMax"; + private Output output; private SparseReduceMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java index de96c4d2105..93ce28bb66a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceMaxSparse.java @@ -125,6 +125,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseReduceMaxSparse"; + private Output outputIndices; private Output outputValues; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java index b072fb46bfd..138bb1aab5b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSum.java @@ -118,6 +118,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseReduceSum"; + private Output output; private SparseReduceSum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java index befdc901b28..e27a1a98861 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReduceSumSparse.java @@ -124,6 +124,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseReduceSumSparse"; + private Output outputIndices; private Output outputValues; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java index 88be4106deb..16713d1f767 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReorder.java @@ -80,6 +80,9 @@ public Output outputValues() { return outputValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseReorder"; + private Output outputIndices; private Output outputValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java index 7d2799f8ffe..772b19db9c5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseReshape.java @@ -86,6 +86,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseReshape"; + private Output outputIndices; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java index 785b1149b0a..867ceffa333 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMean.java @@ -74,6 +74,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentMean"; + private Output output; private SparseSegmentMean(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java index a0c8e8b8e43..1af1cf8f170 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanGrad.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentMeanGrad"; + private Output output; private SparseSegmentMeanGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java index 0458eca8621..593f96408c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentMeanWithNumSegments.java @@ -78,6 +78,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentMeanWithNumSegments"; + private Output output; private SparseSegmentMeanWithNumSegments(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java index 03b6e015a80..85d8284ca8f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtN.java @@ -74,6 +74,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentSqrtN"; + private Output output; private SparseSegmentSqrtN(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java index cbe39991793..5893a8963f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNGrad.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentSqrtNGrad"; + private Output output; private SparseSegmentSqrtNGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java index ce787acb499..334c7665238 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSqrtNWithNumSegments.java @@ -80,6 +80,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentSqrtNWithNumSegments"; + private Output output; private SparseSegmentSqrtNWithNumSegments(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java index 16e47ab2431..2125bc49719 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSum.java @@ -99,6 +99,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentSum"; + private Output output; private SparseSegmentSum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java index 569d0c691c6..0e0b0227a06 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSegmentSumWithNumSegments.java @@ -99,6 +99,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSegmentSumWithNumSegments"; + private Output output; private SparseSegmentSumWithNumSegments(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java index 5c429a40d9a..4ed30d8e2eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSlice.java @@ -99,6 +99,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSlice"; + private Output outputIndices; private Output outputValues; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java index 172d8bd5816..480631eccbc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSliceGrad.java @@ -74,6 +74,9 @@ public Output asOutput() { return valGrad; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSliceGrad"; + private Output valGrad; private SparseSliceGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java index ee37d13c818..0906213115f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSoftmax.java @@ -85,6 +85,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSoftmax"; + private Output output; private SparseSoftmax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java index d6d86234578..3cbf1a6ef7d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMaximum.java @@ -79,6 +79,9 @@ public Output outputValues() { return outputValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSparseMaximum"; + private Output outputIndices; private Output outputValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java index f46065ae9fc..b2f6aedbccb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSparseMinimum.java @@ -78,6 +78,9 @@ public Output outputValues() { return outputValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSparseMinimum"; + private Output outputIndices; private Output outputValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java index dee18e0e862..e93f6ebe40e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseSplit.java @@ -104,6 +104,9 @@ public List> outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseSplit"; + private List> outputIndices; private List> outputValues; private List> outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java index 86f9d3394d1..9959d57d16b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseAdd.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseTensorDenseAdd"; + private Output output; private SparseTensorDenseAdd(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java index 858bce58f73..63f3d3116c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseTensorDenseMatMul.java @@ -136,6 +136,9 @@ public Output asOutput() { return product; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseTensorDenseMatMul"; + private Output product; private SparseTensorDenseMatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java index 04b21e5d46e..0f86af1327d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToDense.java @@ -126,6 +126,9 @@ public Output asOutput() { return dense; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseToDense"; + private Output dense; private SparseToDense(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java index 3b606bbd6e9..31cbe67a914 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseToSparseSetOperation.java @@ -152,6 +152,9 @@ public Output resultShape() { return resultShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseToSparseSetOperation"; + private Output resultIndices; private Output resultValues; private Output resultShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java index 8b38ac4f936..7fd5242cb20 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/TakeManySparseFromTensorsMap.java @@ -179,6 +179,9 @@ public Output sparseShape() { return sparseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TakeManySparseFromTensorsMap"; + private Output sparseIndices; private Output sparseValues; private Output sparseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java index 448a161166b..633457793a3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Join.java @@ -104,6 +104,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringJoin"; + private Output output; private Join(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Lower.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Lower.java index 14ac2b2a660..0b214f47017 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Lower.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Lower.java @@ -99,6 +99,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringLower"; + private Output output; private Lower(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java index 615262737c6..23d90b3a2b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ReduceJoin.java @@ -143,6 +143,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ReduceJoin"; + private Output output; private ReduceJoin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java index 62923005059..446166c6e29 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexFullMatch.java @@ -77,6 +77,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RegexFullMatch"; + private Output output; private RegexFullMatch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java index 39d76d9115b..3eaec903fee 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/RegexReplace.java @@ -106,6 +106,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RegexReplace"; + private Output output; private RegexReplace(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java index fe6714ca733..3aa7b0827eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexFullMatch.java @@ -69,6 +69,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StaticRegexFullMatch"; + private Output output; private StaticRegexFullMatch(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java index e09c93144d4..c1802f48001 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StaticRegexReplace.java @@ -101,6 +101,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StaticRegexReplace"; + private Output output; private StaticRegexReplace(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java index 0e6798c4bf4..3decf1e5c93 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringFormat.java @@ -135,6 +135,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringFormat"; + private Output output; private StringFormat(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java index ff820abbea3..d9fc036ad22 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringLength.java @@ -113,6 +113,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringLength"; + private Output output; private StringLength(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringNGrams.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringNGrams.java index e54a46a6b69..6d68c11fe1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringNGrams.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringNGrams.java @@ -95,6 +95,9 @@ public Output ngramsSplits() { return ngramsSplits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringNGrams"; + private Output ngrams; private Output ngramsSplits; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java index d1e4b45d745..87debf546cf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/StringSplit.java @@ -127,6 +127,9 @@ public Output shape() { return shape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringSplitV2"; + private Output indices; private Output values; private Output shape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java index eb8f1a23a4a..fc6f37bbabb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Strip.java @@ -65,6 +65,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringStrip"; + private Output output; private Strip(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java index 9d6e21cbafc..153f6873d03 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Substr.java @@ -184,6 +184,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Substr"; + private Output output; private Substr(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java index 82d26aebe40..11f025a4055 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucket.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringToHashBucket"; + private Output output; private ToHashBucket(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java index 62737da0d0d..b1025fb9ccd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketFast.java @@ -75,6 +75,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringToHashBucketFast"; + private Output output; private ToHashBucketFast(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java index c27d7053165..28af44e377f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToHashBucketStrong.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringToHashBucketStrong"; + private Output output; private ToHashBucketStrong(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java index 8c0751ea782..e8e5e4039b9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/ToNumber.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringToNumber"; + private Output output; private ToNumber(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecode.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecode.java index 1d5f077d04b..a39b08b1f5a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecode.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecode.java @@ -199,6 +199,9 @@ public Output charValues() { return charValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnicodeDecode"; + private Output rowSplits; private Output charValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java index 019afa8fe33..ce6977b63ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeDecodeWithOffsets.java @@ -213,6 +213,9 @@ public Output charToByteStarts() { return charToByteStarts; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnicodeDecodeWithOffsets"; + private Output rowSplits; private Output charValues; private Output charToByteStarts; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeEncode.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeEncode.java index 1a539366d81..ab83ef9dcda 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeEncode.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeEncode.java @@ -156,6 +156,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnicodeEncode"; + private Output output; private UnicodeEncode(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java index 3da3bac675c..6d3600a1de3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeScript.java @@ -71,6 +71,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnicodeScript"; + private Output output; private UnicodeScript(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java index 4b4e03fda8d..8f62db46152 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnicodeTranscode.java @@ -203,6 +203,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnicodeTranscode"; + private Output output; private UnicodeTranscode(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnsortedSegmentJoin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnsortedSegmentJoin.java index 47043fac5b2..df1bbc68b68 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnsortedSegmentJoin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/UnsortedSegmentJoin.java @@ -127,6 +127,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UnsortedSegmentJoin"; + private Output output; private UnsortedSegmentJoin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Upper.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Upper.java index 343e4c58d5d..e90dc891dd8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Upper.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/strings/Upper.java @@ -99,6 +99,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StringUpper"; + private Output output; private Upper(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java index f8382c2cede..6743a4ef4c1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/AudioSummary.java @@ -114,6 +114,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AudioSummaryV2"; + private Output summary; private AudioSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java index c056b2f4f35..ff9735f0b07 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java @@ -44,6 +44,9 @@ public static CloseSummaryWriter create(Scope scope, Operand writer) { return new CloseSummaryWriter(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CloseSummaryWriter"; + private CloseSummaryWriter(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java index 50cfefb2e9f..61e7405f74d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java @@ -53,6 +53,9 @@ public static CreateSummaryDbWriter create(Scope scope, Operand writer, Opera return new CreateSummaryDbWriter(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CreateSummaryDbWriter"; + private CreateSummaryDbWriter(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java index 13130955bca..d113ebcf3f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java @@ -54,6 +54,9 @@ public static CreateSummaryFileWriter create(Scope scope, Operand writer, Ope return new CreateSummaryFileWriter(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CreateSummaryFileWriter"; + private CreateSummaryFileWriter(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java index 16babb3df73..6b1e610c632 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java @@ -44,6 +44,9 @@ public static FlushSummaryWriter create(Scope scope, Operand writer) { return new FlushSummaryWriter(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "FlushSummaryWriter"; + private FlushSummaryWriter(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java index c98efad5b3b..669cbf5c2fb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/HistogramSummary.java @@ -70,6 +70,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "HistogramSummary"; + private Output summary; private HistogramSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java index 50cc52f5769..5b0f9f8859f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImageSummary.java @@ -166,6 +166,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ImageSummary"; + private Output summary; private ImageSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java index 736aa827d82..9b6dc173abe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java @@ -47,6 +47,9 @@ public static ImportEvent create(Scope scope, Operand writer, Operand asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MergeSummary"; + private Output summary; private MergeSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java index c766d9759ed..416251aa6b1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ScalarSummary.java @@ -67,6 +67,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScalarSummary"; + private Output summary; private ScalarSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java index 525db2a64e8..9cc5fe6d83b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/StatsAggregatorSummary.java @@ -58,6 +58,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatsAggregatorSummary"; + private Output summary; private StatsAggregatorSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/SummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/SummaryWriter.java index f27b996b716..131cb6e4a9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/SummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/SummaryWriter.java @@ -109,6 +109,9 @@ public Output asOutput() { return (Output) writer; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SummaryWriter"; + private Output writer; private SummaryWriter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java index 0d6e950a4f3..85e0f8d533b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/TensorSummary.java @@ -65,6 +65,9 @@ public Output asOutput() { return summary; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorSummaryV2"; + private Output summary; private TensorSummary(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java index 69e42753c7c..306b1d88e6e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteAudioSummary.java @@ -89,6 +89,9 @@ public static Options maxOutputs(Long maxOutputs) { return new Options().maxOutputs(maxOutputs); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WriteAudioSummary"; + private WriteAudioSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java index 0d6b11f1f6d..fa10196ca72 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteGraphSummary.java @@ -50,6 +50,9 @@ public static WriteGraphSummary create(Scope scope, Operand writer, Operand WriteHistogramSummary create(Scope scope, Oper return new WriteHistogramSummary(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WriteHistogramSummary"; + private WriteHistogramSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java index 26be4538bf0..286d584d695 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java @@ -91,6 +91,9 @@ public static Options maxImages(Long maxImages) { return new Options().maxImages(maxImages); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WriteImageSummary"; + private WriteImageSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java index e781534b31b..524b56bed7a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java @@ -50,6 +50,9 @@ public static WriteRawProtoSummary create(Scope scope, Operand writer, Operan return new WriteRawProtoSummary(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WriteRawProtoSummary"; + private WriteRawProtoSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java index b3a7b3a6723..2317db7bdeb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java @@ -54,6 +54,9 @@ public static WriteScalarSummary create(Scope scope, Operand return new WriteScalarSummary(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WriteScalarSummary"; + private WriteScalarSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java index a538b5a4cfd..6d257f948e8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java @@ -55,6 +55,9 @@ public static WriteSummary create(Scope scope, Operand writ return new WriteSummary(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WriteSummary"; + private WriteSummary(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/AllToAll.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/AllToAll.java index 615657b1408..9bbac83ac2c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/AllToAll.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/AllToAll.java @@ -90,6 +90,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AllToAll"; + private Output output; private AllToAll(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CollectivePermute.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CollectivePermute.java index 5b298bc1630..bafa9a893f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CollectivePermute.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CollectivePermute.java @@ -71,6 +71,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CollectivePermute"; + private Output output; private CollectivePermute(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureDistributedTPU.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureDistributedTPU.java index 73f1bfceb3e..bfdde5b98e2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureDistributedTPU.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureDistributedTPU.java @@ -170,6 +170,9 @@ public Output asOutput() { return topology; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConfigureDistributedTPU"; + private Output topology; private ConfigureDistributedTPU(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java index d1fb1fa838d..1905a3082b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java @@ -45,6 +45,9 @@ public static ConfigureTPUEmbedding create(Scope scope, String config) { return new ConfigureTPUEmbedding(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConfigureTPUEmbedding"; + private ConfigureTPUEmbedding(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CrossReplicaSum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CrossReplicaSum.java index 2c257fb6d2f..79dc79410a1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CrossReplicaSum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/CrossReplicaSum.java @@ -74,6 +74,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CrossReplicaSum"; + private Output output; private CrossReplicaSum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java index 7b499d87664..4198c38e11c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java @@ -90,6 +90,9 @@ public static Options deviceOrdinal(Long deviceOrdinal) { return new Options().deviceOrdinal(deviceOrdinal); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EnqueueTPUEmbeddingIntegerBatch"; + private EnqueueTPUEmbeddingIntegerBatch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java index 35185704d89..23288018938 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java @@ -143,6 +143,9 @@ public static Options combiners(List combiners) { return new Options().combiners(combiners); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EnqueueTPUEmbeddingSparseBatch"; + private EnqueueTPUEmbeddingSparseBatch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java index 5e4bf1c6b27..59018e1b3e5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java @@ -175,6 +175,9 @@ public static Options maxSequenceLengths(List maxSequenceLengths) { return new Options().maxSequenceLengths(maxSequenceLengths); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EnqueueTPUEmbeddingSparseTensorBatch"; + private EnqueueTPUEmbeddingSparseTensorBatch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeue.java index 19a5528dd5d..ad4d5f52fa8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeue.java @@ -65,6 +65,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InfeedDequeue"; + private Output output; private InfeedDequeue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeueTuple.java index 3e9fe720ca9..f471da5b5d7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedDequeueTuple.java @@ -75,6 +75,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InfeedDequeueTuple"; + private List> outputs; private InfeedDequeueTuple(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java index f40a1b7c5c4..9c79df444e3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java @@ -132,6 +132,9 @@ public static Options deviceOrdinal(Long deviceOrdinal) { return new Options().deviceOrdinal(deviceOrdinal); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InfeedEnqueue"; + private InfeedEnqueue(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java index cdd475a08ae..b1d32f70ec9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java @@ -81,6 +81,9 @@ public static Options deviceOrdinal(Long deviceOrdinal) { return new Options().deviceOrdinal(deviceOrdinal); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InfeedEnqueuePrelinearizedBuffer"; + private InfeedEnqueuePrelinearizedBuffer(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java index c97a792ae7d..d2a95d84244 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java @@ -121,6 +121,9 @@ public static Options deviceOrdinal(Long deviceOrdinal) { return new Options().deviceOrdinal(deviceOrdinal); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InfeedEnqueueTuple"; + private InfeedEnqueueTuple(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java index 1222247d109..9e60fae350e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingADAMParameters"; + private LoadTPUEmbeddingADAMParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java index 53af351f736..58cfa5cf465 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java @@ -134,6 +134,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingADAMParametersGradAccumDebug"; + private LoadTPUEmbeddingADAMParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java index 66e2bc9a3d4..e4f4228f0f1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingAdadeltaParameters"; + private LoadTPUEmbeddingAdadeltaParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java index d659eb12ec3..76af15dc0b6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java @@ -134,6 +134,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingAdadeltaParametersGradAccumDebug"; + private LoadTPUEmbeddingAdadeltaParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java index 80b424e073c..dc4f5c62341 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java @@ -130,6 +130,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingAdagradParameters"; + private LoadTPUEmbeddingAdagradParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java index de11b50f1f9..6551f875f2d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingAdagradParametersGradAccumDebug"; + private LoadTPUEmbeddingAdagradParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java index b7bbb92fa90..d4a0103654c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java @@ -134,6 +134,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingCenteredRMSPropParameters"; + private LoadTPUEmbeddingCenteredRMSPropParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java index 7939230997f..a65301f6348 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingFTRLParameters"; + private LoadTPUEmbeddingFTRLParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java index 38ebb8518bd..5a1c165428d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java @@ -134,6 +134,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingFTRLParametersGradAccumDebug"; + private LoadTPUEmbeddingFTRLParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java index 7d0f7d014c3..407cf842f19 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java @@ -134,6 +134,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingMDLAdagradLightParameters"; + private LoadTPUEmbeddingMDLAdagradLightParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java index c705213c9a2..35b8479749b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java @@ -130,6 +130,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingMomentumParameters"; + private LoadTPUEmbeddingMomentumParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java index d774094df05..babc2de15fd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingMomentumParametersGradAccumDebug"; + private LoadTPUEmbeddingMomentumParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java index 57db2202b99..0ebad625abe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java @@ -130,6 +130,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingProximalAdagradParameters"; + private LoadTPUEmbeddingProximalAdagradParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java index 40eec1594f1..80b05d47203 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug"; + private LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java index 88e2c035ce8..d0e39d22edb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java @@ -132,6 +132,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingRMSPropParameters"; + private LoadTPUEmbeddingRMSPropParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java index 6e79a29f987..98f1043a768 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java @@ -134,6 +134,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingRMSPropParametersGradAccumDebug"; + private LoadTPUEmbeddingRMSPropParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java index 32b34ea6262..ca881823239 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java @@ -128,6 +128,9 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingStochasticGradientDescentParameters"; + private LoadTPUEmbeddingStochasticGradientDescentParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeue.java index 2e822837449..3be811cd039 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeue.java @@ -105,6 +105,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OutfeedDequeue"; + private Output output; private OutfeedDequeue(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeueTuple.java index b7c2f10fcac..6b9110232d8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedDequeueTuple.java @@ -116,6 +116,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OutfeedDequeueTuple"; + private List> outputs; private OutfeedDequeueTuple(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java index 16e8733bc55..46ee54430d9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java @@ -46,6 +46,9 @@ public static OutfeedEnqueue create(Scope scope, Operand in return new OutfeedEnqueue(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OutfeedEnqueue"; + private OutfeedEnqueue(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java index 43972c6f64a..25d110f1114 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java @@ -47,6 +47,9 @@ public static OutfeedEnqueueTuple create(Scope scope, Iterable> input return new OutfeedEnqueueTuple(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "OutfeedEnqueueTuple"; + private OutfeedEnqueueTuple(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/Prelinearize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/Prelinearize.java index 78b0e38f4ae..c5c9573fb75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/Prelinearize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/Prelinearize.java @@ -122,6 +122,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "Prelinearize"; + private Output output; private Prelinearize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/PrelinearizeTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/PrelinearizeTuple.java index cc5a77b7fe4..6ff29f7b63a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/PrelinearizeTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/PrelinearizeTuple.java @@ -112,6 +112,9 @@ public Output asOutput() { return (Output) output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PrelinearizeTuple"; + private Output output; private PrelinearizeTuple(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RecvTPUEmbeddingActivations.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RecvTPUEmbeddingActivations.java index 9ed8bdf75bc..e2bacade157 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RecvTPUEmbeddingActivations.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RecvTPUEmbeddingActivations.java @@ -74,6 +74,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RecvTPUEmbeddingActivations"; + private List> outputs; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParameters.java index 9f14bc5f984..6201ed4b9eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParameters.java @@ -146,6 +146,9 @@ public Output velocities() { return velocities; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingADAMParameters"; + private Output parameters; private Output momenta; private Output velocities; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java index ba7a9aebf01..423fc97541e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingADAMParametersGradAccumDebug.java @@ -153,6 +153,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingADAMParametersGradAccumDebug"; + private Output parameters; private Output momenta; private Output velocities; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParameters.java index b7235410fa1..9a00080e017 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParameters.java @@ -146,6 +146,9 @@ public Output updates() { return updates; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingAdadeltaParameters"; + private Output parameters; private Output accumulators; private Output updates; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java index 5b563e92d70..3fec5d6a6f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug.java @@ -153,6 +153,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingAdadeltaParametersGradAccumDebug"; + private Output parameters; private Output accumulators; private Output updates; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParameters.java index f79703b3de7..07ed32ae1f9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParameters.java @@ -139,6 +139,9 @@ public Output accumulators() { return accumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingAdagradParameters"; + private Output parameters; private Output accumulators; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java index 1ebf1ee8bee..39a8a7ab791 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingAdagradParametersGradAccumDebug.java @@ -146,6 +146,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingAdagradParametersGradAccumDebug"; + private Output parameters; private Output accumulators; private Output gradientAccumulators; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingCenteredRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingCenteredRMSPropParameters.java index 69fc77119ce..800cbd10aff 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingCenteredRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingCenteredRMSPropParameters.java @@ -153,6 +153,9 @@ public Output mg() { return mg; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingCenteredRMSPropParameters"; + private Output parameters; private Output ms; private Output mom; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParameters.java index 556a2b5faa7..0e7114d3744 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParameters.java @@ -146,6 +146,9 @@ public Output linears() { return linears; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingFTRLParameters"; + private Output parameters; private Output accumulators; private Output linears; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java index f80357dd124..2dbff3ea109 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingFTRLParametersGradAccumDebug.java @@ -153,6 +153,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingFTRLParametersGradAccumDebug"; + private Output parameters; private Output accumulators; private Output linears; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMDLAdagradLightParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMDLAdagradLightParameters.java index 4b1ef14db2b..aa4be2cb318 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMDLAdagradLightParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMDLAdagradLightParameters.java @@ -153,6 +153,9 @@ public Output benefits() { return benefits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingMDLAdagradLightParameters"; + private Output parameters; private Output accumulators; private Output weights; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParameters.java index 72732a3da00..7f397adda1c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParameters.java @@ -139,6 +139,9 @@ public Output momenta() { return momenta; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingMomentumParameters"; + private Output parameters; private Output momenta; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java index b8398bf62e9..15aceae7f2a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingMomentumParametersGradAccumDebug.java @@ -146,6 +146,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingMomentumParametersGradAccumDebug"; + private Output parameters; private Output momenta; private Output gradientAccumulators; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParameters.java index 43c9daa0f1a..4f20964f27f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParameters.java @@ -139,6 +139,9 @@ public Output accumulators() { return accumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingProximalAdagradParameters"; + private Output parameters; private Output accumulators; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java index 982e7c8bd44..abde61ec5a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug.java @@ -146,6 +146,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingProximalAdagradParametersGradAccumDebug"; + private Output parameters; private Output accumulators; private Output gradientAccumulators; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParameters.java index 393cc2c482d..fcc01589e38 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParameters.java @@ -146,6 +146,9 @@ public Output mom() { return mom; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingRMSPropParameters"; + private Output parameters; private Output ms; private Output mom; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java index 2e65ab437da..0c3814b23b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug.java @@ -153,6 +153,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingRMSPropParametersGradAccumDebug"; + private Output parameters; private Output ms; private Output mom; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java index c98b2b5f7a8..e69247fa0ce 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParameters.java @@ -138,6 +138,9 @@ public Output asOutput() { return parameters; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingStochasticGradientDescentParameters"; + private Output parameters; private RetrieveTPUEmbeddingStochasticGradientDescentParameters(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java index 87b07cd2b8a..25d25c1d5bf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java @@ -61,6 +61,9 @@ public static SendTPUEmbeddingGradients create(Scope scope, Iterable asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TPUCompilationResult"; + private Output output; private TPUCompilationResult(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUEmbeddingActivations.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUEmbeddingActivations.java index 5473e957471..138a7434106 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUEmbeddingActivations.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUEmbeddingActivations.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TPUEmbeddingActivations"; + private Output output; private TPUEmbeddingActivations(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUOrdinalSelector.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUOrdinalSelector.java index 156f4b779fe..2df183cb793 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUOrdinalSelector.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUOrdinalSelector.java @@ -61,6 +61,9 @@ public Output asOutput() { return deviceOrdinals; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TPUOrdinalSelector"; + private Output deviceOrdinals; private TPUOrdinalSelector(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicateMetadata.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicateMetadata.java index 547c12d64e4..4cc6056c8bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicateMetadata.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicateMetadata.java @@ -249,6 +249,9 @@ public static Options allowSoftPlacement(Boolean allowSoftPlacement) { return new Options().allowSoftPlacement(allowSoftPlacement); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TPUReplicateMetadata"; + private TPUReplicateMetadata(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedInput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedInput.java index 157cb366d65..a2df9260990 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedInput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedInput.java @@ -126,6 +126,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TPUReplicatedInput"; + private Output output; private TPUReplicatedInput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedOutput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedOutput.java index 0c169b3008d..24c9418b0c3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedOutput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/TPUReplicatedOutput.java @@ -76,6 +76,9 @@ public Iterator> iterator() { return (Iterator) outputs.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TPUReplicatedOutput"; + private List> outputs; @SuppressWarnings("unchecked") diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/WorkerHeartbeat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/WorkerHeartbeat.java index bb35afe9d09..49895008bd2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/WorkerHeartbeat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/WorkerHeartbeat.java @@ -62,6 +62,9 @@ public Output asOutput() { return response; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "WorkerHeartbeat"; + private Output response; private WorkerHeartbeat(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java index c493d6daa72..82583bd691e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorApplyGradient.java @@ -55,6 +55,9 @@ public static AccumulatorApplyGradient create(Scope scope, Ope return new AccumulatorApplyGradient(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AccumulatorApplyGradient"; + private AccumulatorApplyGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java index 8146deccf7d..9fca915c550 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorNumAccumulated.java @@ -61,6 +61,9 @@ public Output asOutput() { return numAccumulated; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AccumulatorNumAccumulated"; + private Output numAccumulated; private AccumulatorNumAccumulated(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java index 747fcc6b123..b57bb702669 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java @@ -53,6 +53,9 @@ public static AccumulatorSetGlobalStep create(Scope scope, Operand hand return new AccumulatorSetGlobalStep(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AccumulatorSetGlobalStep"; + private AccumulatorSetGlobalStep(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java index 23f24d3f675..51de5485845 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorTakeGradient.java @@ -76,6 +76,9 @@ public Output asOutput() { return average; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AccumulatorTakeGradient"; + private Output average; private AccumulatorTakeGradient(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdaMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdaMax.java index 8153a364508..1b24ac1fe26 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdaMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdaMax.java @@ -119,6 +119,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAdaMax"; + private Output out; private ApplyAdaMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdadelta.java index 928e2ae0f4e..7e68618da7d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdadelta.java @@ -115,6 +115,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAdadelta"; + private Output out; private ApplyAdadelta(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagrad.java index 2a88b987503..c8311ac541a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagrad.java @@ -128,6 +128,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAdagrad"; + private Output out; private ApplyAdagrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java index e03d521353b..3bb9f9cae4b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradDa.java @@ -113,6 +113,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAdagradDA"; + private Output out; private ApplyAdagradDa(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradV2.java index aeaaddb103c..da399e31eda 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdagradV2.java @@ -129,6 +129,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAdagradV2"; + private Output out; private ApplyAdagradV2(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdam.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdam.java index c6b93126708..31d98fa299b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdam.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAdam.java @@ -142,6 +142,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAdam"; + private Output out; private ApplyAdam(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAddSign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAddSign.java index d7ca57e1dce..1fe2cd756af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAddSign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyAddSign.java @@ -116,6 +116,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyAddSign"; + private Output out; private ApplyAddSign(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyCenteredRmsProp.java index fb1735ca92c..22aeeed0d91 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyCenteredRmsProp.java @@ -135,6 +135,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyCenteredRMSProp"; + private Output out; private ApplyCenteredRmsProp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyFtrl.java index 54c9cab7494..fa89d721ca0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyFtrl.java @@ -124,6 +124,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyFtrlV2"; + private Output out; private ApplyFtrl(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyGradientDescent.java index 8377b0594e0..729312860fd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyGradientDescent.java @@ -102,6 +102,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyGradientDescent"; + private Output out; private ApplyGradientDescent(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyMomentum.java index dbd26f4eb9c..d7885da2e32 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyMomentum.java @@ -136,6 +136,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyMomentum"; + private Output out; private ApplyMomentum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyPowerSign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyPowerSign.java index c0332c9a840..d508e939714 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyPowerSign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyPowerSign.java @@ -116,6 +116,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyPowerSign"; + private Output out; private ApplyPowerSign(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalAdagrad.java index 0f3e9af018a..bd710eb08ca 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalAdagrad.java @@ -112,6 +112,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyProximalAdagrad"; + private Output out; private ApplyProximalAdagrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalGradientDescent.java index 7a28929d7e7..eb5e9a96dc9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyProximalGradientDescent.java @@ -109,6 +109,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyProximalGradientDescent"; + private Output out; private ApplyProximalGradientDescent(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyRmsProp.java index 53ff4e45b87..388fc062c5d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ApplyRmsProp.java @@ -125,6 +125,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ApplyRMSProp"; + private Output out; private ApplyRmsProp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/BatchMatMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/BatchMatMul.java index 6e1ae852143..3b6da5b0811 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/BatchMatMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/BatchMatMul.java @@ -141,6 +141,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BatchMatMulV2"; + private Output output; private BatchMatMul(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java index 3708f037741..f35e9f5001f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ConditionalAccumulator.java @@ -148,6 +148,9 @@ public Output asOutput() { return handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ConditionalAccumulator"; + private Output handle; private ConditionalAccumulator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java index f1d4fb5d792..e91afa44cd8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/GenerateVocabRemapping.java @@ -137,6 +137,9 @@ public Output numPresent() { return numPresent; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "GenerateVocabRemapping"; + private Output remapping; private Output numPresent; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java index 7807178f138..4fe4a27171a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java @@ -93,6 +93,9 @@ public static Options deleteOldDirs(Boolean deleteOldDirs) { return new Options().deleteOldDirs(deleteOldDirs); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "MergeV2Checkpoints"; + private MergeV2Checkpoints(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java index 1a625589a1d..f43928961a9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java @@ -65,6 +65,9 @@ public static NegTrain create(Scope scope, Operand wIn, Operand asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "PreventGradient"; + private Output output; private PreventGradient(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorApplyGradient.java index ee76a499d06..ca29897ca3d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorApplyGradient.java @@ -53,6 +53,9 @@ public static ResourceAccumulatorApplyGradient create(Scope sc return new ResourceAccumulatorApplyGradient(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceAccumulatorApplyGradient"; + private ResourceAccumulatorApplyGradient(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorNumAccumulated.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorNumAccumulated.java index 3ec9d5dc02c..628a916f659 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorNumAccumulated.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorNumAccumulated.java @@ -59,6 +59,9 @@ public Output asOutput() { return numAccumulated; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceAccumulatorNumAccumulated"; + private Output numAccumulated; private ResourceAccumulatorNumAccumulated(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java index d7f8261bc11..e04784aef48 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java @@ -51,6 +51,9 @@ public static ResourceAccumulatorSetGlobalStep create(Scope scope, Operand ha return new ResourceAccumulatorSetGlobalStep(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceAccumulatorSetGlobalStep"; + private ResourceAccumulatorSetGlobalStep(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorTakeGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorTakeGradient.java index ab334ce4cc0..c27fb1db524 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorTakeGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorTakeGradient.java @@ -74,6 +74,9 @@ public Output asOutput() { return average; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceAccumulatorTakeGradient"; + private Output average; private ResourceAccumulatorTakeGradient(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java index c22944b05c8..5efab216739 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java @@ -104,6 +104,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAdaMax"; + private ResourceApplyAdaMax(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java index 8a947bc150e..0121155a2ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java @@ -100,6 +100,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAdadelta"; + private ResourceApplyAdadelta(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java index 33ae02d0f59..4517528d8db 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java @@ -114,6 +114,9 @@ public static Options updateSlots(Boolean updateSlots) { return new Options().updateSlots(updateSlots); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAdagradV2"; + private ResourceApplyAdagrad(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java index ffb77721112..7f5b26056ac 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java @@ -98,6 +98,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAdagradDA"; + private ResourceApplyAdagradDa(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java index 8c68669fc92..20a07b4865d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java @@ -127,6 +127,9 @@ public static Options useNesterov(Boolean useNesterov) { return new Options().useNesterov(useNesterov); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAdam"; + private ResourceApplyAdam(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java index 86dcc2d06ef..ec13f10038d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java @@ -111,6 +111,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAdamWithAmsgrad"; + private ResourceApplyAdamWithAmsgrad(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java index 82489d348da..e64354ec3bb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java @@ -101,6 +101,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyAddSign"; + private ResourceApplyAddSign(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java index d76224d6022..c4c8d7c9ec7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java @@ -120,6 +120,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyCenteredRMSProp"; + private ResourceApplyCenteredRmsProp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java index 7add86848c9..6f321a053b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java @@ -109,6 +109,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyFtrlV2"; + private ResourceApplyFtrl(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java index a57d2e90a18..0e495bdd651 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java @@ -87,6 +87,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyGradientDescent"; + private ResourceApplyGradientDescent(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java index e58fd2150cd..3a986d617eb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java @@ -121,6 +121,9 @@ public static Options useNesterov(Boolean useNesterov) { return new Options().useNesterov(useNesterov); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyKerasMomentum"; + private ResourceApplyKerasMomentum(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java index 51af89430d2..bfb176edf28 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java @@ -121,6 +121,9 @@ public static Options useNesterov(Boolean useNesterov) { return new Options().useNesterov(useNesterov); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyMomentum"; + private ResourceApplyMomentum(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java index 5f035f53935..c1ba8b0ebd7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java @@ -101,6 +101,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyPowerSign"; + private ResourceApplyPowerSign(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java index e2197540e94..b51ce4698e1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java @@ -97,6 +97,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyProximalAdagrad"; + private ResourceApplyProximalAdagrad(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java index d5b9d063a95..7f9c4f4e52c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java @@ -94,6 +94,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyProximalGradientDescent"; + private ResourceApplyProximalGradientDescent(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java index f79a1202f6a..4c400f1aaa1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java @@ -110,6 +110,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyRMSProp"; + private ResourceApplyRmsProp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceConditionalAccumulator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceConditionalAccumulator.java index fe27517dee2..2935d3ca6bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceConditionalAccumulator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceConditionalAccumulator.java @@ -149,6 +149,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceConditionalAccumulator"; + private Output handle; private ResourceConditionalAccumulator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java index d64efcb9474..9a50137d196 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java @@ -98,6 +98,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyAdadelta"; + private ResourceSparseApplyAdadelta(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java index 6ece72cb637..69a3e775622 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java @@ -117,6 +117,9 @@ public static Options updateSlots(Boolean updateSlots) { return new Options().updateSlots(updateSlots); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyAdagrad"; + private ResourceSparseApplyAdagrad(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java index ad007159e6a..4f3189f074c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java @@ -101,6 +101,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyAdagradDA"; + private ResourceSparseApplyAdagradDa(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java index f8808aa3980..30e6c19da15 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java @@ -118,6 +118,9 @@ public static Options updateSlots(Boolean updateSlots) { return new Options().updateSlots(updateSlots); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyAdagradV2"; + private ResourceSparseApplyAdagradV2(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java index e9482879729..ab9b9d3c38d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java @@ -121,6 +121,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyCenteredRMSProp"; + private ResourceSparseApplyCenteredRmsProp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java index 07f2e12f9b0..3ffcb127a48 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java @@ -113,6 +113,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyFtrlV2"; + private ResourceSparseApplyFtrl(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java index e1ff036c295..0284564f78c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java @@ -126,6 +126,9 @@ public static Options useNesterov(Boolean useNesterov) { return new Options().useNesterov(useNesterov); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyKerasMomentum"; + private ResourceSparseApplyKerasMomentum(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java index 80c58d282bc..5199932b5bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java @@ -126,6 +126,9 @@ public static Options useNesterov(Boolean useNesterov) { return new Options().useNesterov(useNesterov); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyMomentum"; + private ResourceSparseApplyMomentum(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java index 75e7ca9e0f1..e235a19f5d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java @@ -102,6 +102,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyProximalAdagrad"; + private ResourceSparseApplyProximalAdagrad(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java index bf48496179c..08a9edc01c4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java @@ -98,6 +98,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyProximalGradientDescent"; + private ResourceSparseApplyProximalGradientDescent(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java index 0dc980bb6f8..982e1f30eb7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java @@ -113,6 +113,9 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyRMSProp"; + private ResourceSparseApplyRmsProp(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java index ecd4a059793..5a2466f501d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Restore.java @@ -93,6 +93,9 @@ public Iterator> iterator() { return (Iterator) tensors.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RestoreV2"; + private List> tensors; private Restore(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/RestoreSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/RestoreSlice.java index e1148129d86..631a127a44f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/RestoreSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/RestoreSlice.java @@ -116,6 +116,9 @@ public Output asOutput() { return tensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RestoreSlice"; + private Output tensor; private RestoreSlice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java index b33f1c1c33b..781714d8121 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java @@ -60,6 +60,9 @@ public static Save create(Scope scope, Operand prefix, Operand return new Save(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SaveV2"; + private Save(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java index 25c91540ede..e8e67190e63 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java @@ -86,6 +86,9 @@ public static SaveSlices create(Scope scope, Operand filename, Operand< return new SaveSlices(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SaveSlices"; + private SaveSlices(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java index b5629b59b88..cdee1af05f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaFprint.java @@ -62,6 +62,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SdcaFprint"; + private Output output; private SdcaFprint(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java index 9cf443dc4d8..a38f6773d7f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaOptimizer.java @@ -163,6 +163,9 @@ public List> outDeltaDenseWeights() { return outDeltaDenseWeights; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SdcaOptimizerV2"; + private Output outExampleStateData; private List> outDeltaSparseWeights; private List> outDeltaDenseWeights; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java index d531030e063..24c6d53ef9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java @@ -53,6 +53,9 @@ public static SdcaShrinkL1 create(Scope scope, Iterable> weigh return new SdcaShrinkL1(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SdcaShrinkL1"; + private SdcaShrinkL1(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java index 6ed5c2faee3..190449c8ca7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdadelta.java @@ -113,6 +113,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyAdadelta"; + private Output out; private SparseApplyAdadelta(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java index 90cbe36a32d..71776f4fd26 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagrad.java @@ -133,6 +133,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyAdagradV2"; + private Output out; private SparseApplyAdagrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java index 23c791a6d50..7f13dd080dd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyAdagradDa.java @@ -116,6 +116,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyAdagradDA"; + private Output out; private SparseApplyAdagradDa(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java index 367de145c5e..b73275139d1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyCenteredRmsProp.java @@ -136,6 +136,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyCenteredRMSProp"; + private Output out; private SparseApplyCenteredRmsProp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java index defb68856e6..b8bd88a291a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyFtrl.java @@ -128,6 +128,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyFtrlV2"; + private Output out; private SparseApplyFtrl(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java index ebd4d0e7c14..5e8bf197092 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyMomentum.java @@ -141,6 +141,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyMomentum"; + private Output out; private SparseApplyMomentum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java index 0a73d0a138c..19ede0d5f71 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalAdagrad.java @@ -117,6 +117,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyProximalAdagrad"; + private Output out; private SparseApplyProximalAdagrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java index 2a4ef9f900b..14735403f02 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyProximalGradientDescent.java @@ -113,6 +113,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyProximalGradientDescent"; + private Output out; private SparseApplyProximalGradientDescent(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java index 5205086b7dd..c0b39b65e5e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SparseApplyRmsProp.java @@ -128,6 +128,9 @@ public Output asOutput() { return out; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseApplyRMSProp"; + private Output out; private SparseApplyRmsProp(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java index 42d68f0f59b..1bcfde7b183 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/TileGrad.java @@ -68,6 +68,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TileGrad"; + private Output output; private TileGrad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/BroadcastHelper.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/BroadcastHelper.java index 1d8b4fe476b..e06919d04bd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/BroadcastHelper.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/BroadcastHelper.java @@ -73,6 +73,9 @@ public Output rhsOutput() { return rhsOutput; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaBroadcastHelper"; + private Output lhsOutput; private Output rhsOutput; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ClusterOutput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ClusterOutput.java index 21a978fc7a8..717b65c931e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ClusterOutput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ClusterOutput.java @@ -61,6 +61,9 @@ public Output asOutput() { return outputs; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaClusterOutput"; + private Output outputs; private ClusterOutput(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Conv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Conv.java index 7727cf1e9ac..05cec5b6d51 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Conv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Conv.java @@ -81,6 +81,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaConv"; + private Output output; private Conv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dequantize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dequantize.java index 751e47f4d5b..f8cdec66d1f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dequantize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dequantize.java @@ -73,6 +73,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaDequantize"; + private Output output; private Dequantize(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dot.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dot.java index 0f3e1ef83df..9cb83d061cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dot.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Dot.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaDot"; + private Output output; private Dot(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicSlice.java index b6ecba31189..b9e2bebf9b8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicSlice.java @@ -78,6 +78,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaDynamicSlice"; + private Output output; private DynamicSlice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicUpdateSlice.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicUpdateSlice.java index b974b64196e..dccbdd10da8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicUpdateSlice.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/DynamicUpdateSlice.java @@ -78,6 +78,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaDynamicUpdateSlice"; + private Output output; private DynamicUpdateSlice(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Einsum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Einsum.java index f5bf706641a..451fb27bc49 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Einsum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Einsum.java @@ -68,6 +68,9 @@ public Output asOutput() { return product; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaEinsum"; + private Output product; private Einsum(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Gather.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Gather.java index d5b3298b395..9daa1808620 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Gather.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Gather.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaGather"; + private Output output; private Gather(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/KeyValueSort.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/KeyValueSort.java index 9fd5e4c774d..d1cf154bd8a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/KeyValueSort.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/KeyValueSort.java @@ -73,6 +73,9 @@ public Output sortedValues() { return sortedValues; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaKeyValueSort"; + private Output sortedKeys; private Output sortedValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Pad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Pad.java index eafaf001168..c56631c48f2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Pad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Pad.java @@ -74,6 +74,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaPad"; + private Output output; private Pad(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Recv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Recv.java index 03274eb84e6..fe26ee27587 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Recv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Recv.java @@ -71,6 +71,9 @@ public Output asOutput() { return tensor; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaRecv"; + private Output tensor; private Recv(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ReplicaId.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ReplicaId.java index a27b87f6c1a..886cc40b3ab 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ReplicaId.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/ReplicaId.java @@ -57,6 +57,9 @@ public Output asOutput() { return id; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaReplicaId"; + private Output id; private ReplicaId(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/SelfAdjointEig.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/SelfAdjointEig.java index abbecd3e54b..9ce4468fdfe 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/SelfAdjointEig.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/SelfAdjointEig.java @@ -82,6 +82,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSelfAdjointEig"; + private Output w; private Output v; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java index 3e060842de3..d1172f8e96f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java @@ -52,6 +52,9 @@ public static Send create(Scope scope, Operand tensor, Stri return new Send(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSend"; + private Send(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sharding.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sharding.java index d8d879183d2..dbc255aa607 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sharding.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sharding.java @@ -61,6 +61,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSharding"; + private Output output; private Sharding(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sort.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sort.java index abafbd5e286..d7f9aae6449 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sort.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Sort.java @@ -67,6 +67,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSort"; + private Output output; private Sort(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Svd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Svd.java index e3571702151..cd0a67f33b4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Svd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Svd.java @@ -86,6 +86,9 @@ public Output v() { return v; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSvd"; + private Output s; private Output u; private Output v; From 208b84a1a09d38ab9821d66572c1328326685c5a Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 10:42:22 -0400 Subject: [PATCH 09/55] fix dependencies for other Tensorflow Java modules --- tensorflow-keras/pom.xml | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/tensorflow-keras/pom.xml b/tensorflow-keras/pom.xml index c314b53bcc0..b33d1201fd9 100644 --- a/tensorflow-keras/pom.xml +++ b/tensorflow-keras/pom.xml @@ -27,22 +27,17 @@ tensorflow-keras jar - TensorFlow Keras Library + Java implementation of the TensorFlow Keras API + - Java implementation of the TensorFlow Keras API org.tensorflow - tensorflow-core-api - ${project.version} - - - org.tensorflow - tensorflow-core-generator + tensorflow-core-platform ${project.version} @@ -50,18 +45,6 @@ tensorflow-framework ${project.version} - - org.tensorflow - ndarray - ${project.version} - - - - com.google.protobuf - protobuf-java - 3.11.4 - - org.json json @@ -73,12 +56,6 @@ commons-csv 1.8 - - - org.tensorflow - tensorflow-core-platform - ${project.version} - org.junit.jupiter junit-jupiter-api From 39131619f3a4c970f5f62dacdbaa93ac3f9bf996 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 10:46:20 -0400 Subject: [PATCH 10/55] formatting fix --- .../java/org/tensorflow/keras/utils/EagerTestSession.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java index 3bc8091811a..6b7ebf9e2f2 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java @@ -56,10 +56,10 @@ public Ops getTF() { return tf; } - /** - * Get the TensorFlow EagerSession instance - * @return the TensorFlow EagerSession instance - */ + /** + * Get the TensorFlow EagerSession instance + * @return the TensorFlow EagerSession instance + */ public EagerSession getSession() { return session; } From b5a7c0f9f54acf1fb0f57003027aa0843ae67c82 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 10:48:23 -0400 Subject: [PATCH 11/55] Fix ctors with name to properly pass the name to the the super ctor. --- .../keras/{optimizer => optimizers}/AdaDelta.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/AdaDelta.java (92%) diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java similarity index 92% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java index f02d2664759..b0a9dcf7d68 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaDelta.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java @@ -19,7 +19,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; -import org.tensorflow.keras.backend.tf.ControlDependencies; import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; @@ -33,7 +32,6 @@ *

Two accumulation steps are required: 1) the accumulation of gradients squared, 2) the * accumulation of updates squared. * - * @param The Type for the call operation */ public class AdaDelta extends org.tensorflow.framework.optimizers.AdaDelta implements OptimizerInterface { @@ -69,7 +67,7 @@ public AdaDelta(Ops tf) { * @param name the name of the Optimizer, defaults to "Adadelta" */ public AdaDelta(Ops tf, String name) { - this(tf, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); + this(tf, name, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); } /** @@ -90,7 +88,7 @@ public AdaDelta(Ops tf, float learningRate) { * @param learningRate The learning rate */ public AdaDelta(Ops tf, String name, float learningRate) { - this(tf, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); + this(tf, name, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); } /** @@ -129,15 +127,14 @@ protected Optional prepare(String name) { case 1: return Optional.of(initializers.get(0)); default: - return Optional.of( - ControlDependencies.addControlDependencies(tf, this.getOptimizerName(), initializers)); + return Optional.of( tf.withSubScope(name).withControlDependencies(initializers).noOp()); } } /** * Create an Adam Optimizer from a config object * - * @param graph the tensorflow graph + * @param tf the tensorflow Ops * @param config a config object to initialize, he config object has keys for "name", * "learning_rate", "rho" and "epsilon". If a key is missing the default value is used. */ @@ -148,7 +145,8 @@ public static AdaDelta fromConfig(Ops tf, Map config) { /** * Create an Adadelta optimizer * - * @param graph the tensorflow graph @@param config a config object to initialize, the config + * @param tf the tensorflow Ops + * @param config a config object to initialize, the config * object has keys for "name", "learning_rate", "rho" and "epsilon". If a key is missing the * default value is used. */ From fcba0a525d4712fca5210db71c141bc1bce87307 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 13:04:27 -0400 Subject: [PATCH 12/55] change asserts to IllegalArgumentException fix javadoc, fix casts --- .../{optimizer => optimizers}/Nadam.java | 47 +++++++++---------- 1 file changed, 22 insertions(+), 25 deletions(-) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/Nadam.java (92%) diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java similarity index 92% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java index 4772c247ef8..a2eba4ecb49 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Nadam.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java @@ -18,15 +18,15 @@ import java.util.List; import java.util.Map; import java.util.Optional; + +import org.tensorflow.DataType; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; -import org.tensorflow.op.Scope; import org.tensorflow.op.core.Assign; import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; @@ -52,7 +52,6 @@ public class Nadam extends org.tensorflow.framework.optimizers.Optimizer public static final float BETA_ONE_DEFAULT = 0.9F; public static final float BETA_TWO_DEFAULT = 0.999F; - private Scope scope; private final Map config = new HashMap<>(); private float learningRate; @@ -144,7 +143,6 @@ public Nadam(Ops tf, float learningRate, float betaOne, float betaTwo, float eps this.betaOne = betaOne; this.betaTwo = betaTwo; this.epsilon = epsilon; - this.scope = tf.scope(); initConfig(learningRate, betaOne, betaTwo, epsilon); } @@ -165,7 +163,6 @@ public Nadam( this.betaOne = betaOne; this.betaTwo = betaTwo; this.epsilon = epsilon; - this.scope = tf.scope(); initConfig(learningRate, betaOne, betaTwo, epsilon); } @@ -228,6 +225,7 @@ protected void createSlots(List> variables) { /** * Create slots for first and second momements and momentum + * * @param v the variable * @param the data type or the Variable */ @@ -247,8 +245,8 @@ private void createNadamSlot(Output v) { /** {@inheritDoc} */ @Override protected Optional prepare(String scopeName) { - Constant one = tf.constant(1.0F); - Constant point5 = tf.constant(0.5F); + Constant one = tf.constant(1.0F); + Constant point5 = tf.constant(0.5F); learningRateConst = tf.constant(learningRate); betaOneConst = tf.constant(betaOne); @@ -310,47 +308,50 @@ protected Optional prepare(String scopeName) { /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { + DataType dType = gradient.dataType(); Variable m = getSlot(variable, FIRST_MOMENT).get(); // first Moment Variable v = getSlot(variable, SECOND_MOMENT).get(); // Second Moment // g_prime = grad / coefficients['one_minus_m_schedule_new'] - Operand g_prime = tf.math.div((Operand) gradient, one_minus_m_schedule_new); + Operand g_prime = tf.math.div(gradient, tf.dtypes.cast(one_minus_m_schedule_new, dType)); // m_t = (coefficients['beta_1_t'] * m + coefficients['one_minus_beta_1_t'] * grad) - Operand m_t = + Operand m_t = tf.math.add( - tf.math.mul(betaOneConst, (Operand) m), - tf.math.mul(one_minus_beta_1, (Operand) gradient)); + tf.math.mul(tf.dtypes.cast(betaOneConst, dType), m), + tf.math.mul(tf.dtypes.cast(one_minus_beta_1, dType), gradient)); // m_t = state_ops.assign(m, m_t, use_locking=self._use_locking) // update m m_t = tf.assign(m, m_t, Assign.useLocking(true)); // m_t_prime = m_t / coefficients['one_minus_m_schedule_next'] - Operand m_t_prime = tf.math.div(m_t, one_minus_m_schedule_next); + Operand m_t_prime = tf.math.div(m_t, tf.dtypes.cast(one_minus_m_schedule_next, dType)); // v_t = (coefficients['beta_2_t'] * v + coefficients['one_minus_beta_2_t'] * // math_ops.square(grad)) - Operand v_t = + Operand v_t = tf.math.add( - tf.math.mul(betaTwoConst, (Operand) v), - tf.math.mul(one_minus_beta_2, tf.math.square((Operand) gradient))); + tf.math.mul(tf.dtypes.cast(betaTwoConst, dType), v), + tf.math.mul(tf.dtypes.cast(one_minus_beta_2, dType), tf.math.square(gradient))); // v_t = state_ops.assign(v, v_t, use_locking=self._use_locking) // update v v_t = tf.assign(v, v_t, Assign.useLocking(true)); // v_t_prime = v_t / coefficients['v_t_prime_denominator'] - Operand v_t_prime = tf.math.div(v_t, v_t_prime_denominator); + Operand v_t_prime = tf.math.div(v_t, tf.dtypes.cast(v_t_prime_denominator, dType)); // m_t_bar = (coefficients['one_minus_m_t'] * g_prime + coefficients['m_t_1'] * m_t_prime) - Operand m_t_bar = - tf.math.add(tf.math.mul(one_minus_m_t, g_prime), tf.math.mul(m_t_1, m_t_prime)); + Operand m_t_bar = + tf.math.add( + tf.math.mul(tf.dtypes.cast(one_minus_m_t, dType), g_prime), + tf.math.mul(tf.dtypes.cast(m_t_1, dType), m_t_prime)); // var_t = var - coefficients['lr_t'] * m_t_bar / (math_ops.sqrt(v_t_prime) + // coefficients['epsilon']) - Operand var_t = + Operand var_t = tf.math.sub( variable, tf.math.div( - tf.math.mul(learningRateConst, m_t_bar), - tf.math.add(tf.math.sqrt(v_t_prime), epsilonConst))); + tf.math.mul(tf.dtypes.cast(learningRateConst, dType), m_t_bar), + tf.math.add(tf.math.sqrt(v_t_prime), tf.dtypes.cast(epsilonConst, dType)))); // assign(var, var_t, use_locking=self._use_locking) return tf.assign(variable, var_t, Assign.useLocking(true)); } @@ -395,8 +396,4 @@ private void initConfig(float learningRate, float betaOne, float betaTwo, float config.put(BETA_ONE_KEY, betaOne); config.put(BETA_TWO_KEY, betaTwo); } - - private float calcM(int iteration) { - return betaOne * (1 - .05F * (float) Math.pow(this.decayBase, this.decay * iteration)); - } } From 960cfc3ca4e010fca3bd549df6d16a17fb0b22bc Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 13:05:22 -0400 Subject: [PATCH 13/55] change asserts to IllegalArgumentException --- .../{optimizer => optimizers}/AdaGrad.java | 12 +++---- .../{optimizer => optimizers}/AdaGradDA.java | 21 ++++++----- .../keras/{optimizer => optimizers}/Adam.java | 0 .../{optimizer => optimizers}/Adamax.java | 0 .../keras/{optimizer => optimizers}/Ftrl.java | 36 +++++++++++-------- .../OptimizerInterface.java | 16 +++++---- .../{optimizer => optimizers}/Optimizers.java | 35 +++++++++--------- .../{optimizer => optimizers}/RMSProp.java | 0 .../keras/{optimizer => optimizers}/SGD.java | 7 ++-- 9 files changed, 71 insertions(+), 56 deletions(-) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/AdaGrad.java (94%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/AdaGradDA.java (88%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/Adam.java (100%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/Adamax.java (100%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/Ftrl.java (87%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/OptimizerInterface.java (76%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/Optimizers.java (80%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/RMSProp.java (100%) rename tensorflow-keras/src/main/java/org/tensorflow/keras/{optimizer => optimizers}/SGD.java (96%) diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java similarity index 94% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java index 6010a95b199..039cf4a0d82 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGrad.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java @@ -99,15 +99,15 @@ public AdaGrad(Ops tf, float learningRate, float initialAccumulatorValue) { */ public AdaGrad(Ops tf, String name, float learningRate, float initialAccumulatorValue) { super(assertGraph(tf), name, learningRate, initialAccumulatorValue); - assert initialAccumulatorValue >= 0.0F - : "initial_accumulator_value must be non-negative: " + initialAccumulatorValue; + if(initialAccumulatorValue < 0.0F) + throw new IllegalArgumentException( "initial_accumulator_value must be non-negative: " + initialAccumulatorValue); initConfig(learningRate, initialAccumulatorValue); } /** * Create an AdaGrad Optimizer from a config object * - * @param graph the tensorflow graph + * @param tf the TensorFlow Ops * @param config a config object to initialize, , the config object has keys for "name", * "learning_rate" and "accumulator". If a key is missing the default value is used. */ @@ -118,7 +118,7 @@ public static AdaGrad fromConfig(Ops tf, Map config) { /** * Create an AdaGrad Optimizer from a config object * - * @param graph the tensorflow graph + * @param tf the TensorFlow Ops * @param config a config object to initialize, the config object has keys for "name", * "learning_rate" and "accumulator". If a key is missing the default value is used. */ @@ -137,8 +137,8 @@ public static AdaGrad create(Ops tf, Map config) { /** * Initialize the configuration * - * @param learningRate - * @param initialAccumulatorValue + * @param learningRate the learning rate + * @param initialAccumulatorValue the initial Accumulator value */ private void initConfig(float learningRate, float initialAccumulatorValue) { this.learningRate = learningRate; diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java similarity index 88% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java index d7ee03338c8..2f15024bf56 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/AdaGradDA.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java @@ -85,10 +85,12 @@ public AdaGradDA( float l1Strength, float l2Strength) { super(assertGraph(tf), learningRate, initialAccumulatorValue, l1Strength, l2Strength); - assert initialAccumulatorValue >= 0.0F - : "initial_accumulator_value must be non-negative: " + initialAccumulatorValue; - assert l1Strength >= 0.0F : "l1Strength must be non-negative: " + l1Strength; - assert l2Strength >= 0.0F : "l2Strength must be non-negative: " + l2Strength; + if( initialAccumulatorValue < 0.0F) + throw new IllegalArgumentException("initial_accumulator_value must be non-negative: " + initialAccumulatorValue); + if(l1Strength < 0) + throw new IllegalArgumentException("l1Strength must be non-negative: " + l1Strength); + if(l2Strength < 0) + throw new IllegalArgumentException("l2Strength must be non-negative: " + l2Strength); initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); } @@ -110,10 +112,13 @@ public AdaGradDA( float l1Strength, float l2Strength) { super(assertGraph(tf), name, learningRate, initialAccumulatorValue, l1Strength, l2Strength); - assert initialAccumulatorValue >= 0.0F - : "initial_accumulator_value must be non-negative: " + initialAccumulatorValue; - assert l1Strength >= 0.0F : "l1Strength must be non-negative: " + l1Strength; - assert l2Strength >= 0.0F : "l2Strength must be non-negative: " + l2Strength; + if( initialAccumulatorValue < 0.0F) + throw new IllegalArgumentException("initial_accumulator_value must be non-negative: " + initialAccumulatorValue); + if(l1Strength < 0) + throw new IllegalArgumentException("l1Strength must be non-negative: " + l1Strength); + if(l2Strength < 0) + throw new IllegalArgumentException("l2Strength must be non-negative: " + l2Strength); + initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); } diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adam.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adam.java similarity index 100% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adam.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adam.java diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adamax.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adamax.java similarity index 100% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Adamax.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adamax.java diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Ftrl.java similarity index 87% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Ftrl.java index aec7af8d6c9..db73f60c77e 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Ftrl.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Ftrl.java @@ -31,7 +31,7 @@ import org.tensorflow.types.TFloat32; import org.tensorflow.types.family.TType; -/** Ftrl Optimizer that implements the FTRL algorithm. */ +/** Ftrl (Follow the Regularized Leader) Optimizer that implements the FTRL algorithm. */ public class Ftrl extends org.tensorflow.framework.optimizers.Optimizer implements OptimizerInterface { @@ -140,11 +140,15 @@ public Ftrl(Ops tf, String name, float learningRate) { * * @param tf the TensorFlow Ops * @param learningRate the learning rate - * @param learningRatePower - * @param initialAccumulatorValue - * @param l1Strength - * @param l2Strength - * @param l2ShrinkageRegularizationStrength + * @param learningRatePower Controls how the learning rate decreases during training. Use zero for + * a fixed learning rate. + * @param initialAccumulatorValue The starting value for accumulators. Only zero or positive + * values are allowed. + * @param l1Strength the L1 Regularization strength, must be greater than or equal to zero. + * @param l2Strength the L2 Regularization strength, must be greater than or equal to zero. + * @param l2ShrinkageRegularizationStrength This differs from L2 above in that the L2 above is a + * stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. must be greater + * than or equal to zero. */ public Ftrl( Ops tf, @@ -170,13 +174,17 @@ public Ftrl( * Create a Ftrl Optimizer * * @param tf the TensorFlow Ops - * @param name the Optmizer name + * @param name the name of this Ftrl Optimizer * @param learningRate the learning rate - * @param learningRatePower - * @param initialAccumulatorValue - * @param l1Strength - * @param l2Strength - * @param l2ShrinkageRegularizationStrength + * @param learningRatePower Controls how the learning rate decreases during training. Use zero for + * a fixed learning rate. + * @param initialAccumulatorValue The starting value for accumulators. Only zero or positive + * values are allowed. + * @param l1Strength the L1 Regularization strength, must be greater than or equal to zero. + * @param l2Strength the L2 Regularization strength, must be greater than or equal to zero. + * @param l2ShrinkageRegularizationStrength This differs from L2 above in that the L2 above is a + * stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. must be greater + * than or equal to zero. */ public Ftrl( Ops tf, @@ -199,8 +207,6 @@ public Ftrl( initConfig(); } - - /** * Create a Ftrl Optmizer * @@ -325,7 +331,7 @@ protected Op applyDense(Output gradient, Output variable accumSlot, // accum linearSlot, // linear gradient, // gradient - tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), // lr + tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), // lr tf.dtypes.cast(tf.constant(l1RegularizationStrength), gradient.dataType()), // l1 tf.dtypes.cast(tf.constant(l2RegularizationStrength), gradient.dataType()), // l2 tf.dtypes.cast( diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java similarity index 76% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java index 9e3223deb80..0074ecb0f0a 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/OptimizerInterface.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java @@ -22,17 +22,19 @@ public interface OptimizerInterface { /** The value for the name key in the Config object */ - public static final String NAME_KEY = "name"; + String NAME_KEY = "name"; /** * Get a TensorFlow Graph from the Ops. * * @param tf the TensorFlow Ops * @return the graph - * @throws java.lang.AssertionError if the TensorFlow Ops does not represent Graph mode + * @throws java.lang.IllegalArgumentException if the TensorFlow Ops does not represent Graph mode */ - public static Graph assertGraph(Ops tf) { - assert tf.scope().env().isGraph() : "Optimizers can only be used in Graph Mode"; + static Graph assertGraph(Ops tf) { + if(!tf.scope().env().isGraph()) { + throw new IllegalArgumentException("Invalid environment, Optimizers can only be used in Graph Mode"); + } return (Graph) tf.scope().env(); } @@ -41,19 +43,19 @@ public static Graph assertGraph(Ops tf) { * * @return the config object used to initialize the Optimizer */ - public Map getConfig(); + Map getConfig(); /** * Return the current learning rate * * @return the current learning rate */ - public float getLearningRate(); + float getLearningRate(); /** * Set the learning rate * * @param learningRate the learning rate; */ - public void setLearningRate(float learningRate); + void setLearningRate(float learningRate); } diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java similarity index 80% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java index 3892e239dad..1facb307b38 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/Optimizers.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java @@ -41,15 +41,15 @@ public class Optimizers { static Map> map = new HashMap>() { { - put("adadelta", tf -> new AdaDelta(tf)); - put("adagrad", tf -> new AdaGrad(tf)); - put("adagrad-da", tf -> new AdaGradDA(tf)); - put("adam", tf -> new Adam(tf)); - put("adamax", tf -> new Adamax(tf)); - put("ftrl", tf -> new Ftrl(tf)); - put("nadam", tf -> new Nadam(tf)); - put("rmsprop", tf -> new RMSProp(tf)); - put("sgd", tf -> new SGD(tf)); + put("adadelta", AdaDelta::new); + put("adagrad", AdaGrad::new); + put("adagrad-da", AdaGradDA::new); + put("adam", Adam::new); + put("adamax", Adamax::new); + put("ftrl", Ftrl::new); + put("nadam", Nadam::new); + put("rmsprop", RMSProp::new); + put("sgd", SGD::new); } }; @@ -65,9 +65,9 @@ public static Optimizer get(Ops tf, Object optimizerFunction) { } /** - * Get an Initializer + * Get an Optimizer * - * @param si a lamda function + * @param func a lamda function that returns the Optimizer * @return the Intializer object */ public static Optimizer get(Ops tf, Function func) { @@ -75,10 +75,11 @@ public static Optimizer get(Ops tf, Function func) { } /** - * Get an Initializer + * Get an Optimizer * - * @param optimizerFunction - * @param custom_functions a map of Initializer lambdas that will be queried if the Optimizer is + * @param optimizerFunction either a String that identifies the Optimizer, an Optimizer class, or + * * an Optimizer object. + * @param custom_functions a map of Optimizer lambdas that will be queried if the Optimizer is * not found in the standard keys * @return the Optimizer object */ @@ -95,10 +96,10 @@ public static Optimizer get( } return function != null ? function.apply(tf) : null; } else if (optimizerFunction instanceof Class) { - Class c = (Class) optimizerFunction; // do this for Java 8 rather than Pattern Matching for - // instanceof + // do this for Java 8 rather than Pattern Matching for instanceof + Class c = (Class) optimizerFunction; try { - Constructor ctor = c.getConstructor(Ops.class); + Constructor ctor = c.getConstructor(Ops.class); return (Optimizer) ctor.newInstance(tf); } catch (NoSuchMethodException | InstantiationException diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/RMSProp.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/RMSProp.java similarity index 100% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/RMSProp.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/RMSProp.java diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java similarity index 96% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java rename to tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java index 2faf777b4ad..f89682f6820 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizer/SGD.java +++ b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java @@ -16,7 +16,6 @@ import java.util.HashMap; import java.util.Map; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; import org.tensorflow.op.Ops; @@ -103,7 +102,8 @@ public SGD(Ops tf, String name, float learningRate, float momentum) { */ public SGD(Ops tf, float learningRate, float momentum, boolean useNesterov) { super(assertGraph(tf), learningRate, momentum, useNesterov); - assert momentum >= 0.0F && momentum <= 1.0F : "\"momentum\" must be between [0, 1]."; + if(momentum < 0 || momentum > 1) + throw new IllegalArgumentException("\"momentum\" must be between [0, 1]."); initConfig(learningRate, momentum, useNesterov); } @@ -119,7 +119,8 @@ public SGD(Ops tf, float learningRate, float momentum, boolean useNesterov) { */ public SGD(Ops tf, String name, float learningRate, float momentum, boolean useNesterov) { super(assertGraph(tf), name, learningRate, momentum, useNesterov); - assert momentum >= 0.0F && momentum <= 1.0F : "\"momentum\" must be between [0, 1]."; + if(momentum < 0 || momentum > 1) + throw new IllegalArgumentException("\"momentum\" must be between [0, 1]."); initConfig(learningRate, momentum, useNesterov); } From d37298a6b9dcb206cdff985b96e340f7f93a075c Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 13:06:58 -0400 Subject: [PATCH 14/55] Moved back to tests --- .../java/org/tensorflow/keras/utils/ND.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) rename tensorflow-keras/src/{main => test}/java/org/tensorflow/keras/utils/ND.java (95%) diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/ND.java similarity index 95% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java rename to tensorflow-keras/src/test/java/org/tensorflow/keras/utils/ND.java index f04ed7bcd70..2855af5af25 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ND.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/ND.java @@ -126,7 +126,8 @@ public static FloatNdArray square(FloatNdArray a) { * @return the resulting array from the add operation */ public static FloatNdArray add(FloatNdArray a, FloatNdArray b) { - assert (a.shape().size() == b.shape().size()); + if(a.shape().size() != b.shape().size()) + throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -175,7 +176,8 @@ public static FloatNdArray add(float scalar, FloatNdArray a) { * @return the resulting array from the subtraction operation */ public static FloatNdArray sub(FloatNdArray a, FloatNdArray b) { - assert (a.shape().size() == b.shape().size()); + if(a.shape().size() != b.shape().size()) + throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -230,9 +232,9 @@ public static FloatNdArray sub(float scalar, FloatNdArray a) { * @return the resulting array from the muliply operation */ public static FloatNdArray mul(FloatNdArray a, FloatNdArray b) { - assert a.shape().equals(b.shape()) - : String.format( - "ValueError: operands do not have same shapes %s %s ", a.shape(), b.shape()); + if(!a.shape().equals(b.shape())) + throw new IllegalArgumentException(String.format( + "ValueError: operands do not have same shapes %s %s ", a.shape(), b.shape())); boolean sameSize = a.shape().size() == b.shape().size(); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -287,7 +289,8 @@ public static FloatNdArray mul(float scalar, FloatNdArray a) { * @return the resulting array from the Divide operation */ public static FloatNdArray div(FloatNdArray a, FloatNdArray b) { - assert (a.shape().size() == b.shape().size()); + if(a.shape().size() != b.shape().size()) + throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -306,7 +309,8 @@ public static FloatNdArray div(FloatNdArray a, FloatNdArray b) { * @return the resulting array from the Divide operation */ public static FloatNdArray div(FloatNdArray a, float scalar) { - assert (scalar != 0); + if(scalar == 0) + throw new IllegalArgumentException("Cannot divide by zero"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -344,7 +348,8 @@ public static FloatNdArray div(float scalar, FloatNdArray a) { * @return the array result of the power operation */ public static FloatNdArray pow(FloatNdArray a, FloatNdArray b) { - assert (a.shape().size() == b.shape().size()); + if(a.shape().size() != b.shape().size()) + throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -363,7 +368,6 @@ public static FloatNdArray pow(FloatNdArray a, FloatNdArray b) { * @return the array result of the power operation */ public static FloatNdArray pow(FloatNdArray a, float scalar) { - assert (scalar != 0); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -382,7 +386,6 @@ public static FloatNdArray pow(FloatNdArray a, float scalar) { * @return the array result of the power operation */ public static FloatNdArray pow(float scalar, FloatNdArray a) { - assert (scalar != 0); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -444,7 +447,8 @@ public static float min(FloatNdArray a) { * @throws java.lang.AssertionError if the two arrays are not the same size. */ public static FloatNdArray max(FloatNdArray a, FloatNdArray b) { - assert (a.shape().size() == b.shape().size()); + if(a.shape().size() != b.shape().size()) + throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -495,7 +499,8 @@ public static FloatNdArray max(float scalar, FloatNdArray a) { * @throws java.lang.AssertionError if the two arrays are not the same size. */ public static FloatNdArray min(FloatNdArray a, FloatNdArray b) { - assert (a.shape().size() == b.shape().size()); + if(a.shape().size() != b.shape().size()) + throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) From c68812cc9c8815b0ea186f273748078c4907fbaa Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 13:08:44 -0400 Subject: [PATCH 15/55] Moved SoftmaxCrossEntropyWithLogits.java and SparseSoftmaxCrossEntropyWithLogits.java to nn.raw, added new versions of these to NnOps --- .../annotations/org/tensorflow/op/NnOps.java | 139 ++++++++++++++---- 1 file changed, 108 insertions(+), 31 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java index 0c76b961cf4..a0910d4be33 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java @@ -20,6 +20,7 @@ import java.util.List; import org.tensorflow.DataType; import org.tensorflow.Operand; +import org.tensorflow.op.core.NN; import org.tensorflow.op.nn.AvgPool; import org.tensorflow.op.nn.AvgPool3d; import org.tensorflow.op.nn.AvgPool3dGrad; @@ -84,11 +85,9 @@ import org.tensorflow.op.nn.Relu6; import org.tensorflow.op.nn.Selu; import org.tensorflow.op.nn.Softmax; -import org.tensorflow.op.nn.SoftmaxCrossEntropyWithLogits; import org.tensorflow.op.nn.Softsign; import org.tensorflow.op.nn.SpaceToBatch; import org.tensorflow.op.nn.SpaceToDepth; -import org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits; import org.tensorflow.op.nn.TopK; import org.tensorflow.types.TFloat32; import org.tensorflow.types.TInt32; @@ -102,10 +101,16 @@ * @see {@link Ops} */ public final class NnOps { + public final NnRawOps raw; + + public final NnInternalOps internal; + private final Scope scope; NnOps(Scope scope) { this.scope = scope; + raw = new NnRawOps(scope); + internal = new NnInternalOps(scope); } /** @@ -1753,6 +1758,52 @@ public Selu selu(Operand features) { return Selu.create(scope, features); } + /** + * Computes sigmoid cross entropy given `logits`. + * + *

Measures the probability error in discrete classification tasks in which each class is + * independent and not mutually exclusive. For instance, one could perform multilabel + * classification where a picture can contain both an elephant and a dog at the same time. + * + *

For brevity, let `x = logits`, `z = labels`. The logistic loss is + * + *

+   *      z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
+   *      = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
+   *      = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
+   *      = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
+   *      = (1 - z) * x + log(1 + exp(-x))
+   *      = x - x * z + log(1 + exp(-x))
+   *  
+ * + *

For x < 0, to avoid overflow in exp(-x), we reformulate the above + * + *

+   *       x - x * z + log(1 + exp(-x))
+   *       = log(exp(x)) - x * z + log(1 + exp(-x))
+   *       = - x * z + log(1 + exp(x))
+   *  
+ * + *

Hence, to ensure stability and avoid overflow, the implementation uses this equivalent + * formulation + * + *

+   *      max(x, 0) - x * z + log(1 + exp(-abs(x)))
+   *  
+ * + *

`logits` and `labels` must have the same type and shape. + * + * @param scope The TensorFlow scope + * @param labels the labels + * @param logits the logits of type float32 or float64 + * @param the type of labels and logits + * @return the component-wise logistic losses. + */ + public Operand sigmoidCrossEntropyWithLogits(Operand labels, + Operand logits) { + return NN.sigmoidCrossEntropyWithLogits(scope, labels, logits); + } + /** * Computes softmax activations. *

@@ -1769,20 +1820,48 @@ public Softmax softmax(Operand logits) { } /** - * Computes softmax cross entropy cost and gradients to backpropagate. - *

- * Inputs are the logits, not probabilities. + * Computes softmax cross entropy between `logits` and `labels`. * - * @param data type for {@code loss()} output - * @param features batch_size x num_classes matrix - * @param labels batch_size x num_classes matrix - * The caller must ensure that each batch of labels represents a valid - * probability distribution. - * @return a new instance of SoftmaxCrossEntropyWithLogits + *

Measures the probability error in discrete classification tasks in which the classes are + * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is + * labeled with one and only one label: an image can be a dog or a truck, but not both. + * + *

**NOTE:** While the classes are mutually exclusive, their probabilities need not be. All + * that is required is that each row of `labels` is a valid probability distribution. If they are + * not, the computation of the gradient will be incorrect. + * + *

If using exclusive `labels` (wherein one and only one class is true at a time), see + * `sparse_softmax_cross_entropy_with_logits`. + * + *

Usage: + * + *

+   *    >>> logits = [[4.0, 2.0, 1.0], [0.0, 5.0, 1.0]]
+   *    >>> labels = [[1.0, 0.0, 0.0], [0.0, 0.8, 0.2]]
+   *    >>> tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
+   *    
+   *  
+ * + *

Backpropagation will happen into both `logits` and `labels`. To disallow backpropagation + * into `labels`, pass label tensors through `tf.stop_gradient` before feeding it to this + * function. + * + * @param scope current scope + * @param labels Each vector along the class dimension should hold a valid probability + * distribution e.g. for the case in which labels are of shape `[batch_size, num_classes]`, + * each row of `labels[i]` must be a valid probability distribution. + * @param logits Per-label activations, typically a linear output. These activation energies are + * interpreted as unnormalized log probabilities. + * @param axis The class dimension. -1 is the last dimension. + * @param the data type of the logits + * @param the number type of the operands + * @return the softmax cross entropy loss. Its type is the same as `logits` and its shape is the + * same as `labels` except that it does not have the last dimension of `labels`. */ - public SoftmaxCrossEntropyWithLogits softmaxCrossEntropyWithLogits( - Operand features, Operand labels) { - return SoftmaxCrossEntropyWithLogits.create(scope, features, labels); + public Operand softmaxCrossEntropyWithLogits( + Operand labels, Operand logits, int axis) { + return NN.softmaxCrossEntropyWithLogits(scope, labels, logits, axis); } /** @@ -1974,24 +2053,22 @@ public SpaceToDepth spaceToDepth(Operand input, Long blo } /** - * Computes softmax cross entropy cost and gradients to backpropagate. - *

- * Unlike `SoftmaxCrossEntropyWithLogits`, this operation does not accept - * a matrix of label probabilities, but rather a single label per row - * of features. This label is considered to have probability 1.0 for the - * given row. - *

- * Inputs are the logits, not probabilities. + * Computes sparse softmax cross entropy between `logits` and `labels`. * - * @param data type for {@code loss()} output - * @param features batch_size x num_classes matrix - * @param labels batch_size vector with values in [0, num_classes). - * This is the label for the given minibatch entry. - * @return a new instance of SparseSoftmaxCrossEntropyWithLogits - */ - public SparseSoftmaxCrossEntropyWithLogits sparseSoftmaxCrossEntropyWithLogits( - Operand features, Operand labels) { - return SparseSoftmaxCrossEntropyWithLogits.create(scope, features, labels); + * @param scope current scope + * @param labels `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of `labels` and + * result) and dtype `int32` or `int64`. Each entry in `labels` must be an index in `[0, + * num_classes)`. Other values will raise an exception when this op is run on CPU, and return + * `NaN` for corresponding loss and gradient rows on GPU. + * @param logits Per-label activations (typically a linear output) of shape `[d_0, d_1, ..., + * d_{r-1}, num_classes]` and dtype `float16`, `float32`, or `float64`. These activation + * energies are interpreted as unnormalized log probabilities. + * @return A `Tensor` of the same shape as `labels` and of the same type as `logits` with the + * softmax cross entropy loss. + */ + public Operand sparseSoftmaxCrossEntropyWithLogits( + Operand labels, Operand logits) { + return NN.sparseSoftmaxCrossEntropyWithLogits(scope, labels, logits); } /** From 6b8eb26edafc54a70d6c5a1bd9e21cacf3ac04e7 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 13:50:01 -0400 Subject: [PATCH 16/55] Deleted files that are not necessary yet --- .../op/nn/SoftmaxCrossEntropyWithLogits.java | 83 -- .../SparseSoftmaxCrossEntropyWithLogits.java | 87 --- .../java/org/tensorflow/keras/backend/K.java | 713 ------------------ .../keras/backend/tf/ConfusionMatrix.java | 193 ----- .../keras/backend/tf/ControlDependencies.java | 84 --- .../org/tensorflow/keras/backend/tf/NN.java | 134 ---- .../keras/backend/tf/SparseTensor.java | 64 -- .../tensorflow/keras/backend/tf/Tuple.java | 109 --- .../keras/backend/tf/WeightsBroadcastOps.java | 158 ---- .../keras/utils/PlaceholderStringFormat.java | 81 -- .../tensorflow/keras/utils/PrintUtils.java | 152 ---- .../tensorflow/keras/utils/ProgressBar.java | 311 -------- .../tensorflow/keras/utils/ShapeUtils.java | 110 --- .../org/tensorflow/keras/utils/SmartCond.java | 107 --- .../tensorflow/keras/utils/SymbolicShape.java | 92 --- .../keras/utils/SymbolicShapeDict.java | 58 -- .../org/tensorflow/keras/utils/TypeUtils.java | 98 --- .../tensorflow/keras/utils/SmartCondTest.java | 247 ------ .../tensorflow/keras/utils/TypeUtilTest.java | 234 ------ 19 files changed, 3115 deletions(-) delete mode 100644 tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java delete mode 100644 tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java delete mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java delete mode 100644 tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java deleted file mode 100644 index 41281b996ff..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java +++ /dev/null @@ -1,83 +0,0 @@ -/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ - -// This class has been generated, DO NOT EDIT! - -package org.tensorflow.op.nn; - -import org.tensorflow.Operand; -import org.tensorflow.Operation; -import org.tensorflow.OperationBuilder; -import org.tensorflow.Output; -import org.tensorflow.op.RawOp; -import org.tensorflow.op.Scope; -import org.tensorflow.op.annotation.Endpoint; -import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * Computes softmax cross entropy cost and gradients to backpropagate. - *

- * Inputs are the logits, not probabilities. - * - * @param data type for {@code loss()} output - */ -@Operator(group = "nn") -public final class SoftmaxCrossEntropyWithLogits extends RawOp { - - /** - * Factory method to create a class wrapping a new SoftmaxCrossEntropyWithLogits operation. - * - * @param scope current scope - * @param features batch_size x num_classes matrix - * @param labels batch_size x num_classes matrix - * The caller must ensure that each batch of labels represents a valid - * probability distribution. - * @return a new instance of SoftmaxCrossEntropyWithLogits - */ - @Endpoint(describeByClass = true) - public static SoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { - OperationBuilder opBuilder = scope.env().opBuilder("SoftmaxCrossEntropyWithLogits", scope.makeOpName("SoftmaxCrossEntropyWithLogits")); - opBuilder.addInput(features.asOutput()); - opBuilder.addInput(labels.asOutput()); - opBuilder = scope.applyControlDependencies(opBuilder); - return new SoftmaxCrossEntropyWithLogits(opBuilder.build()); - } - - /** - * Per example loss (batch_size vector). - */ - public Output loss() { - return loss; - } - - /** - * backpropagated gradients (batch_size x num_classes matrix). - */ - public Output backprop() { - return backprop; - } - - private Output loss; - private Output backprop; - - private SoftmaxCrossEntropyWithLogits(Operation operation) { - super(operation); - int outputIdx = 0; - loss = operation.output(outputIdx++); - backprop = operation.output(outputIdx++); - } -} diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java deleted file mode 100644 index f2434cd4eb8..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java +++ /dev/null @@ -1,87 +0,0 @@ -/* Copyright 2018 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ - -// This class has been generated, DO NOT EDIT! - -package org.tensorflow.op.nn; - -import org.tensorflow.Operand; -import org.tensorflow.Operation; -import org.tensorflow.OperationBuilder; -import org.tensorflow.Output; -import org.tensorflow.op.RawOp; -import org.tensorflow.op.Scope; -import org.tensorflow.op.annotation.Endpoint; -import org.tensorflow.op.annotation.Operator; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * Computes softmax cross entropy cost and gradients to backpropagate. - *

- * Unlike `SoftmaxCrossEntropyWithLogits`, this operation does not accept - * a matrix of label probabilities, but rather a single label per row - * of features. This label is considered to have probability 1.0 for the - * given row. - *

- * Inputs are the logits, not probabilities. - * - * @param data type for {@code loss()} output - */ -@Operator(group = "nn") -public final class SparseSoftmaxCrossEntropyWithLogits extends RawOp { - - /** - * Factory method to create a class wrapping a new SparseSoftmaxCrossEntropyWithLogits operation. - * - * @param scope current scope - * @param features batch_size x num_classes matrix - * @param labels batch_size vector with values in [0, num_classes). - * This is the label for the given minibatch entry. - * @return a new instance of SparseSoftmaxCrossEntropyWithLogits - */ - @Endpoint(describeByClass = true) - public static SparseSoftmaxCrossEntropyWithLogits create(Scope scope, Operand features, Operand labels) { - OperationBuilder opBuilder = scope.env().opBuilder("SparseSoftmaxCrossEntropyWithLogits", scope.makeOpName("SparseSoftmaxCrossEntropyWithLogits")); - opBuilder.addInput(features.asOutput()); - opBuilder.addInput(labels.asOutput()); - opBuilder = scope.applyControlDependencies(opBuilder); - return new SparseSoftmaxCrossEntropyWithLogits(opBuilder.build()); - } - - /** - * Per example loss (batch_size vector). - */ - public Output loss() { - return loss; - } - - /** - * backpropagated gradients (batch_size x num_classes matrix). - */ - public Output backprop() { - return backprop; - } - - private Output loss; - private Output backprop; - - private SparseSoftmaxCrossEntropyWithLogits(Operation operation) { - super(operation); - int outputIdx = 0; - loss = operation.output(outputIdx++); - backprop = operation.output(outputIdx++); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java deleted file mode 100644 index 51a5fdaa5ff..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/K.java +++ /dev/null @@ -1,713 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.backend; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Function; -import org.tensorflow.DataType; -import org.tensorflow.EagerSession; -import org.tensorflow.ExecutionEnvironment; -import org.tensorflow.Graph; -import org.tensorflow.Operand; -import org.tensorflow.Session; -import org.tensorflow.Tensor; -import org.tensorflow.keras.backend.tf.ConfusionMatrix; -import org.tensorflow.keras.backend.tf.NN; -import org.tensorflow.keras.backend.tf.Tuple; -import org.tensorflow.ndarray.NdArraySequence; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.op.core.ReduceSum; -import org.tensorflow.op.core.Squeeze; -import org.tensorflow.op.core.Variable; -import org.tensorflow.op.math.Mean; -import org.tensorflow.op.nn.SoftmaxCrossEntropyWithLogits; -import org.tensorflow.types.TBfloat16; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TFloat16; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TUint8; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** Keras backend methods */ -public class K { - - public static final double Epsilon = 1e-7; - public static final float EpsilonF = 1e-7F; - - public static final double epsilon() { - return Epsilon; - } - - public static final Operand epsilonConstant(Ops tf) { - return tf.constant(Epsilon); - } - - public static final Operand epsilonConstant(Ops tf, DataType dtype) { - return tf.dtypes.cast(tf.constant(Epsilon), dtype); - } - - public static final Operand one(Ops tf) { - return tf.constant(1); - } - - public static final Operand one(Ops tf, DataType dtype) { - return tf.dtypes.cast(tf.constant(1), dtype); - } - - public static final Operand minusOne(Ops tf) { - return tf.constant(-1); - } - - public static final Operand minusOne(Ops tf, DataType dtype) { - return tf.dtypes.cast(tf.constant(-1), dtype); - } - - public static final Operand zero(Ops tf) { - return tf.constant(0); - } - - public static final Operand zero(Ops tf, DataType dtype) { - return tf.dtypes.cast(tf.constant(0), dtype); - } - - public static final Operand constant(Ops tf, double number, DataType dtype) { - return tf.dtypes.cast(tf.constant(number), dtype); - } - - public static Operand clip(Ops tf, Operand x, double minValue, double maxValue) { - assert x != null : "Operand x must not be null"; - DataType dtype = x.asOutput().dataType(); - if (maxValue < minValue) { - double tmp = maxValue; - maxValue = minValue; - minValue = tmp; - } - Operand minValueConstant = tf.dtypes.cast(tf.constant(minValue), dtype); - Operand maxValueConstant = tf.dtypes.cast(tf.constant(maxValue), dtype); - return tf.clipByValue(x, minValueConstant, maxValueConstant); - } - - public static Operand mean(Ops tf, Operand x) { - return mean(tf, x, null, false); - } - - public static Operand mean(Ops tf, Operand x, Operand axis) { - return mean(tf, x, axis, false); - } - - public static Operand mean(Ops tf, Operand x, boolean keepDims) { - return mean(tf, x, null, keepDims); - } - - public static Operand mean(Ops tf, Operand x, Operand axis, boolean keepDims) { - if (x.asOutput().dataType() == TBool.DTYPE) { - x = tf.dtypes.cast(x, TFloat32.DTYPE); - } - if (axis == null) { - axis = allAxis(tf, x); - } - return tf.math.mean(x, axis, Mean.keepDims(keepDims)); - } - - // alias for mean - public static Operand reduceMean(Ops tf, Operand x, Operand axis, boolean keepDims) { - return mean(tf, x, axis, keepDims); - } - - public static Operand maximum(Ops tf, Operand x, Operand y) { - y = tf.dtypes.cast(y, x.asOutput().dataType()); - return tf.math.maximum(x, y); - } - - public static Operand sqrt(Ops tf, Operand x) { - DataType dType = x.asOutput().dataType(); - Operand zero = tf.dtypes.cast(tf.constant(0), dType); - Operand inf = tf.dtypes.cast(tf.constant(Float.POSITIVE_INFINITY), dType); - x = tf.clipByValue(x, zero, inf); - return tf.math.sqrt(x); - } - - public static Shape merge(Shape a, Shape b) { - assert a.numDimensions() == b.numDimensions() - : String.format("Shapes %s and %s are incompatible", a, b); - long[] array = new long[a.numDimensions()]; - for (int i = 0; i < a.numDimensions(); i++) { - if (a.size(i) != Shape.UNKNOWN_SIZE) { - if (b.size(i) != Shape.UNKNOWN_SIZE) { - assert a.size(i) == b.size(i) : String.format("Shapes %s and %s are incompatible", a, b); - } - array[i] = a.size(i); - } else { - array[i] = b.size(i); - } - } - return Shape.of(array); - } - - // this is from nn in Python, I could not find it in the Java frameworks. - public static Operand sigmoidCrossEntropyWithLogits(Ops tf, Operand labels, Operand logits) { - Shape lablesShape = labels.asOutput().shape(); - Shape logitsShape = logits.asOutput().shape(); - Shape newShape = merge(lablesShape, logitsShape); - - Operand zeros = tf.dtypes.cast(tf.zerosLike(logits), logits.asOutput().dataType()); - Operand cond = tf.math.greaterEqual(logits, zeros); - - Operand relu_logits = tf.select(cond, logits, zeros); - Operand neg_abs_logits = tf.select(cond, tf.math.neg(logits), logits); - return tf.math.add( - tf.math.sub(relu_logits, tf.math.mul(logits, labels)), - tf.math.log1p(tf.math.exp(neg_abs_logits))); - } - - // TODO need to walk back identity until it hits something else - // not sure how to get the input nodes for the Operand. - private static Operand backtrackIdentity(Operand output) { - // while(!output.op().type().equals("Identity")) - // output = output.op().output(0); - return output; - } - - public static Operand binary_crossentropy( - Ops tf, Operand target, Operand output, boolean fromLogits) { - if (fromLogits) { - return sigmoidCrossEntropyWithLogits(tf, target, output); - } - - if (!(output instanceof Variable) && (!tf.scope().env().isEager())) { - // output = backtrackIdentity(output); // TODO - this does not work, goes infinite loop - if (output.op().type().equals("Sigmoid")) { - assert output.op().numOutputs() == 1; - output = output.op().output(0); - return sigmoidCrossEntropyWithLogits(tf, target, output); - } - } - DataType dtype = output.asOutput().dataType(); - Operand one = one(tf, dtype); - Operand epsilonConst = K.epsilonConstant(tf, dtype); - Operand oneMinusEpsilonConst = tf.math.sub(one, epsilonConst); - output = tf.clipByValue(output, epsilonConst, oneMinusEpsilonConst); - - // Compute cross entropy from probabilities. - Operand bce = tf.math.mul(target, tf.math.log(tf.math.add(output, epsilonConst))); - bce = - tf.math.add( - bce, - tf.math.mul( - tf.math.sub(one, target), - tf.math.log(tf.math.add(tf.math.sub(one, output), epsilonConst)))); - Operand result = tf.math.neg(bce); - return result; - } - - public static Operand categorical_crossentropy( - Ops tf, Operand target, Operand output, boolean fromLogits) { - return categorical_crossentropy(tf, target, output, fromLogits, -1); - } - - public static Operand categorical_crossentropy( - Ops tf, Operand target, Operand output, boolean fromLogits, int axis) { - - if (fromLogits) { - return softmax_cross_entropy_with_logits(tf, target, output); - } - if (!(output instanceof Variable) && (!tf.scope().env().isEager())) { - // TODO output = backtrackIdentity(output); doesn't seem to work with Java version. - if (output.op().type().equals("Softmax")) { - assert output.op().numOutputs() == 1; - output = output.op().output(0); - Operand op = softmax_cross_entropy_with_logits(tf, target, output); - return op; - } - } - DataType dtype = output.asOutput().dataType(); - Operand one = one(tf, dtype); - Operand epsilonConst = K.epsilonConstant(tf, dtype); - Operand oneMinusepsilonConst = tf.math.sub(one, epsilonConst); - output = - tf.math.div( - output, tf.reduceSum(output, tf.constant(axis), ReduceSum.keepDims(Boolean.TRUE))); - output = tf.clipByValue(output, epsilonConst, oneMinusepsilonConst); - - // Compute cross entropy from probabilities. - Operand cce = - tf.reduceSum( - tf.math.mul(target, tf.math.log(output)), - tf.constant(axis), - ReduceSum.keepDims(Boolean.FALSE)); - return tf.math.neg(cce); - } - - public static Operand flatten(Ops tf, Operand t) { - Shape shape = Shape.of(1L); - return tf.reshape(t, tf.constant(shape)); - } - - public static Operand sparse_categorical_crossentropy( - Ops tf, Operand target, Operand output, boolean fromLogits, int axis) { - DataType dType = output.asOutput().dataType(); - if (!(output instanceof Variable) && (!tf.scope().env().isEager())) { - // TODO output = backtrackIdentity(output); doesn't seem to work with Java version. - if (output.op().type().equals("Softmax")) { - // assert output.op().numOutputs() == 1; - // When softmax activation function is used for output operation, we - // use logits from the softmax function directly to compute loss in order - // to prevent collapsing zero when training. - // TODO assert len(output.op.inputs) == 1 - // TODO output = output.op.inputs[0] - fromLogits = true; - } - } - if (!fromLogits) { - Operand epsilonConst = epsilonConstant(tf, dType); - Operand one = one(tf, dType); - Operand oneMinusEpsilonConst = tf.math.sub(one, epsilonConst); - output = tf.clipByValue(output, epsilonConst, oneMinusEpsilonConst); - output = tf.math.log(output); - } - Shape outputShape = output.asOutput().shape(); - int outputRank = outputShape.numDimensions(); - axis %= outputRank; - if (axis < 0) { - axis += outputRank; - } - if (axis != outputRank - 1) { - int[] axisNew = moveAxisToEnd(axis, outputRank); - output = tf.linalg.transpose(output, tf.constant(axisNew)); - } - - target = tf.dtypes.cast(target, TInt64.DTYPE); - // TODO Try to adjust the shape so that rank of labels = rank of logits - 1. - outputShape = output.asOutput().shape(); - Shape targetShape = target.asOutput().shape(); - int targetRank = targetShape.numDimensions(); - - boolean updateShape = targetRank != outputRank - 1; - if (updateShape) { // TODO check to see if this is right - target = tf.reshape(target, tf.constant(-1L)); // flatten - output = - tf.reshape( - output, - tf.constant(new long[] {-1L, outputShape.size(outputShape.numDimensions() - 1)})); - } - - // call nn.nn.sparse_softmax_cross_entropy_with_logits_v2 - Operand loss = NN.sparse_softmax_cross_entropy_with_logits(tf, target, output); - if (updateShape && outputRank >= 3) { - long[] dims = outputShape.asArray(); - long[] newDims = new long[dims.length - 1]; - System.arraycopy(dims, 0, newDims, 0, newDims.length); - loss = tf.reshape(loss, tf.constant(newDims)); - } - return loss; - } - - private static int[] allAxis(Operand op) { - int rank = op.asOutput().shape().numDimensions(); - int[] ranks = new int[rank]; - for (int i = 0; i < rank; i++) { - ranks[i] = i; - } - return ranks; - } - - public static Operand allAxis(Ops tf, Operand op) { - int[] ranks = allAxis(op); - return tf.constant(ranks); - } - - // TODO shouldn't these be in tensorflow itself under nn? - private static Operand moveDimToEnd( - Ops tf, Operand tensor, int dim_index, Operand rank) { - Operand one = one(tf, TInt32.DTYPE); - List> concatList = - Arrays.asList( - tf.range(tf.constant(dim_index), one, one), - tf.range(tf.constant(dim_index + 1), rank, one)); - return tf.linalg.transpose( - tensor, - (Operand) tf.concat((Iterable>) concatList, (Operand) tf.constant(0))); - } - - private static Operand flattenOuterDims( - Ops tf, Operand logits) { - Operand zero = zero(tf, TInt64.DTYPE); - Operand one = one(tf, TInt64.DTYPE); - Operand minusOne = tf.constant(-1); - - // Shape logitsShape = logits.asOutput().shape(); - // long lastDimSize = logitsShape.size(logitsShape.numDimensions()-1); - // if(!tf.scope().env().isEager()) { - Shape shape = logits.asOutput().shape(); - int ndims = shape.numDimensions(); - if (!shape.hasUnknownDimension()) { - long product = 1L; - boolean productValid = true; - for (int i = ndims - 2; i >= 0; i--) { - long d = shape.size(i); - if (d == Shape.UNKNOWN_SIZE) { - productValid = false; - break; - } - product *= d; - } - if (productValid) { - Shape outputShape = Shape.of(product, shape.size(ndims - 1)); - return tf.reshape(logits, tf.constant(outputShape.asArray())); - } - } - // } - - Operand rank = tf.dtypes.cast(tf.rank(logits), TInt64.DTYPE); - Operand rankMinusOne = tf.math.sub(rank, one); - - Operand last_dim_size = tf.slice(tf.shape(logits), rankMinusOne, tf.constant(1)); - Operand concat = - tf.concat(Arrays.asList(tf.constant(new int[] {-1}), last_dim_size), tf.constant(0)); - return tf.reshape(zero, concat); - } - - private static int[] moveAxisToEnd(int axis, int outputRank) { - int[] axisNew = new int[outputRank]; - for (int i = 0; i < axis; i++) { - axisNew[i] = i; - } - for (int i = axis + 1; i < outputRank; i++) { - axisNew[i - 1] = i; - } - axisNew[outputRank - 1] = axis; - return axisNew; - } - - // TODO, maybe part of Shape ?? - private static boolean shapeIsCompatible(Shape a, Shape b) { - if (a.numDimensions() != b.numDimensions()) { - return false; - } - for (int i = 0; i < a.numDimensions(); i++) { - long aSize = a.size(i); - long bSize = b.size(i); - if (aSize != Shape.UNKNOWN_SIZE && bSize != Shape.UNKNOWN_SIZE && aSize != bSize) { - return false; - } - } - return true; - } - - // TODO these are "nn" ops - public static Operand softmax_cross_entropy_with_logits(Ops tf, Operand labels, Operand logits) { - return softmax_cross_entropy_with_logits(tf, labels, logits, -1); - } - - public static Operand softmax_cross_entropy_with_logits( - Ops tf, Operand labels, Operand logits, int axis) { - axis = axis % logits.asOutput().shape().numDimensions(); - if (axis < 0) { - axis += logits.asOutput().shape().numDimensions(); - } - - Operand minusOne = tf.constant(-1); - Operand precise_logits = logits; - Operand one = tf.constant(1L); - - boolean convertToFloat32 = - logits.asOutput().dataType() == TFloat16.DTYPE - || logits.asOutput().dataType() == TBfloat16.DTYPE; - if (convertToFloat32) { - precise_logits = tf.dtypes.cast(logits, TFloat32.DTYPE); - } - DataType dtype = precise_logits.asOutput().dataType(); - labels = tf.dtypes.cast(labels, dtype); - Operand inputRank = tf.dtypes.cast(tf.rank(precise_logits), TInt64.DTYPE); - Operand inputRankMinusOne = tf.dtypes.cast(tf.math.sub(inputRank, one), TInt64.DTYPE); - Shape shape = logits.asOutput().shape(); - - // Move the dim to the end if dim is not the last dimension. - if (axis != -1 && axis != precise_logits.asOutput().shape().numDimensions() - 1) { - precise_logits = moveDimToEnd(tf, precise_logits, axis, inputRank); - labels = moveDimToEnd(tf, labels, axis, inputRank); - } - - Shape inputShape = precise_logits.asOutput().shape(); - precise_logits = flattenOuterDims(tf, precise_logits); - labels = flattenOuterDims(tf, labels); - SoftmaxCrossEntropyWithLogits smax = - tf.nn.softmaxCrossEntropyWithLogits(precise_logits, labels); - Operand cost = smax.loss(); - Operand outputShape = - tf.slice( - tf.constant(inputShape.asArray()), - tf.constant(new long[] {0}), - tf.constant(new long[] {inputShape.numDimensions() - 1})); - cost = tf.reshape(cost, outputShape); - if (tf.scope().env().isGraph() && !shape.hasUnknownDimension()) { - long[] array = shape.asArray(); - long[] newArray = new long[array.length - 1]; - if (axis < 0) { - axis = shape.numDimensions() + axis; - } - for (int i = 0; i < axis; i++) { - newArray[i] = shape.size(i); - } - for (int i = axis + 1; i < shape.numDimensions(); i++) { - newArray[i - 1] = shape.size(i); - } - Shape newShape = Shape.of(newArray); - cost = tf.reshape(cost, tf.constant(newShape.asArray())); - } - - if (convertToFloat32) { - cost = tf.dtypes.cast(cost, logits.asOutput().dataType()); - } - return cost; - } - - public static Operand map( - Operand input, Function, Operand> mapFunc) { - return null; - } - - public static long[] concatenate(long first, long... remaining) { - long[] dims = new long[remaining.length + 1]; - System.arraycopy(remaining, 0, dims, 1, remaining.length); - dims[0] = first; - return dims; - } - - private static Map> uidMap = new HashMap<>(); - - /** - * Associates a string prefix with an integer counter in a TensorFlow graph. - * - *

Example: - * - *

-   * get_uid('dense')
-   * 1
-   * get_uid('dense')
-   * 2
-   * 
- * - * @param tf the TensorFlow Ops - * @param prefix String prefix to index. - * @return Unique integer ID. - */ - public static int getUid(Ops tf, String prefix) { - ExecutionEnvironment env = tf.scope().env(); - Map uids = uidMap.get(env); - if (uids == null) { - uids = new HashMap<>(); - uidMap.put(env, uids); - } - Integer id = uids.get(prefix); - if (id == null) { - id = 0; - } else { - id++; - } - - uids.put(prefix, id); - return id; - } - - /** - * returns the larger DataType between the two. - * - * @param a the first DataType to compare - * @param b the second DataType to compare - * @return the wider DataType - */ - public DataType wider(DataType a, DataType b) { - return a.byteSize() < b.byteSize() ? b : a; - } - - /** - * returns the smaller DataType between the two. - * - * @param a the first DataType to compare - * @param b the second DataType to compare - * @return the smaller DataType - */ - public DataType narrower(DataType a, DataType b) { - return a.byteSize() > b.byteSize() ? b : a; - } - - public NdArraySequence getTensorValue(Ops tf, Operand operand) { - DataType dtype = operand.asOutput().dataType(); - if (tf.scope().env().isGraph()) { - try (Session session = new Session((Graph) tf.scope().env())) { - if (dtype.equals(TInt32.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TInt32.DTYPE)) { - return result.data().scalars(); - } - } else if (dtype.equals(TInt64.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TInt64.DTYPE)) { - return result.data().scalars(); - } - } else if (dtype.equals(TUint8.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TUint8.DTYPE)) { - return result.data().scalars(); - } - } else if (dtype.equals(TBfloat16.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TBfloat16.DTYPE)) { - return result.data().scalars(); - } - } else if (dtype.equals(TFloat16.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TFloat16.DTYPE)) { - return result.data().scalars(); - } - } else if (dtype.equals(TFloat32.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TFloat32.DTYPE)) { - return result.data().scalars(); - } - } else if (dtype.equals(TFloat64.DTYPE)) { - try (Tensor result = - session.runner().fetch(operand).run().get(0).expect(TFloat64.DTYPE)) { - return result.data().scalars(); - } - } else { - return null; - } - } - } else { - try (EagerSession session = EagerSession.create()) { - if (dtype.equals(TInt32.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else if (dtype.equals(TInt64.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else if (dtype.equals(TUint8.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else if (dtype.equals(TBfloat16.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else if (dtype.equals(TFloat16.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else if (dtype.equals(TFloat32.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else if (dtype.equals(TFloat64.DTYPE)) { - return ((Operand) operand).data().scalars(); - } else { - return null; - } - } - } - } - - /** - * Squeeze or expand last dimension if needed. 1. Squeezes last dim of `y_pred` or `y_true` if - * their rank differs by 1 (using `confusion_matrix.remove_squeezable_dimensions`). 2. Squeezes or - * expands last dim of `sample_weight` if its rank differs by 1 from the new rank of `y_pred`. If - * `sample_weight` is scalar, it is kept scalar. - * - * @param tf the TensorVlow Ops - * @param yPred Predicted values, a `Tensor` of arbitrary dimensions. - * @param yTrue Optional label `Tensor` whose dimensions match `y_pred`. - * @return Tuple of `y_pred`, `y_true` and `sample_weight`. Each of them possibly has the last - * dimension squeezed, `sample_weight` could be extended by one dimension. If `sample_weight` - * is null, (y_pred, y_true) is returned. - */ - public static Tuple squeezeOrExpandDimensions(Ops tf, Operand yTrue, Operand yPred) { - return squeezeOrExpandDimensions(tf, yTrue, yPred, null); - } - - /** - * Squeeze or expand last dimension if needed. 1. Squeezes last dim of `y_pred` or `y_true` if - * their rank differs by 1 (using `confusion_matrix.remove_squeezable_dimensions`). 2. Squeezes or - * expands last dim of `sample_weight` if its rank differs by 1 from the new rank of `y_pred`. If - * `sample_weight` is scalar, it is kept scalar. - * - * @param tf the TensorVlow Ops - * @param yPred Predicted values, a `Tensor` of arbitrary dimensions. - * @param yTrue Optional label `Tensor` whose dimensions match `y_pred`. - * @param sampleWeight Optional weight scalar or `Tensor` whose dimensions match `y_pred`. - * @return Tuple of `y_pred`, `y_true` and `sample_weight`. Each of them possibly has the last - * dimension squeezed, `sample_weight` could be extended by one dimension. If `sample_weight` - * is null, (y_pred, y_true) is returned. - */ - public static Tuple squeezeOrExpandDimensions( - Ops tf, Operand yTrue, Operand yPred, Operand sampleWeight) { - Tuple tuple = new Tuple(yTrue, yPred); - Shape ypredShape = yPred.asOutput().shape(); - long ypredRank = ypredShape.numDimensions(); - - if (yTrue != null) { - Shape ytrueShape = yTrue.asOutput().shape(); - long ytrueRank = ytrueShape.numDimensions(); - if (ytrueRank != Shape.UNKNOWN_SIZE && ypredRank != Shape.UNKNOWN_SIZE) { - // Use static rank for `y_true` and `y_pred`. - if (ypredRank - ytrueRank != 1 || ypredShape.size(-1) == 1) { - // y_true, y_pred = confusion_matrix.remove_squeezable_dimensions(y_true, y_pred) - tuple = ConfusionMatrix.removeSqueezableDimensions(tf, yTrue, yPred); - } - } else { // use dynamic rank - tuple = ConfusionMatrix.removeSqueezableDimensions(tf, yTrue, yPred); - } - } - if (sampleWeight == null) { - return tuple; - } - Shape weightsShape = sampleWeight.asOutput().shape(); - long weightsRank = weightsShape.numDimensions(); - if (weightsRank == 0) { // scalar - return new Tuple(yTrue, yPred, sampleWeight); - } - - if (ypredRank != Shape.UNKNOWN_SIZE && weightsRank != Shape.UNKNOWN_SIZE) { - - if (weightsRank - ypredRank == 1) { - sampleWeight = tf.squeeze(sampleWeight); - } else if (ypredRank - weightsRank == 1) { - sampleWeight = tf.expandDims(sampleWeight, tf.constant(-1L)); - } - return new Tuple(yTrue, yPred, sampleWeight); - } - // Use dynamic rank. - Operand weightsRankTensor = tf.rank(sampleWeight); - Operand rankDiff = tf.math.sub(weightsRankTensor, tf.rank(yPred)); - sampleWeight = - tf.select( - tf.math.equal(weightsRankTensor, tf.constant(0)), - sampleWeight, - maybeAdjustWeights(tf, sampleWeight, rankDiff)); - return new Tuple(yTrue, yPred, sampleWeight); - } - - private static Operand maybeAdjustWeights(Ops tf, Operand sampleWeight, Operand rankDiff) { - return tf.select( - tf.math.equal(rankDiff, tf.constant(1)), - tf.squeeze(sampleWeight, Squeeze.axis(Arrays.asList(-1L))), - maybeExpandWeights(tf, sampleWeight, rankDiff)); - } - - private static Operand maybeExpandWeights(Ops tf, Operand sampleWeight, Operand rankDiff) { - return tf.select( - tf.math.equal(rankDiff, tf.constant(-1)), - tf.expandDims(sampleWeight, tf.constant(-1)), - sampleWeight); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java deleted file mode 100644 index 2860adb9d8b..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ConfusionMatrix.java +++ /dev/null @@ -1,193 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.backend.tf; - -import org.tensorflow.keras.backend.*; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.tensorflow.DataType; -import org.tensorflow.Operand; -import org.tensorflow.keras.utils.ShapeUtils; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.op.core.Squeeze; -import org.tensorflow.op.core.Stack; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** ConfusionMatrix operations */ -public class ConfusionMatrix { - - /** - * Squeeze last dim if ranks differ from expected by exactly 1. - * - * @param tf the TensorFlowOps - * @param labels Label values, a `Tensor` whose dimensions match `predictions`. - * @param predictions Predicted values, a `Tensor` of arbitrary dimensions. - * @return `labels` and `predictions`, possibly with last dim squeezed. - */ - public static Tuple removeSqueezableDimensions(Ops tf, Operand labels, Operand predictions) { - return removeSqueezableDimensions(tf, labels, predictions, 0); - } - - /** - * Squeeze last dim if ranks differ from expected by exactly 1. - * - * @param tf the TensorFlowOps - * @param labels Label values, a `Tensor` whose dimensions match `predictions`. - * @param predictions Predicted values, a `Tensor` of arbitrary dimensions. - * @param expectedRankDiff Expected result of `rank(predictions) - rank(labels)`. - * @return `labels` and `predictions`, possibly with last dim squeezed. - */ - public static Tuple removeSqueezableDimensions( - Ops tf, Operand labels, Operand predictions, int expectedRankDiff) { - - tf = tf.withSubScope("removeSqueezableDimensions"); - Shape predictionsShape = predictions.asOutput().shape(); - int predictionsRank = predictionsShape.numDimensions(); - Shape labelsShape = labels.asOutput().shape(); - int labelsRank = labelsShape.numDimensions(); - - if (predictionsRank != Shape.UNKNOWN_SIZE && labelsRank != Shape.UNKNOWN_SIZE) { - // Use static rank. - int rankDiff = predictionsRank - labelsRank; - if (rankDiff == expectedRankDiff + 1 - && ShapeUtils.isCompatible(predictionsShape.size(-1), 1)) { - predictions = tf.squeeze(predictions); - } else if (rankDiff == expectedRankDiff - 1 - && ShapeUtils.isCompatible(labelsShape.size(-1), 1)) { - labels = tf.squeeze(labels); - } - return new Tuple(labels, predictions); - } - // Use dynamic rank. - Operand rankDiff = tf.math.sub(tf.rank(predictions), tf.rank(labels)); - if (predictionsRank == Shape.UNKNOWN_SIZE - && ShapeUtils.isCompatible(predictionsShape.size(-1), 1)) { - /** - * TODO, if we ever get a select that does lazy evaluation, but for now do the tf.squeeze - * predictions = tf.select( tf.math.equal(tf.constant(expectedRankDiff+1),rankDiff ), - * tf.squeeze(predictions, Squeeze.axis(Arrays.asList(-1L))), predictions ); * - */ - predictions = tf.squeeze(predictions, Squeeze.axis(Arrays.asList(-1L))); - } - if (labelsRank == Shape.UNKNOWN_SIZE && ShapeUtils.isCompatible(labelsShape.size(-1), 1)) { - /** - * TODO, if we ever get a select that does lazy evaluation labels = tf.select( - * tf.math.equal(tf.constant(expectedRankDiff+1),rankDiff ), tf.squeeze(labels, - * Squeeze.axis(Arrays.asList(-1L))), predictions ); * - */ - labels = tf.squeeze(labels, Squeeze.axis(Arrays.asList(-1L))); - } - return new Tuple(labels, predictions); - } - - /** - * Computes the confusion matrix from predictions and labels. - * - * @param tf the TensorFlow Ops - * @param labels 1-D `Tensor` of real labels for the classification task. - * @param predictions 1-D `Tensor` of predictions for a given classification. - * @param numClasses The possible number of labels the classification task can have. - * @param weights optional weights to be applied to the confusion matris - * @param dtype Data type of the confusion matrix. - * @param the type of Operands - * @param the data type. - * @return A `Tensor` of type `dtype` with shape `[n, n]` representing the confusion matrix, where - * `n` is the number of possible labels in the classification task. - * @throws IllegalArgumentException If both predictions and labels are not 1-D vectors and have - * mismatched shapes, or if `weights` is not `None` and its shape doesn't match `predictions`. - */ - public static Operand confusionMatrix( - Ops tf, - Operand labels, - Operand predictions, - Operand numClasses, - Operand weights, - DataType dtype) { - tf = tf.withSubScope("confusion_matrix"); - Tuple ops = K.squeezeOrExpandDimensions(tf, predictions, labels, null); - predictions = tf.dtypes.cast(ops.getPredictions(), TInt64.DTYPE); - labels = tf.dtypes.cast(ops.getLabels(), TInt64.DTYPE); - - List labelControls = new ArrayList<>(); - List predictionControls = new ArrayList<>(); - - labelControls.add( - tf.assertThat( - tf.reduceAny( - tf.math.greaterEqual((Operand) labels, tf.constant(0L)), - K.allAxis(tf, labels)), - Arrays.asList(tf.constant("`labels` contains negative values")))); - - predictionControls.add( - tf.assertThat( - tf.reduceAny( - tf.math.greaterEqual((Operand) predictions, tf.constant(0L)), - K.allAxis(tf, labels)), - Arrays.asList(tf.constant("`predictions` contains negative values")))); - if (numClasses == null) { - numClasses = - tf.math.maximum( - tf.reduceMax(predictions, K.allAxis(tf, predictions)), - tf.reduceMax(labels, K.allAxis(tf, labels))); - } else { - labelControls.add( - tf.assertThat( - tf.reduceAny( - tf.math.less((Operand) labels, numClasses), K.allAxis(tf, labels)), - Arrays.asList(tf.constant("``labels` out of bound")))); - predictionControls.add( - tf.assertThat( - tf.reduceAny( - tf.math.less((Operand) predictions, numClasses), - K.allAxis(tf, predictions)), - Arrays.asList(tf.constant("``predictions` out of bound")))); - } - - if (weights != null) { - if (!ShapeUtils.isCompatibleWith( - predictions.asOutput().shape(), weights.asOutput().shape())) { - throw new IllegalArgumentException( - String.format( - "Prediction shape %s is not compatible with weights shaope %s", - predictions.asOutput().shape(), weights.asOutput().shape())); - } - } - final Operand labelsFinal = labels; - labels = - ControlDependencies.addControlDependencies( - tf, tfc -> tfc.identity(labelsFinal), "confusionMatrix", labelControls); - final Operand predictionsFinal = predictions; - predictions = - ControlDependencies.addControlDependencies( - tf, tfc -> tfc.identity(predictionsFinal), "confusionMatrix", labelControls); - - Operand shape = tf.stack(Arrays.asList(numClasses, numClasses)); - Operand indices = tf.stack(Arrays.asList(labels, predictions), Stack.axis(1L)); - Operand values = - weights == null - ? tf.dtypes.cast(tf.onesLike(predictions), dtype) - : tf.dtypes.cast(weights, dtype); - SparseTensor cmSparse = new SparseTensor(indices, values, shape); - Operand zeroMatrix = tf.zeros(shape, dtype); - - return tf.sparse.sparseTensorDenseAdd( - cmSparse.getIndices(), cmSparse.getValues(), cmSparse.getDenseShape(), zeroMatrix); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java deleted file mode 100644 index 5b323a79ea9..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/ControlDependencies.java +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.backend.tf; - -import org.tensorflow.keras.backend.*; -import java.util.Arrays; -import java.util.List; -import java.util.function.Function; -import org.tensorflow.Operand; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TType; - -/** Container for ControlDepencies, so that the primary Operand is remembered. */ -public class ControlDependencies { - - /** - * Create a control dependency for the operand; - * - * @param tf the TensorFlow Ops - * @param createOperand a function that creates an operand with the control dependency context - * @param name the scope name to use - * @param dependencies a list of control ops. - * @param the type of Operand - * @return the Operand with control dependency scope - */ - public static Operand addControlDependencies( - Ops tf, Function> createOperand, String name, Op... dependencies) { - return addControlDependencies(tf, createOperand, name, Arrays.asList(dependencies)); - } - - /** - * Create a control dependency for an operand. - * - * @param tf the TensorFlow Ops - * @param createOperand function that creates an operand with the control dependency context - * @param name the scope name to use - * @param dependencies a list of control ops. - * @param the type of Operand - * @return the Operand with control dependency scope - */ - public static Operand addControlDependencies( - Ops tf, Function> createOperand, String name, List dependencies) { - tf = tf.withSubScope(name).withControlDependencies(dependencies); - return createOperand.apply(tf); - } - - /** - * Create a control dependency as a NoOp - * - * @param tf the TensorFlow Ops - * @param name the scope name to use - * @param dependencies a list of control ops. - * @return NoOp with control dependency scope - */ - public static Op addControlDependencies(Ops tf, String name, Op... dependencies) { - return addControlDependencies(tf, name, Arrays.asList(dependencies)); - } - - /** - * Create a control dependency as a NoOp - * - * @param tf the TensorFlow Ops - * @param name the scope name to use - * @param dependencies a list of control ops. - * @return NoOp with control dependency scope - */ - public static Op addControlDependencies(Ops tf, String name, List dependencies) { - tf = tf.withSubScope(name).withControlDependencies(dependencies); - return tf.noOp(); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java deleted file mode 100644 index e49fed5ba95..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/NN.java +++ /dev/null @@ -1,134 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.backend.tf; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.tensorflow.Operand; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits; -import org.tensorflow.types.TBfloat16; -import org.tensorflow.types.TFloat16; -import org.tensorflow.types.TFloat32; - -/** NN Operations */ -public class NN { - - /** - * Computes sparse softmax cross entropy between `logits` and `labels`. - * - * @param tf - * @param labels `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of `labels` and - * result) and dtype `int32` or `int64`. Each entry in `labels` must be an index in `[0, - * num_classes)`. Other values will raise an exception when this op is run on CPU, and return - * `NaN` for corresponding loss and gradient rows on GPU. - * @param logits Per-label activations (typically a linear output) of shape `[d_0, d_1, ..., - * d_{r-1}, num_classes]` and dtype `float16`, `float32`, or `float64`. These activation - * energies are interpreted as unnormalized log probabilities. - * @return A `Tensor` of the same shape as `labels` and of the same type as `logits` with the - * softmax cross entropy loss. - */ - public static Operand sparse_softmax_cross_entropy_with_logits( - Ops tf, Operand labels, Operand logits) { - // assert shapeIsCompatible(labels.asOutput().shape(), logits.asOutput().shape()): - // String.format("Shapes %s and %s are incompatible", - // labels.asOutput().shape(), logits.asOutput().shape()); - tf = tf.withSubScope("SparseSoftmaxCrossEntropyWithLogits"); - Operand precise_logits = logits; - boolean convertToFloat32 = - logits.asOutput().dataType() == TFloat16.DTYPE - || logits.asOutput().dataType() == TBfloat16.DTYPE; - if (convertToFloat32) { - precise_logits = tf.dtypes.cast(logits, TFloat32.DTYPE); - } - Shape labelsStaticShape = labels.asOutput().shape(); - org.tensorflow.op.core.Shape labelsShape = tf.shape(labels); - Shape logitsShape = logits.asOutput().shape(); - Operand labels_shape = tf.shape(labels); - Shape logitsShortened = logitsShape.take(logitsShape.numDimensions() - 1); - - boolean staticShapesFullyDefined = - !labelsStaticShape.hasUnknownDimension() && !logitsShortened.hasUnknownDimension(); - if (logitsShape.numDimensions() == 0) { - throw new IllegalArgumentException( - String.format("Logits cannot be scalars - received shape %s.", logitsShape)); - } - if (!logitsShape.hasUnknownDimension() - && !labelsStaticShape.hasUnknownDimension() - && labelsStaticShape.numDimensions() != logitsShape.numDimensions() - 1) { - throw new IllegalArgumentException( - String.format( - "Rank mismatch: Rank of labels (received %s) should equal rank of logits minus 1 (received %s).", - labelsStaticShape.toString(), logitsShape.toString())); - } - - if (staticShapesFullyDefined && !labelsStaticShape.equals(logitsShortened)) { - throw new IllegalArgumentException( - String.format( - "Shape mismatch: The shape of labels (received %s) " - + "should equal the shape of logits except for the last " - + "dimension (received %s).", - labelsStaticShape.toString(), logitsShape.toString())); - } - // Check if no reshapes are required. - if (logitsShape.numDimensions() == 2) { - SparseSoftmaxCrossEntropyWithLogits smax = - tf.nn.sparseSoftmaxCrossEntropyWithLogits(precise_logits, labels); - Operand loss = smax.loss(); - if (logits.asOutput().dataType() == TFloat16.DTYPE) { - loss = tf.dtypes.cast(loss, TFloat16.DTYPE); - } - return loss; - } - - List shapeChecks = new ArrayList<>(); - - if (!staticShapesFullyDefined) { - shapeChecks.add( - tf.assertThat( - tf.math.equal(tf.shape(labels), tf.shape.take(tf.shape(logits), tf.constant(-1))), - Arrays.asList( - tf.constant( - "Shape mismatch: The shape of labels " - + "should equal the shape of logits except for the last " - + "dimension ")))); - } - - // Reshape logits to 2 dim, labels to 1 dim. - long numClassses = logitsShape.size(logitsShape.numDimensions() - 1); - - precise_logits = tf.reshape(precise_logits, tf.constant(new long[] {-1, numClassses})); - labels = tf.reshape(labels, tf.constant(-1)); - SparseSoftmaxCrossEntropyWithLogits smax = - tf.nn.sparseSoftmaxCrossEntropyWithLogits(precise_logits, labels); - - return ControlDependencies.addControlDependencies( - tf, - tfc -> { - Operand cost = smax.loss(); - - cost = tfc.reshape(cost, labels_shape); - if (logits.asOutput().dataType() == TFloat16.DTYPE) { - cost = tfc.dtypes.cast(cost, TFloat16.DTYPE); - } - return cost; - }, - "sparse_softmax_cross_entropy_with_logits", - shapeChecks); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java deleted file mode 100644 index 45d9ec5b071..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/SparseTensor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.backend.tf; - -import org.tensorflow.Operand; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.family.TType; - -/** - * Represents a sparse tensor. - * - * @param the type of the SparseTensor - */ -public class SparseTensor { - - private final Operand indices; - private final Operand values; - private final Operand denseShape; - - /** - * Create a SparseTensor - * - * @param indices A 2-D int64 tensor of shape `[N, ndims]`, which specifies the indices of the - * elements in the sparse tensor that contain nonzero values - * @param values A 1-D tensor of any type and shape `[N]`, which supplies the values for each - * element in `indices`. - * @param denseShape A 1-D int64 tensor of shape `[ndims]`, which specifies the dense_shape of the - * sparse tensor - * @throws IllegalArgumentException When building an eager SparseTensor if `dense_shape` is - * unknown or contains unknown elements (None or -1). - */ - public SparseTensor(Operand indices, Operand values, Operand denseShape) { - this.indices = indices; - this.values = values; - this.denseShape = denseShape; - } - - /** @return the indices */ - public Operand getIndices() { - return indices; - } - - /** @return the values */ - public Operand getValues() { - return values; - } - - /** @return the denseShape */ - public Operand getDenseShape() { - return denseShape; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java deleted file mode 100644 index 9f2f11285b4..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/Tuple.java +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.backend.tf; - -import org.tensorflow.Operand; -import org.tensorflow.types.family.TType; - -/** - * Returns labels, losses or predictions and sample weights as a Tuple - * - * @param the type of Operand - */ -public class Tuple { - - private final Operand labels; - private final Operand lossesOrPredictions; - private final Operand sampleWeights; - - /** - * Creates a Tuple of Operands for labels, predictions, and sampleWeights - * - * @param labels the labels - * @param lossesOrPredictions the losses or predictions - */ - public Tuple(Operand labels, Operand lossesOrPredictions) { - this(labels, lossesOrPredictions, null); - } - - /** - * Creates a Tuple of Operands for labels, predictions, and sampleWeights - * - * @param labels the labels - * @param lossesOrPredictions the losses or predictions - * @param sampleWeights the sample weights - */ - public Tuple(Operand labels, Operand lossesOrPredictions, Operand sampleWeights) { - this.labels = labels; - this.lossesOrPredictions = lossesOrPredictions; - this.sampleWeights = sampleWeights; - } - - /** - * Indicates whether this Tuple contains Labels - * - * @return true is this Tuple contains Labels - */ - public boolean containsLabels() { - return this.labels != null; - } - - /** - * Indicates whether this Tuple contains Labels - * - * @return true is this Tuple contains Labels - */ - public boolean containsPredictions() { - return this.lossesOrPredictions != null; - } - - /** - * Indicates whether this Tuple contains Labels - * - * @return true is this Tuple contains Labels - */ - public boolean containsLosses() { - return this.lossesOrPredictions != null; - } - - /** - * Indicates whether this Tuple contains Labels - * - * @return true is this Tuple contains Labels - */ - public boolean containsSampleWeights() { - return this.sampleWeights != null; - } - - /** @return the labels */ - public Operand getLabels() { - return labels; - } - - /** @return the predictions */ - public Operand getPredictions() { - return lossesOrPredictions; - } - - /** @return the predictions */ - public Operand getLosses() { - return lossesOrPredictions; - } - - /** @return the sampleWeights */ - public Operand getSampleWeights() { - return sampleWeights; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java deleted file mode 100644 index 391436ff8bd..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/backend/tf/WeightsBroadcastOps.java +++ /dev/null @@ -1,158 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ - -package org.tensorflow.keras.backend.tf; - -import java.util.Arrays; -import java.util.List; -import org.tensorflow.Operand; -import org.tensorflow.keras.utils.ShapeUtils; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TBool; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - - -/** Weights Broadcast Ops */ -public class WeightsBroadcastOps { - - private static final String ASSERT_BROADCASTABLE_ERROR_PREFIX = - "weights can not be broadcast to values."; - - /** - * Asserts `weights` can be broadcast to `values` - * - * @param - * @param tf the TensorFlow Ops - * @param weights `Tensor` of weights. - * @param values `Tensor` of values to which weights are applied. - * @return `Operation` raising `InvalidArgumentError` if `weights` has incorrect shape. `no_op` if - * static checks determine `weights` has correct shape. - * @param the type of Operand - * @throws IllegalArgumentException If static checks determine `weights` has incorrect shape. - */ - public static Op assertBroadcastable( - Ops tf, Operand weights, Operand values) { - Operand weightsShape = tf.shape(weights); - Operand weightsRank = tf.rank(weights); - Shape weightsShapeStatic = weights.asOutput().shape(); - int weightsRankStatic = weightsShapeStatic.numDimensions(); - - Operand valuesShape = tf.shape(values); - Operand valuesRank = tf.rank(values); - Shape valuesShapeStatic = values.asOutput().shape(); - int valuesRankStatic = valuesShapeStatic.numDimensions(); - - if (weightsRankStatic != -1 && valuesRankStatic != -1) { - if (weightsRankStatic == 0) { - return ControlDependencies.addControlDependencies(tf, "static_scalar_check_success"); - } - if (weightsRankStatic != valuesRankStatic) { - throw new IllegalArgumentException( - String.format( - "", - "%s values.rank=%d. weights.rank=%d. values.shape=%s. weights.shape=%s.", - ASSERT_BROADCASTABLE_ERROR_PREFIX, - valuesRankStatic, - weightsRankStatic, - valuesShapeStatic.toString(), - weightsShapeStatic.toString())); - } - - for (int i = 0; i < valuesRankStatic; i++) { - if (valuesShapeStatic.size(i) != weightsShapeStatic.size(i)) { - throw new IllegalArgumentException( - String.format( - "", - "%s Mismatch at dim %s. values.shape=%s weights.shape=%s.", - ASSERT_BROADCASTABLE_ERROR_PREFIX, - i, - valuesShapeStatic.toString(), - weightsShapeStatic.toString())); - } - } - return ControlDependencies.addControlDependencies(tf, "static_dims_check_success"); - } - // Dynamic checks. - Operand is_scalar = tf.math.equal(weightsRank, tf.constant(0)); - List> data = - Arrays.asList( - tf.constant(ASSERT_BROADCASTABLE_ERROR_PREFIX), - tf.constant("weights.shape="), - weightsShape, - tf.constant("values.shape="), - valuesShape, - tf.constant("is_scalar="), - is_scalar); - - Operand isValidShape = - tf.select( - is_scalar, - is_scalar, - hasValidNonscalarShape(tf, weightsRank, weightsShape, valuesRank, valuesShape)); - - return tf.assertThat(isValidShape, data); - } - - private static Operand hasValidNonscalarShape( - Ops tf, - Operand weightsRank, - Operand weightsShape, - Operand valuesRank, - Operand valuesShape) { - tf = tf.withSubScope("has_valid_nonscalar_shape"); - Operand isSameRank = tf.math.equal(valuesRank, weightsRank); - return tf.select(isSameRank, hasValidDims(tf, weightsShape, valuesShape), isSameRank); - } - - private static Operand hasValidDims( - Ops tf, Operand weightsShape, Operand valuesShape) { - tf = tf.withSubScope("has_invalid_dims"); - Operand diff = tf.reduceSum(tf.math.sub(weightsShape, valuesShape), tf.constant(0)); - return tf.math.equal(tf.constant(0), diff); - } - - /** - * Broadcast `weights` to the same shape as `values`. - * - * @param tf the TensorFlow ops - * @param weights `Tensor` whose shape is broadcastable to `values` - * @param values Tensor` of any shape - * @param the type of Operand - * @return `weights` broadcast to `values` shape - */ - public static Operand broadcastWeights( - Ops tf, Operand weights, Operand values) { - tf = tf.withSubScope("broadcast_weights"); - values = tf.dtypes.cast(values, weights.asOutput().dataType()); - - Shape weightsShape = weights.asOutput().shape(); - Shape valuesShape = values.asOutput().shape(); - - if (!weightsShape.hasUnknownDimension() - && !valuesShape.hasUnknownDimension() - && ShapeUtils.isCompatibleWith(weightsShape, valuesShape)) { - return weights; - } - - weights = tf.math.mul(weights, tf.onesLike(values)); - Op dependencies = assertBroadcastable(tf, weights, values); - final Operand weightsFinal = weights; - return ControlDependencies.addControlDependencies( - tf, tfc -> tfc.identity(weightsFinal), "assertBroadcastable", dependencies); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java deleted file mode 100644 index ef2f20e648a..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PlaceholderStringFormat.java +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** Utility that handles Python style placholder formats, used in Callbacks */ -public class PlaceholderStringFormat { - private static final Pattern PYTHON_MATCH = Pattern.compile("\\{(\\w+):([\\w\\.]+)\\}"); - - /** - * Convert a Python style placeholder file path format to file path - * - * @param filename the placeholder file path format - * @param epoch the epoch number to place into the filename format - * @param logs a Dictionary of log values that are replaced into the filename format - * @return the resulting filename after applying all placeholders. - */ - public static String convertFilePath(String filename, int epoch, Map logs) { - List vars = new ArrayList<>(); - Map valMap = new HashMap<>(); - String format = getFilePath(filename, vars); - List objects = new ArrayList<>(); - vars.forEach( - key -> { - if (key.equals("epoch")) objects.add(epoch); - else objects.add((Number) logs.get(key)); - }); - return String.format(format, objects.toArray(new Number[objects.size()])); - } - - /** - * Get the variable identifiers from the placeholder filename string - * - * @param filename the filename name in Placeholder format. - * @param vars the list of variables from the caller, with added variables parsed from the - * filename - * @return a string in String.format style - */ - private static String getFilePath(String filename, List vars) { - Matcher m = PYTHON_MATCH.matcher(filename); - StringBuilder sb = new StringBuilder(); - int beginIndex = 0; - Map indexMap = new HashMap<>(); - int lastIndex = 1; - while (m.find()) { - int start = m.start(0); - int end = m.end(0); - String variable = m.group(1); - vars.add(variable); - String format = m.group(2); - Integer index = indexMap.get(variable); - if (index == null) { - indexMap.put(variable, lastIndex); - index = lastIndex++; - } - sb.append(filename.substring(beginIndex, start)); - sb.append('%').append(index).append('$').append(format); - beginIndex = end; - } - sb.append(filename.substring(beginIndex)); - return sb.toString(); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java deleted file mode 100644 index 9a21c50893f..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/PrintUtils.java +++ /dev/null @@ -1,152 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import org.tensorflow.DataType; -import org.tensorflow.Tensor; -import org.tensorflow.types.TFloat16; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TUint8; -import org.tensorflow.types.TBfloat16; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TString; - -/** - * Utility to print Tensor values - */ -public class PrintUtils { - - /** - * Print a tensor's values - * @param tensor the tensor to print - */ - public static void print(Tensor tensor) { - switch(tensor.dataType().name()) { - case "BFLOAT16": - printTBfloat16(tensor); - break; - case "FLOAT16": - printTFloat16(tensor); - break; - case "FLOAT": - printTFloat32(tensor); - break; - case "DOUBLE": - printTFloat64(tensor); - break; - case "INT32": - printTInt32(tensor); - break; - case "INT64": - printTInt64(tensor); - break; - case "UINT8": - printTUint8(tensor); - break; - case "BOOL": - printTBool(tensor); - break; - case "STRING": - printTString(tensor); - break; - default: - break; - } - - } - - /** - * Print a boolean Tensot - * @param t the tensor to print - */ - public static void printTBool(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getBoolean() + ", ")); - System.out.println(); - } - - /** - * Print a String Tensot - * @param t the tensor to print - */ - public static void printTString(Tensor t) { - t.data().scalars().forEach(s -> System.out.print("\"" + s.getObject() + "\", ")); - System.out.println(); - } - - /** - * Print a TBfloat16 Tensor - * @param t the tensor to print - */ - public static void printTBfloat16(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getFloat() + ", ")); - System.out.println(); - } - - /** - * Print a uint8 Tensor - * @param t the tensor to print - */ - public static void printTUint8(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(String.format("0x%x",s.getByte()) + ", ")); - System.out.println(); - } - - /** - * Print an int32 Tensor - * @param t the tensor to print - */ - public static void printTInt32(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getInt() + ", ")); - System.out.println(); - } - - /** - * Print an int64 Tensor - * @param t the tensor to print - */ - public static void printTInt64(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getLong() + ", ")); - System.out.println(); - } - - /** - * Print a Float16 tensor. - * @param t the tensor to print - */ - public static void printTFloat16(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getFloat() + "F, ")); - System.out.println(); - } - - /** - * Print a Float32 tensor. - * @param t the tensor to print - */ - public static void printTFloat32(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getFloat() + "F, ")); - System.out.println(); - } - /** - * Print a Float64 tensor. - * @param t the tensor to print - */ - public static void printTFloat64(Tensor t) { - t.data().scalars().forEach(s -> System.out.print(s.getDouble() + ", ")); - System.out.println(); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java deleted file mode 100644 index 9dd3de4e1a2..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ProgressBar.java +++ /dev/null @@ -1,311 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.io.Console; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -/** - * Display a progess bar either to the Console or System.out. - * - * @author jbclarke - */ -public class ProgressBar { - private final static double MICRO_SECONDS = 1E-3; - private final static long MILLI_SECOND = 1l; - private final static long SECOND = 1000L; - private final static long MINUTE = 60L * SECOND; - private final static long HOUR = 60L * MINUTE; - - private Integer target; - private int width; - private boolean verbose; - private long interval; - private List statefulMetrics; - private String unit; - - private int totalWidth; - private int seenSoFar; - private final Map values = new HashMap<>(); - private final List valuesOrder = new ArrayList<>(); - - private final long start = System.currentTimeMillis(); - private long lastUpdate = 0; - - // will be null if console is not present - private final Console console = System.console(); - - /** - * Create a ProgressBar - */ - public ProgressBar() { - this(null, 30, true, 50, "step", null ); - - } - - /** - * Create a ProgressBar - * - * @param target Total number of steps expected, null if unknown. - */ - public ProgressBar(Integer target) { - this(target, 30, true, 50, "step", null ); - - } - - /** - * Create a ProgressBar - * - * @param target Total number of steps expected, null if unknown. - * @param verbose Verbosity mode - * @param unit Display name for step counts (usually "step" or "sample"). - * @param statefulMetrics - */ - public ProgressBar(Integer target, boolean verbose, String unit, List statefulMetrics) { - this(target, 30, verbose, 50, unit, statefulMetrics ); - - } - - - - /** - * Create a ProgressBar - * - * @param target Total number of steps expected, null if unknown. - * @param width Progress bar width on screen. - * @param verbose Verbosity mode - * @param interval Minimum visual progress update interval (in milliseconds). - * @param unit Display name for step counts (usually "step" or "sample"). - * @param statefulMetrics - */ - public ProgressBar(Integer target, int width, boolean verbose, long interval, String unit, List statefulMetrics) { - this.target = target; - this.width = width; - this.verbose = verbose; - this.interval = interval; - this.unit = unit; - this.statefulMetrics = statefulMetrics == null ? Collections.EMPTY_LIST : statefulMetrics; - } - - /** - * Updates the progress bar. - * - * @param current Index of current step. - * @param values List of Pairs: `(name, value_for_last_step)`. If `name` is in - * `statefulMetrics`, `value_for_last_step` will be displayed as-is. - * Else, an average of the metric over time will be displayed. - */ - public void update(Integer current, List> values) { - update(current, values, null); - } - - /** - * Updates the progress bar. - * - * @param current Index of current step. - * @param values List of Entry: `(name, value_for_last_step)`. If `name` is in - * `statefulMetrics`, `value_for_last_step` will be displayed as-is. - * Else, an average of the metric over time will be displayed. - * @param finalize Whether this is the last update for the progress bar. If - * `None`, defaults to `current >= self.target`. - */ - public void update(Integer current, List> values, Boolean finalize) { - if(finalize == null) { - if(this.getTarget() == null) { - finalize = false; - }else { - finalize = current >= this.getTarget(); - } - } - values = values == null ? Collections.EMPTY_LIST : values; - - values.forEach(e -> { - if(!this.valuesOrder.contains(e.getKey())) { - this.valuesOrder.add(e.getKey()); - } - if(!this.statefulMetrics.contains(e.getKey())) { - int valueBase = Math.max(current - this.seenSoFar, 1); - if(!this.values.containsKey(e.getKey())) { - this.values.put(e.getKey(), new Number[] { e.getValue().doubleValue() * valueBase, valueBase}); - }else { - Number[] n = this.values.get(e.getKey()); - n[0] = n[0].doubleValue() + e.getValue().doubleValue() * valueBase; - n[1] = n[1].doubleValue() + valueBase; - } - }else { - this.values.put(e.getKey(),new Number[] { e.getValue().doubleValue(), 1}); - } - - }); - - this.seenSoFar = current; - long now = System.currentTimeMillis(); - - StringBuilder info = new StringBuilder(String.format(" - %.0fs", (double)(now - this.start)/(double)SECOND)); - - if(this.verbose) { - if(now - this.lastUpdate < this.interval && !finalize) { - return; - } - } - int prevTotalWidth = this.totalWidth; - if (this.console != null) { - for(int i = 0; i < prevTotalWidth; i++) { - this.console.printf("\b"); - } - this.console.printf("\r"); - } else { - System.out.println(); - } - StringBuilder bar = new StringBuilder(); - if(this.getTarget() != null) { - int numDigits = (int)Math.log10(this.getTarget()) + 1; - bar.append(String.format("%" + numDigits + "d/%d [", current, this.getTarget())); - double prog = (double)current / this.getTarget(); - int progWidth = (int)(this.width * prog); - if(progWidth >= 0) { - for(int i = 0; i < progWidth-1; i++) - bar.append('='); - if(current < this.getTarget()) - bar.append('>'); - else - bar.append('='); - for(int i = 0; i < this.width - progWidth; i++) - bar.append('.'); - bar.append(']'); - } - }else { - bar.append(String.format("%7d/Unknown", current)); - } - this.totalWidth = bar.length(); - if(this.console != null) { - this.console.printf(bar.toString()); - }else { - System.out.print(bar.toString()); - } - // in millis - double timePerUnit = current != null ? (double)(now - this.start) / current: 0.0; - if(this.getTarget() == null || finalize) { - if(timePerUnit >= SECOND || timePerUnit == 0.0) { // seconds - info.append(String.format(" %.0fs/%s", timePerUnit/SECOND, this.unit)); - }else if(timePerUnit >= 1) { // milliseconds - info.append(String.format(" %.0fms/%s", timePerUnit, this.unit)); - }else { // microseconds - info.append(String.format(" %.0fus/%s", timePerUnit*SECOND, this.unit)); - } - }else { - double eta = timePerUnit * (this.getTarget() - current); - String etaFormat; - if(eta >= HOUR) { // greater than an hour - etaFormat = String.format("%d:%02d:%02d", // hh:mm:ss - (int) (eta / HOUR), - (int) (eta / HOUR / MINUTE), - (int) (eta % MINUTE)/SECOND); - }else if(eta >= MINUTE) { - etaFormat = String.format("%d:%02d", // mm:ss - (int) (eta / MINUTE), - (int) (eta % MINUTE)/SECOND); - }else { - etaFormat = String.format("%ds", (int)(eta/SECOND)); - } - info.append(" - ETA: ").append(etaFormat); - } - - this.valuesOrder.forEach(key -> { - info.append(String.format(" - %s:", key)); - Number[] val = this.values.get(key); - double avg = val[0].doubleValue() / Math.max(1.0, val[1].doubleValue()); - if(Math.abs(avg) > 1e-3) - info.append(String.format(" %.4f", avg)); - else - info.append(String.format(" %.4e", avg)); - }); - this.totalWidth += info.length(); - if(prevTotalWidth > this.totalWidth) - for(int i = 0; i < prevTotalWidth - this.totalWidth; i++) - info.append(' '); - if(finalize) { - info.append('\n'); - } - - if(this.console != null) { - console.printf(info.toString()); - console.flush(); - }else { - System.out.print(info.toString()); - System.out.flush(); - } - this.lastUpdate = now; - } - - /** - * updates the progress bar by one unit - */ - public void increment() { - add(1); - } - - /** - * updates the progress bar by one unit - * - * @param values List of Entry: `(name, value_for_last_step)`. If `name` is in - * `statefulMetrics`, `value_for_last_step` will be displayed as-is. - * Else, an average of the metric over time will be displayed. - */ - public void increment(List> values) { - add(1, values); - } - - /** - * update the progress bar - * - * @param n the number of units to add to the current number - */ - public void add(int n) { - add(n, null); - } - - /** - * update the progress bar - * - * @param n the number of units to add to the current number - * @param values List of Entry: `(name, value_for_last_step)`. If `name` is in - * `statefulMetrics`, `value_for_last_step` will be displayed as-is. - * Else, an average of the metric over time will be displayed. - */ - public void add(int n, List> values) { - this.update(this.seenSoFar + n, values); - } - - /** - * @return the target - */ - public Integer getTarget() { - return target; - } - - /** - * @param target the target to set - */ - public void setTarget(Integer target) { - this.target = target; - } -} - diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java deleted file mode 100644 index 4fa69d0e537..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/ShapeUtils.java +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.util.ArrayList; -import java.util.List; -import org.tensorflow.Operand; -import org.tensorflow.Tensor; -import org.tensorflow.ndarray.NdArray; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.types.TInt64; - -/** - * - * @author Jim Clarke - */ -public class ShapeUtils { - - /** - * Convert shape operand back to a Shape object - * - * @param dims the Operand containing the shape values - * @return - */ - public static Shape getShape(Operand dims) { - // TODO is there a better way? - final List dimList = new ArrayList<>(); - dims.data().scalars().forEach(s -> dimList.add(s.getLong())); - long[] longDims = new long[dimList.size()]; - for (int i = 0; i < dimList.size(); i++) { - longDims[i] = dimList.get(i); - } - return Shape.of(longDims); - } - - /** - * get the shape for the data within a Tensor - * - * @param tensor the tensor - * @return the Shape of the tensor's data; - */ - public static Shape getShape(Tensor tensor) { - NdArray data = (NdArray) tensor.data(); - return data.shape(); - - } - - public static boolean isCompatibleWith(Shape a, Shape b) { - if (!isUnknownShape(a) && !isUnknownShape(b)) { - if (a.numDimensions() != b.numDimensions()) { - return false; - } - for (int i = 0; i < a.numDimensions(); i++) { - if (a.size(i) != Shape.UNKNOWN_SIZE - && b.size(i) != Shape.UNKNOWN_SIZE - && b.size(i) != a.size(i)) { - return false; - } - } - } - return true; - } - - public static boolean isUnknownShape(Shape a) { - return a.size() == 0; - } - - /** - * Reshapes the shape by eliminating trailing Dimensions. - * - * @param oldShape - * @param axis - * @return the new shape - */ - public static Shape squeeze(Shape oldShape, int axis) { - axis %= oldShape.numDimensions(); - if (axis < 0) { - axis = oldShape.numDimensions() + axis; - } - long[] array = oldShape.asArray(); - long[] newArray = new long[axis]; - for (int i = 0; i < axis - 1; i++) { - newArray[i] = array[i]; - } - long sum = array[axis - 1]; - for (int i = axis; i < array.length; i++) { - sum *= array[i]; - } - newArray[axis - 1] = sum; - return Shape.of(newArray); - } - - public static boolean isCompatible(long dim, long otherDim) { - return dim == Shape.UNKNOWN_SIZE - || otherDim == Shape.UNKNOWN_SIZE - || dim == otherDim; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java deleted file mode 100644 index 3dff11c513e..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SmartCond.java +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.util.function.Supplier; -import org.tensorflow.Operand; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TBool; - -/** Implements a select Operation using Lambdas */ -public class SmartCond { - - /** - * Creates a select operation - * - * @param pred the predicate (boolean) used to select - * @param then_fn the function to execute if the predicate is true - * @param else_fn the function to execute if the predicate is false - * @return the result of the select on the condition - */ - public static Operand select(Boolean pred, Supplier then_fn, Supplier else_fn) { - assert pred != null : "pred must not be null"; - assert then_fn != null : "then_fn must not be null"; - assert else_fn != null : "else_fn must not be null"; - return pred ? then_fn.get() : else_fn.get(); - } - - /** - * Creates a select operation - * - * @param pred the predicate ( true == 1) used to select - * @param then_fn the function to execute if the predicate is true - * @param else_fn the function to execute if the predicate is false - * @return the result of the select on the condition - */ - public static Operand select(Number pred, Supplier then_fn, Supplier else_fn) { - assert pred != null : "pred must not be null"; - assert then_fn != null : "then_fn must not be null"; - assert else_fn != null : "else_fn must not be null"; - return pred.intValue() == 1 ? then_fn.get() : else_fn.get(); - } - - /** - * Creates a select operation - * - * @param pred the predicate ( true if the string argument is not null and is equal, ignoring - * case, to the string "true") used to select - * @param then_fn the function to execute if the predicate is true - * @param else_fn the function to execute if the predicate is false - * @return the result of the select on the condition - */ - public static Operand select(String pred, Supplier then_fn, Supplier else_fn) { - assert pred != null : "pred must not be null"; - assert then_fn != null : "then_fn must not be null"; - assert else_fn != null : "else_fn must not be null"; - return Boolean.valueOf(pred) ? then_fn.get() : else_fn.get(); - } - - /** - * Create a Select operation - * - * @param tf the tensorFlow Ops - * @param pred the operand that evaluates to true or false - * @param then_fn the function to execute if the predicate is true - * @param else_fn the function to execute if the predicate is false - * @return a Select Operation if in graph mode, else return the result of the select - */ - public static Operand select( - Ops tf, Operand pred, Supplier then_fn, Supplier else_fn) { - assert pred != null : "pred must not be null"; - assert then_fn != null : "then_fn must not be null"; - assert else_fn != null : "else_fn must not be null"; - if (tf.scope().env().isEager()) { - return pred.asOutput().data().getBoolean() ? then_fn.get() : else_fn.get(); - } else { // TODO, maybe some day handle Supplier in the c interface - return tf.select(pred, then_fn.get(), else_fn.get()); - } - } - - /** - * Creates a slect operation - * - * @param tf the tensorFlow Ops - * @param pred the operand that evaluates to true or false - * @param then_fn the function to execute if the predicate is true - * @param else_fn the function to execute if the predicate is false - * @return the Select opertion - */ - public static Operand select(Ops tf, Operand pred, Operand true_op, Operand false_op) { - assert pred != null : "pred must not be null"; - assert true_op != null : "true_op must not be null"; - assert false_op != null : "false_op must not be null"; - return tf.select(pred, true_op, false_op); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java deleted file mode 100644 index b2e63fe1cff..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShape.java +++ /dev/null @@ -1,92 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import org.tensorflow.Operand; - -/** - * Utility class that handles sybmolic shapes so that the shapes can be resolved during runtime and - * stay consistent across operands. - * - *

The same symbols accros variaous shapes should have the same dimension values. - * - *

shape1 = Shape("N","L") - * - *

shape2 = Shape("L", "T") - * - *

For exmple, for Symbol "L" - * shape1.size(2) == shape2.size(1) - * - *

Example: - * - *

- * List symbols = new ArrayList<>(); symbols.add(new SymbolicShape(yTrue, "N", "L"));
- * if (this.isMultiLabel()) { symbols.add(new SymbolicShape(this.truePositives, "T", "L"));
- * symbols.add(new SymbolicShape(this.falsePositives, "T", "L")); symbols.add(new
- * SymbolicShape(this.trueNegatives, "T", "L")); symbols.add(new SymbolicShape(this.falseNegatives,
- * "T", "L")); } if (this.getLabelWeights() != null) { symbols.add(new
- * SymbolicShape(this.getLabelWeights(), "L", "")); }
- * updateOperations.addAll(Metrics.assert_shapes(tf, symbols, "Number of labels is not
- * consistent."));
- * 
- */ -public class SymbolicShape { - - private Operand operand; - private List symbols = new ArrayList<>(); - - /** - * Create a SymbolicShape for an Operand. - * - * @param operand the Operand - * @param symbols the symbols - */ - public SymbolicShape(Operand operand, String... symbols) { - this.operand = operand; - this.symbols.addAll(Arrays.asList(symbols)); - } - - /** @return the operand */ - public Operand getOperand() { - return operand; - } - - /** @param operand the operand to set */ - public void setOperand(Operand operand) { - this.operand = operand; - } - - /** @return the symbols */ - public List getSymbols() { - return symbols; - } - - /** @param symbols the symbols to set */ - public void setSymbols(List symbols) { - this.symbols = symbols; - } - - /** - * Get the rank of the symbol list - * - * @return the rank of the symbol list - */ - public int rank() { - return this.symbols.size(); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java deleted file mode 100644 index e7c9acf1c5e..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/SymbolicShapeDict.java +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.util.HashMap; -import java.util.Map; - -/** - * Utility class that contains a dictionary of Symbols. The map is updated with symbols and their - * dimension values. Used in creating matching shapes that depend on other shapes' dimensions. - */ -public class SymbolicShapeDict { - - /** Dictionary containing the sybmols and their associated dimensions sizes. */ - private final Map map = new HashMap<>(); - - /** - * Add a symbol with its associated dimensions size. - * - * @param symbol the symbol name - * @param size the shape dimension to associate with the symbol - */ - public void put(String symbol, Long size) { - this.map.put(symbol, size); - } - - /** - * Get the dimention size for a symbol - * - * @param symbol the symbol name - * @return the dimension size for the symbol or null if not found. - */ - public Long get(String symbol) { - return this.map.get(symbol); - } - - /** - * Determine if the symbol is contained in the dictionary. - * - * @param symbol the symbol name - * @return true, if the dictionary contains the symbol. - */ - public boolean contains(String symbol) { - return map.containsKey(symbol); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java deleted file mode 100644 index a2629ef07b1..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/utils/TypeUtils.java +++ /dev/null @@ -1,98 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import org.tensorflow.DataType; -import org.tensorflow.types.TBfloat16; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TFloat16; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TString; -import org.tensorflow.types.TUint8; - - -/** - * - * @author Jim Clarke - */ -public class TypeUtils { - - //TODO - public static boolean isComplex(DataType dtype) { - return false; - } - - public static boolean isFloating(DataType dtype) { - switch(dtype.name()) { - case "BFLOAT16": - case "FLOAT16": - case "FLOAT": - case "DOUBLE": - return true; - default: return false; - } - } - public static boolean isInteger(DataType dtype) { - switch(dtype.name()) { - case "INT32": - case "INT64": - case "UINT8": - return true; - default: return false; - } - } - - public static boolean isNumeric(DataType dtype) { - return isFloating(dtype) || isInteger(dtype); - } - - public static boolean isBoolean(DataType dtype) { - return dtype.name().equals("BOOL"); - } - - public static boolean isString(DataType dtype) { - return dtype.name().equals("STRING"); - } - - public static DataType of(String name) { - switch(name) { - case "BFLOAT16": - return TBfloat16.DTYPE; - case "FLOAT16": - return TFloat16.DTYPE; - case "FLOAT": - return TFloat32.DTYPE; - case "DOUBLE": - return TFloat64.DTYPE; - case "UINT8": - return TUint8.DTYPE; - case "INT32": - return TInt32.DTYPE; - case "INT64": - return TInt64.DTYPE; - case "BOOL": - return TBool.DTYPE; - case "STRING": - return TString.DTYPE; - default: - throw new IllegalArgumentException(String.format("%s is an unknown DataType", name)); - - } - } - -} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java deleted file mode 100644 index 1aaa4aa7af4..00000000000 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/SmartCondTest.java +++ /dev/null @@ -1,247 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import java.util.function.Supplier; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import org.tensorflow.Graph; -import org.tensorflow.Operand; -import org.tensorflow.Session; -import org.tensorflow.Tensor; -import org.tensorflow.op.Ops; -import org.tensorflow.op.core.Constant; -import org.tensorflow.types.TBool; - -/** - * - * @author Jim Clarke - */ -public class SmartCondTest { - - public SmartCondTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - /** - * Test of cond method, of class SmartCond. - */ - @Test - public void testCondOp() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - Constant pred = tf.constant(true); - sess.run(pred); - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = true; - Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - - @Test - public void testCondOp2() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - Constant pred = tf.constant(true); - sess.run(pred); - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = true; - Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - - @Test - public void testCondOpPoint1() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - Operand pred = tf.math.equal(tf.constant(0.1), tf.constant(1.0)); - sess.run(pred); - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = false; - Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - } - } - - @Test - public void testCondOpString() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - Operand pred = tf.math.equal(tf.constant("TRUE"), tf.constant("TRUE")); - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = true; - Operand resultOp = SmartCond.select(tf, pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - } - } - - /** - * Test of cond method, of class SmartCond. - */ - @Test - public void testCondBoolean() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - boolean pred = false; - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = false; - Operand resultOp = SmartCond.select(pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - - /** - * Test of cond method, of class SmartCond. - */ - @Test - public void testCondInt() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - int pred = 1; - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = true; - Operand resultOp = SmartCond.select(pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - - /** - * Test of cond method, of class SmartCond. - */ - @Test - public void testCondFloat1() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - float pred = 1.0F; - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = true; - Operand resultOp = SmartCond.select(pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - - /** - * Test of cond method, of class SmartCond. - */ - @Test - public void testCondFloat0_1() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - float pred = 0.1F; - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = false; - Operand resultOp = SmartCond.select(pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - - /** - * Test of cond method, of class SmartCond. - */ - @Test - public void testCondString() { - try (Graph graph = new Graph(); Session sess = new Session(graph)) { - Ops tf = Ops.create(graph).withName("test"); - String pred = "true"; - - Supplier true_fn = () -> tf.constant(true); - Supplier false_fn = () -> tf.constant(false); - boolean expResult = true; - Operand resultOp = SmartCond.select(pred, true_fn, false_fn); - boolean actualResult; - try (Tensor result = sess.runner().fetch(resultOp).run().get(0).expect(TBool.DTYPE)) { - actualResult = result.data().getBoolean(); - assertEquals(expResult, actualResult); - } - - } - } - -} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java deleted file mode 100644 index 18442961ac5..00000000000 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TypeUtilTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.utils; - -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import org.tensorflow.DataType; -import org.tensorflow.types.TBfloat16; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TFloat16; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TString; -import org.tensorflow.types.TUint8; - -/** - * - * @author Jim Clarke - */ -public class TypeUtilTest { - - public TypeUtilTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - /** - * Test of isFloating method, of class TypeUtils. - */ - @Test - public void testIsFloating() { - DataType dtype = TFloat32.DTYPE; - boolean expResult = true; - boolean result = TypeUtils.isFloating(dtype); - assertEquals(expResult, result); - - dtype = TInt32.DTYPE; - expResult = false; - result = TypeUtils.isFloating(dtype); - assertEquals(expResult, result); - - dtype = TString.DTYPE; - expResult = false; - result = TypeUtils.isFloating(dtype); - assertEquals(expResult, result); - } - - /** - * Test of isInteger method, of class TypeUtils. - */ - @Test - public void testIsInteger() { - DataType dtype = TFloat32.DTYPE; - boolean expResult = false; - boolean result = TypeUtils.isInteger(dtype); - assertEquals(expResult, result); - - dtype = TInt32.DTYPE; - expResult = true; - result = TypeUtils.isInteger(dtype); - assertEquals(expResult, result); - - dtype = TString.DTYPE; - expResult = false; - result = TypeUtils.isInteger(dtype); - assertEquals(expResult, result); - } - - /** - * Test of isNumeric method, of class TypeUtils. - */ - @Test - public void testIsNumeric() { - DataType dtype = TFloat16.DTYPE; - boolean expResult = true; - boolean result = TypeUtils.isNumeric(dtype); - assertEquals(expResult, result); - - dtype = TInt64.DTYPE; - expResult = true; - result = TypeUtils.isNumeric(dtype); - assertEquals(expResult, result); - - dtype = TUint8.DTYPE; - expResult = true; - result = TypeUtils.isNumeric(dtype); - assertEquals(expResult, result); - - dtype = TBool.DTYPE; - expResult = false; - result = TypeUtils.isNumeric(dtype); - assertEquals(expResult, result); - - dtype = TString.DTYPE; - expResult = false; - result = TypeUtils.isNumeric(dtype); - assertEquals(expResult, result); - } - - /** - * Test of isBoolean method, of class TypeUtils. - */ - @Test - public void testIsBoolean() { - DataType dtype = TFloat16.DTYPE; - boolean expResult = false; - boolean result = TypeUtils.isBoolean(dtype); - assertEquals(expResult, result); - - dtype = TInt64.DTYPE; - expResult = false; - result = TypeUtils.isBoolean(dtype); - assertEquals(expResult, result); - - dtype = TBool.DTYPE; - expResult = true; - result = TypeUtils.isBoolean(dtype); - assertEquals(expResult, result); - } - - /** - * Test of isString method, of class TypeUtils. - */ - @Test - public void testIsString() { - DataType dtype = TFloat16.DTYPE; - boolean expResult = false; - boolean result = TypeUtils.isString(dtype); - assertEquals(expResult, result); - - dtype = TBool.DTYPE; - expResult = false; - result = TypeUtils.isString(dtype); - assertEquals(expResult, result); - - dtype = TString.DTYPE; - expResult = true; - result = TypeUtils.isString(dtype); - assertEquals(expResult, result); - } - - /** - * Test of of method, of class TypeUtils. - */ - @Test - public void testOf() { - String name = "BFLOAT16"; - DataType expResult = TBfloat16.DTYPE; - DataType result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "FLOAT16"; - expResult = TFloat16.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "FLOAT"; - expResult = TFloat32.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "DOUBLE"; - expResult = TFloat64.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "UINT8"; - expResult = TUint8.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "INT32"; - expResult = TInt32.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "INT64"; - expResult = TInt64.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "BOOL"; - expResult = TBool.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "STRING"; - expResult = TString.DTYPE; - result = TypeUtils.of(name); - assertEquals(expResult, result); - - name = "FOO"; - try { - TypeUtils.of(name); - fail("IllegalArgumentException not thrown."); - } catch (IllegalArgumentException expected) { - - } - - } - -} From 6515c248ddd8f6911f267bee0972d44ca20f0038 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 13:51:04 -0400 Subject: [PATCH 17/55] Added nn.raw group for softmaxCrossEntropyWithLogits() and sparseSoftmaxCrossEntropyWithLogits() --- .../org/tensorflow/op/NnRawOps.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnRawOps.java diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnRawOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnRawOps.java new file mode 100644 index 00000000000..d9147af3934 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnRawOps.java @@ -0,0 +1,74 @@ +// Copyright 2020 The TensorFlow Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ============================================================================== +// +// This class has been generated, DO NOT EDIT! +// +package org.tensorflow.op; + +import org.tensorflow.Operand; +import org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits; +import org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits; +import org.tensorflow.types.family.TNumber; + +/** + * An API for building {@code nn.raw} operations as {@link Op Op}s + * + * @see {@link Ops} + */ +public final class NnRawOps { + private final Scope scope; + + NnRawOps(Scope scope) { + this.scope = scope; + } + + /** + * Computes softmax cross entropy cost and gradients to backpropagate. + *

+ * Inputs are the logits, not probabilities. + * + * @param data type for {@code loss()} output + * @param features batch_size x num_classes matrix + * @param labels batch_size x num_classes matrix + * The caller must ensure that each batch of labels represents a valid + * probability distribution. + * @return a new instance of SoftmaxCrossEntropyWithLogits + */ + public SoftmaxCrossEntropyWithLogits softmaxCrossEntropyWithLogits( + Operand features, Operand labels) { + return SoftmaxCrossEntropyWithLogits.create(scope, features, labels); + } + + /** + * Computes softmax cross entropy cost and gradients to backpropagate. + *

+ * Unlike `SoftmaxCrossEntropyWithLogits`, this operation does not accept + * a matrix of label probabilities, but rather a single label per row + * of features. This label is considered to have probability 1.0 for the + * given row. + *

+ * Inputs are the logits, not probabilities. + * + * @param data type for {@code loss()} output + * @param features batch_size x num_classes matrix + * @param labels batch_size vector with values in [0, num_classes). + * This is the label for the given minibatch entry. + * @return a new instance of SparseSoftmaxCrossEntropyWithLogits + */ + public SparseSoftmaxCrossEntropyWithLogits sparseSoftmaxCrossEntropyWithLogits( + Operand features, Operand labels) { + return SparseSoftmaxCrossEntropyWithLogits.create(scope, features, labels); + } +} From 76d0fe553559176a33040b4bdb8e07d8e033b08e Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 20 Aug 2020 14:30:16 -0400 Subject: [PATCH 18/55] Added nn.raw group for softmaxCrossEntropyWithLogits() and sparseSoftmaxCrossEntropyWithLogits() --- .../src/gen/annotations/org/tensorflow/op/NnOps.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java index a0910d4be33..aa34027cdc5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java @@ -103,14 +103,11 @@ public final class NnOps { public final NnRawOps raw; - public final NnInternalOps internal; - private final Scope scope; NnOps(Scope scope) { this.scope = scope; raw = new NnRawOps(scope); - internal = new NnInternalOps(scope); } /** From ab379d1b49d90bb42c8654f2e0cf0c258e0d3406 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 10:21:27 -0400 Subject: [PATCH 19/55] Refactor NN into individual operations under org.tensorflow.op.nn. Fix JavaDoc. Change from snake case to camel case. --- .../op/nn/SigmoidCrossEntropyWithLogits.java | 83 +++++++ .../op/nn/SoftmaxCrossEntropyWithLogits.java | 215 ++++++++++++++++++ .../SparseSoftmaxCrossEntropyWithLogits.java | 161 +++++++++++++ 3 files changed, 459 insertions(+) create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java create mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java new file mode 100644 index 00000000000..1e8f3dd7907 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java @@ -0,0 +1,83 @@ +package org.tensorflow.op.nn; + +import org.tensorflow.Operand; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Endpoint; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.op.core.Select; +import org.tensorflow.op.core.ZerosLike; +import org.tensorflow.op.dtypes.Cast; +import org.tensorflow.op.math.*; +import org.tensorflow.types.TBool; +import org.tensorflow.types.family.TNumber; + +@Operator(group = "nn") +public class SigmoidCrossEntropyWithLogits { + + /** + * Computes sigmoid cross entropy given logits. + * + *

Measures the probability error in discrete classification tasks in which each class is + * independent and not mutually exclusive. For instance, one could perform multilabel + * classification where a picture can contain both an elephant and a dog at the same time. + * + *

For brevity, let x = logits, z = labels. The logistic loss in + * pseudo-code is + * + *

+   * z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
+   *  = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
+   *  = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
+   *  = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
+   *  = (1 - z) * x + log(1 + exp(-x))
+   *  = x - x * z + log(1 + exp(-x))
+   * 
+ * + *

For x < 0, to avoid overflow in exp(-x), we reformulate the above + * + *

+   * x - x * z + log(1 + exp(-x))
+   *  = log(exp(x)) - x * z + log(1 + exp(-x))
+   *  = - x * z + log(1 + exp(x))
+   * 
+ * + *

Hence, to ensure stability and avoid overflow, the implementation uses this equivalent + * formulation + * + *

+   *   max(x, 0) - x * z + log(1 + exp(-abs(x)))
+   * 
+ * + *

logits and labels must have the same type and shape. + * + *

+ * + * @param scope The TensorFlow scope + * @param labels the labels + * @param logits the logits of type float32 or float64 + * @param the type of labels and logits + * @return the component-wise logistic losses. + * @throws IllegalArgumentException if logits' and labels' do not have the same shape + */ + @Endpoint(name = "sigmoidCrossEntropyWithLogits") + public static Operand sigmoidCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits) { + if (!labels.asOutput().shape().equals(logits.asOutput().shape())) { + throw new IllegalArgumentException( + String.format( + "logits and labels must have the same shape (%s vs %s)", + labels.asOutput().shape().toString(), logits.asOutput().shape())); + } + + Operand zeros = + Cast.create(scope, ZerosLike.create(scope, logits), logits.asOutput().dataType()); + Operand cond = GreaterEqual.create(scope, logits, zeros); + + Operand relu_logits = Select.create(scope, cond, logits, zeros); + Operand neg_abs_logits = Select.create(scope, cond, Neg.create(scope, logits), logits); + return Add.create( + scope, + Sub.create(scope, relu_logits, Mul.create(scope, logits, labels)), + Log1p.create(scope, Exp.create(scope, neg_abs_logits))); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java new file mode 100644 index 00000000000..6d8f5ef6f78 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java @@ -0,0 +1,215 @@ +package org.tensorflow.op.nn; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Endpoint; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.op.core.*; +import org.tensorflow.op.dtypes.Cast; +import org.tensorflow.op.linalg.Transpose; +import org.tensorflow.op.math.Sub; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +import java.util.Arrays; +import java.util.List; + +@Operator(group = "nn") +public class SoftmaxCrossEntropyWithLogits { + + /** + * Computes softmax cross entropy between logits and labels. + * + *

Measures the probability error in discrete classification tasks in which the classes are + * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is + * labeled with one and only one label: an image can be a dog or a truck, but not both. + * + *

NOTE: + * + *

While the classes are mutually exclusive, their probabilities need not be. All that is + * required is that each row of labels is a valid probability distribution. If they + * are not, the computation of the gradient will be incorrect. + * + *

If using exclusive labels (wherein one and only one class is true at a time), + * see {@link org.tensorflow.op.NnOps#sparseSoftmaxCrossEntropyWithLogits} + * + *

Usage: + * + *

+   *   Operand<TFloat32> logits =
+   *       tf.constant(new float[][] {{4.0F, 2.0F, 1.0F}, {0.0F, 5.0F, 1.0F}} );
+   *   Operand<TFloat32> labels =
+   *       tf.constant(new float[][] {{1.0F, 0.0F, 0.0F}, {0.0F, 0.8F, 0.2F}} );
+   *   Operand<TFloat32> output =
+   *       tf.nn.softmaxCrossEntropyWithLogits(labels, logits, -1);
+   *   // output Shape = [2]
+   *   // dataType = FLOAT (1)
+   *   // values { 0.169846, 0.824745 }
+   * 
+ * + *

Backpropagation will happen into both logits and labels. To + * disallow backpropagation into labels, pass label tensors through + * tf.stopGradient before feeding it to this function. + * + * @param scope current scope + * @param labels Each vector along the class dimension should hold a valid probability + * distribution e.g. for the case in which labels are of shape [batch_size, num_classes] + * , each row of labels[i] must be a valid probability distribution. + * @param logits Per-label activations, typically a linear output. These activation energies are + * interpreted as unnormalized log probabilities. + * @param axis The class dimension. -1 is the last dimension. + * @param the data type of the logits + * @param the number type of the operands + * @return the softmax cross entropy loss. Its type is the same as logits and its + * shape is the same as labels except that it does not have the last dimension of + * labels. + */ + @Endpoint(name = "softmaxCrossEntropyWithLogits") + public static Operand softmaxCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits, int axis) { + axis = axis % logits.asOutput().shape().numDimensions(); + if (axis < 0) { + axis += logits.asOutput().shape().numDimensions(); + } + + Operand preciseLogits = + (Operand) + logits; // cannot use generics cause logits of bool gets cast to TFloat32 + + boolean convertToFloat32 = + logits.asOutput().dataType() == TFloat16.DTYPE + || logits.asOutput().dataType() == TBfloat16.DTYPE; + if (convertToFloat32) { + preciseLogits = Cast.create(scope, logits, TFloat32.DTYPE); + } + /* cannot use generics on DataType because preciseLogits may have been cast. */ + DataType dtype = preciseLogits.asOutput().dataType(); + Operand castLabels = Cast.create(scope, labels, dtype); + Operand inputRank = Cast.create(scope, Rank.create(scope, preciseLogits), TInt64.DTYPE); + Shape shape = logits.asOutput().shape(); + + // Move the dim to the end if dim is not the last dimension. + if (axis != -1 && axis != preciseLogits.asOutput().shape().numDimensions() - 1) { + preciseLogits = moveDimToEnd(scope, preciseLogits, axis, inputRank); + castLabels = moveDimToEnd(scope, castLabels, axis, inputRank); + } + + Shape inputShape = preciseLogits.asOutput().shape(); + preciseLogits = flattenOuterDims(scope, preciseLogits); + castLabels = flattenOuterDims(scope, castLabels); + + org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits smax = + org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits.create( + scope, preciseLogits, castLabels); + /* cannot use generic on cost, because cost may be recast later. */ + Operand cost = smax.loss(); + Operand outputShape = + Slice.create( + scope, + Constant.vectorOf(scope, inputShape.asArray()), + Constant.vectorOf(scope, new long[] {0}), + Constant.vectorOf(scope, new long[] {inputShape.numDimensions() - 1})); + cost = Reshape.create(scope, cost, outputShape); + if (scope.env().isGraph() && !shape.hasUnknownDimension()) { + long[] array = shape.asArray(); + long[] newArray = new long[array.length - 1]; + if (axis < 0) { + axis = shape.numDimensions() + axis; + } + for (int i = 0; i < axis; i++) { + newArray[i] = shape.size(i); + } + for (int i = axis + 1; i < shape.numDimensions(); i++) { + newArray[i - 1] = shape.size(i); + } + Shape newShape = Shape.of(newArray); + cost = Reshape.create(scope, cost, Constant.vectorOf(scope, newShape.asArray())); + } + + if (convertToFloat32) { + cost = Cast.create(scope, cost, logits.asOutput().dataType()); + } + return cost; + } + + /** + * Flattens logits' outer dimensions and keep its last dimension. + * + * @param scope the TensorFlow scope + * @param logits the logits + * @param the type of logits + * @return the flattened logits + */ + private static Operand flattenOuterDims(Scope scope, Operand logits) { + Operand one = Constant.scalarOf(scope, 1L); + + org.tensorflow.ndarray.Shape shape = logits.asOutput().shape(); + int ndims = shape.numDimensions(); + if (!shape.hasUnknownDimension()) { + long product = 1L; + boolean productValid = true; + for (int i = ndims - 2; i >= 0; i--) { + long d = shape.size(i); + if (d == org.tensorflow.ndarray.Shape.UNKNOWN_SIZE) { + productValid = false; + break; + } + product *= d; + } + if (productValid) { + return Reshape.create( + scope, logits, Constant.vectorOf(scope, new long[] {product, shape.size(-1)})); + } + } + + Operand rank = Cast.create(scope, Rank.create(scope, logits), TInt64.DTYPE); + Operand rankMinusOne = Sub.create(scope, rank, one); + + Operand lastDimSize = + Slice.create( + scope, + org.tensorflow.op.core.Shape.create(scope, logits, TInt64.DTYPE), + rankMinusOne, + one); + Operand concat = + Concat.create( + scope, + Arrays.asList(Constant.arrayOf(scope, -1L), lastDimSize), + Constant.scalarOf(scope, 0)); + return Reshape.create(scope, logits, concat); + } + + /** + * Move the dim to the end if dimIndex is not the last dimension. + * + * @param scope The TensorFlow Scope + * @param input the input to reshape + * @param dimIndex the index to move + * @param rank the number of Dimensions in the tensor + * @param the data type of the tensor. + * @param the data type of the rank + * @return the reshaped input + */ + private static Operand moveDimToEnd( + Scope scope, Operand input, int dimIndex, Operand rank) { + DataType rankDType = rank.asOutput().dataType(); + Operand one = Cast.create(scope, Constant.scalarOf(scope, 1), rankDType); + List> concatList = + Arrays.asList( + Range.create( + scope, Cast.create(scope, Constant.scalarOf(scope, dimIndex), rankDType), one, one), + Range.create( + scope, + Cast.create(scope, Constant.scalarOf(scope, dimIndex + 1), rankDType), + one, + one)); + return Transpose.create( + scope, input, Concat.create(scope, concatList, Constant.scalarOf(scope, 0))); + } +} diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java new file mode 100644 index 00000000000..8d125235719 --- /dev/null +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java @@ -0,0 +1,161 @@ +package org.tensorflow.op.nn; + +import org.tensorflow.Operand; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Scope; +import org.tensorflow.op.annotation.Endpoint; +import org.tensorflow.op.annotation.Operator; +import org.tensorflow.op.core.AssertThat; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Reshape; +import org.tensorflow.op.core.Shapes; +import org.tensorflow.op.dtypes.Cast; +import org.tensorflow.op.math.Equal; +import org.tensorflow.types.TBfloat16; +import org.tensorflow.types.TFloat16; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.family.TNumber; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +@Operator(group = "nn") +public class SparseSoftmaxCrossEntropyWithLogits { + + /** + * Computes sparse softmax cross entropy between logits and labels. + * + *

Measures the probability error in discrete classification tasks in which the classes are + * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is + * labeled with one and only one label: an image can be a dog or a truck, but not both. + * + *

NOTE: + * + *

For this operation, the probability of a given label is considered exclusive. That is, soft + * classes are not allowed, and the labels vector must provide a single specific + * index for the true class for each row of logits (each minibatch entry). For soft + * softmax classification with a probability distribution for each entry, {@link + * org.tensorflow.op.NnOps#softmaxCrossEntropyWithLogits}. + * + *

WARNING: + * + *

This op expects unscaled logits, since it performs a softmax on logits + * internally for efficiency. Do not call this op with the output of softmax, + * as it will produce incorrect results. + * + *

A common use case is to have logits of shape [batchSize, numClasses] and have + * labels of shape [batchSize], but higher dimensions are supported, in which case + * the dim-th dimension is assumed to be of size numClasses. + * logits must have the dataType of TFloat16, TFloat32 + * , or TFloat64, and labels must have the dtype of TInt32 + * or TInt64. + * + * @param scope current scope + * @param labels Tensor of shape [d_0, d_1, ..., d_{r-1}] (where r + * is rank of labels and result) and the dataType is TInt32 + * or TInt64. Each entry in labels must be an index in [0, + * numClasses). Other values will raise an exception when this op is run on CPU, and + * return NaN for corresponding loss and gradient rows on GPU. + * @param logits Per-label activations (typically a linear output) of shape [d_0, d_1, ..., + * d_{r-1}, numClasses] and dataType of TFloat16, TFloat32, + * or TFloat64. These activation energies are interpreted as unnormalized log + * probabilities. + * @return A Tensor of the same shape as labels and of the same type as + * logits with the softmax cross entropy loss. + */ + @Endpoint(name = "sparseSoftmaxCrossEntropyWithLogits") + public static Operand sparseSoftmaxCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits) { + scope = scope.withSubScope("SparseSoftmaxCrossEntropyWithLogits"); + /** cannot use generics on preciseLogits as it may be recast later */ + Operand preciseLogits = logits; + boolean convertToFloat32 = + logits.asOutput().dataType() == TFloat16.DTYPE + || logits.asOutput().dataType() == TBfloat16.DTYPE; + if (convertToFloat32) { + preciseLogits = Cast.create(scope, logits, TFloat32.DTYPE); + } + Shape labelsStaticShape = labels.asOutput().shape(); + org.tensorflow.op.core.Shape labelsShape = + org.tensorflow.op.core.Shape.create(scope, labels); + Shape logitsShape = logits.asOutput().shape(); + Shape logitsShortened = logitsShape.take(logitsShape.numDimensions() - 1); + + boolean staticShapesFullyDefined = + !labelsStaticShape.hasUnknownDimension() && !logitsShortened.hasUnknownDimension(); + if (logitsShape.numDimensions() == 0) { + throw new IllegalArgumentException( + String.format("Logits cannot be scalars - received shape %s.", logitsShape)); + } + if (!logitsShape.hasUnknownDimension() + && !labelsStaticShape.hasUnknownDimension() + && labelsStaticShape.numDimensions() != logitsShape.numDimensions() - 1) { + throw new IllegalArgumentException( + String.format( + "Rank mismatch: Rank of labels (received %s) should equal rank of logits minus 1 (received %s).", + labelsStaticShape.toString(), logitsShape.toString())); + } + + if (staticShapesFullyDefined && !labelsStaticShape.equals(logitsShortened)) { + throw new IllegalArgumentException( + String.format( + "Shape mismatch: The shape of labels (received %s) " + + "should equal the shape of logits except for the last " + + "dimension (received %s).", + labelsStaticShape.toString(), logitsShape.toString())); + } + // Check if no reshapes are required. + if (logitsShape.numDimensions() == 2) { + org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits smax = + org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits.create( + scope, preciseLogits, labels); + Operand loss = smax.loss(); + if (logits.asOutput().dataType() == TFloat16.DTYPE) { + loss = Cast.create(scope, loss, TFloat16.DTYPE); + } + return loss; + } + + List shapeChecks = new ArrayList<>(); + + if (!staticShapesFullyDefined) { + shapeChecks.add( + AssertThat.create( + scope, + Equal.create( + scope, + org.tensorflow.op.core.Shape.create(scope, labels), + Shapes.take( + scope, + org.tensorflow.op.core.Shape.create(scope, logits), + Constant.scalarOf(scope, -1))), + Collections.singletonList( + Constant.scalarOf( + scope, + "Shape mismatch: The shape of labels " + + "should equal the shape of logits except for the last " + + "dimension ")))); + } + + // Reshape logits to 2 dim, labels to 1 dim. + long numClassses = logitsShape.size(logitsShape.numDimensions() - 1); + + preciseLogits = + Reshape.create( + scope, preciseLogits, Constant.vectorOf(scope, new long[] {-1, numClassses})); + labels = Reshape.create(scope, labels, Constant.scalarOf(scope, -1)); + scope.withControlDependencies(shapeChecks); + org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits smax = + org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits.create( + scope, preciseLogits, labels); + Operand cost = smax.loss(); + cost = Reshape.create(scope, cost, labelsShape); + if (logits.asOutput().dataType() == TFloat16.DTYPE) { + cost = Cast.create(scope, cost, TFloat16.DTYPE); + } + return cost; + } +} From 889d67e11ec7154605a0cb235097e30c53a5704a Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 10:21:33 -0400 Subject: [PATCH 20/55] Refactor NN into individual operations under org.tensorflow.op.nn. Fix JavaDoc. Change from snake case to camel case. --- .../main/java/org/tensorflow/op/core/NN.java | 379 ------------------ 1 file changed, 379 deletions(-) delete mode 100644 tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java deleted file mode 100644 index b4fa7bd01de..00000000000 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/core/NN.java +++ /dev/null @@ -1,379 +0,0 @@ -package org.tensorflow.op.core; - -import org.tensorflow.DataType; -import org.tensorflow.Operand; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Op; -import org.tensorflow.op.Scope; -import org.tensorflow.op.annotation.Endpoint; -import org.tensorflow.op.annotation.Operator; -import org.tensorflow.op.math.*; -import org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits; -import org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits; -import org.tensorflow.types.*; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.op.dtypes.Cast; -import org.tensorflow.types.family.TType; -import org.tensorflow.op.linalg.Transpose; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -@Operator(group = "nn") -public abstract class NN { - - /** - * Computes softmax cross entropy between `logits` and `labels`. - * - *

Measures the probability error in discrete classification tasks in which the classes are - * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is - * labeled with one and only one label: an image can be a dog or a truck, but not both. - * - *

**NOTE:** While the classes are mutually exclusive, their probabilities need not be. All - * that is required is that each row of `labels` is a valid probability distribution. If they are - * not, the computation of the gradient will be incorrect. - * - *

If using exclusive `labels` (wherein one and only one class is true at a time), see - * `sparse_softmax_cross_entropy_with_logits`. - * - *

Usage: - * - *

-   *   >>> logits = [[4.0, 2.0, 1.0], [0.0, 5.0, 1.0]]
-   *   >>> labels = [[1.0, 0.0, 0.0], [0.0, 0.8, 0.2]]
-   *   >>> tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
-   *   
-   * 
- * - *

Backpropagation will happen into both `logits` and `labels`. To disallow backpropagation - * into `labels`, pass label tensors through `tf.stop_gradient` before feeding it to this - * function. - * - * @param scope current scope - * @param labels Each vector along the class dimension should hold a valid probability - * distribution e.g. for the case in which labels are of shape `[batch_size, num_classes]`, - * each row of `labels[i]` must be a valid probability distribution. - * @param logits Per-label activations, typically a linear output. These activation energies are - * interpreted as unnormalized log probabilities. - * @param axis The class dimension. -1 is the last dimension. - * @param the data type of the logits - * @param the number type of the operands - * @return the softmax cross entropy loss. Its type is the same as `logits` and its shape is the - * same as `labels` except that it does not have the last dimension of `labels`. - */ - @Endpoint(name = "softmaxCrossEntropyWithLogits") - public static Operand softmaxCrossEntropyWithLogits( - Scope scope, Operand labels, Operand logits, int axis) { - axis = axis % logits.asOutput().shape().numDimensions(); - if (axis < 0) { - axis += logits.asOutput().shape().numDimensions(); - } - - Operand precise_logits = - logits; // cannot use generics cause logits of bool gets cast to TFloat32 - - boolean convertToFloat32 = - logits.asOutput().dataType() == TFloat16.DTYPE - || logits.asOutput().dataType() == TBfloat16.DTYPE; - if (convertToFloat32) { - precise_logits = Cast.create(scope, logits, TFloat32.DTYPE); - } - /* cannot use generics on DataType because precis_logits may have been cast. */ - DataType dtype = precise_logits.asOutput().dataType(); - labels = Cast.create(scope, labels, dtype); - Operand inputRank = - Cast.create(scope, Rank.create(scope, precise_logits), TInt64.DTYPE); - Shape shape = logits.asOutput().shape(); - - // Move the dim to the end if dim is not the last dimension. - if (axis != -1 && axis != precise_logits.asOutput().shape().numDimensions() - 1) { - precise_logits = moveDimToEnd(scope, precise_logits, axis, inputRank); - labels = moveDimToEnd(scope, labels, axis, inputRank); - } - - Shape inputShape = precise_logits.asOutput().shape(); - precise_logits = flattenOuterDims(scope, precise_logits); - labels = flattenOuterDims(scope, labels); - SoftmaxCrossEntropyWithLogits smax = - SoftmaxCrossEntropyWithLogits.create(scope, precise_logits, labels); - /* cannot use generic on cost, because cost may be recast later. */ - Operand cost = smax.loss(); - Operand outputShape = - Slice.create( - scope, - Constant.vectorOf(scope, inputShape.asArray()), - Constant.vectorOf(scope, new long[] {0}), - Constant.vectorOf(scope, new long[] {inputShape.numDimensions() - 1})); - cost = Reshape.create(scope, cost, outputShape); - if (scope.env().isGraph() && !shape.hasUnknownDimension()) { - long[] array = shape.asArray(); - long[] newArray = new long[array.length - 1]; - if (axis < 0) { - axis = shape.numDimensions() + axis; - } - for (int i = 0; i < axis; i++) { - newArray[i] = shape.size(i); - } - for (int i = axis + 1; i < shape.numDimensions(); i++) { - newArray[i - 1] = shape.size(i); - } - Shape newShape = Shape.of(newArray); - cost = Reshape.create(scope, cost, Constant.vectorOf(scope, newShape.asArray())); - } - - if (convertToFloat32) { - cost = Cast.create(scope, cost, logits.asOutput().dataType()); - } - return cost; - } - - /** - * Computes sparse softmax cross entropy between `logits` and `labels`. - * - * @param scope current scope - * @param labels `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of `labels` and - * result) and dtype `int32` or `int64`. Each entry in `labels` must be an index in `[0, - * num_classes)`. Other values will raise an exception when this op is run on CPU, and return - * `NaN` for corresponding loss and gradient rows on GPU. - * @param logits Per-label activations (typically a linear output) of shape `[d_0, d_1, ..., - * d_{r-1}, num_classes]` and dtype `float16`, `float32`, or `float64`. These activation - * energies are interpreted as unnormalized log probabilities. - * @return A `Tensor` of the same shape as `labels` and of the same type as `logits` with the - * softmax cross entropy loss. - */ - @Endpoint(name = "sparseSoftmaxCrossEntropyWithLogits") - public static Operand sparseSoftmaxCrossEntropyWithLogits( - Scope scope, Operand labels, Operand logits) { - // assert shapeIsCompatible(labels.asOutput().shape(), logits.asOutput().shape()): - // String.format("Shapes %s and %s are incompatible", - // labels.asOutput().shape(), logits.asOutput().shape()); - scope = scope.withSubScope("SparseSoftmaxCrossEntropyWithLogits"); - /** cannot use generics on precise_logits as it may be recast later */ - Operand precise_logits = logits; - boolean convertToFloat32 = - logits.asOutput().dataType() == TFloat16.DTYPE - || logits.asOutput().dataType() == TBfloat16.DTYPE; - if (convertToFloat32) { - precise_logits = Cast.create(scope, logits, TFloat32.DTYPE); - } - Shape labelsStaticShape = labels.asOutput().shape(); - org.tensorflow.op.core.Shape labelsShape = - org.tensorflow.op.core.Shape.create(scope, labels); - Shape logitsShape = logits.asOutput().shape(); - Shape logitsShortened = logitsShape.take(logitsShape.numDimensions() - 1); - - boolean staticShapesFullyDefined = - !labelsStaticShape.hasUnknownDimension() && !logitsShortened.hasUnknownDimension(); - if (logitsShape.numDimensions() == 0) { - throw new IllegalArgumentException( - String.format("Logits cannot be scalars - received shape %s.", logitsShape)); - } - if (!logitsShape.hasUnknownDimension() - && !labelsStaticShape.hasUnknownDimension() - && labelsStaticShape.numDimensions() != logitsShape.numDimensions() - 1) { - throw new IllegalArgumentException( - String.format( - "Rank mismatch: Rank of labels (received %s) should equal rank of logits minus 1 (received %s).", - labelsStaticShape.toString(), logitsShape.toString())); - } - - if (staticShapesFullyDefined && !labelsStaticShape.equals(logitsShortened)) { - throw new IllegalArgumentException( - String.format( - "Shape mismatch: The shape of labels (received %s) " - + "should equal the shape of logits except for the last " - + "dimension (received %s).", - labelsStaticShape.toString(), logitsShape.toString())); - } - // Check if no reshapes are required. - if (logitsShape.numDimensions() == 2) { - SparseSoftmaxCrossEntropyWithLogits smax = - SparseSoftmaxCrossEntropyWithLogits.create(scope, precise_logits, labels); - Operand loss = smax.loss(); - if (logits.asOutput().dataType() == TFloat16.DTYPE) { - loss = Cast.create(scope, loss, TFloat16.DTYPE); - } - return loss; - } - - List shapeChecks = new ArrayList<>(); - - if (!staticShapesFullyDefined) { - shapeChecks.add( - AssertThat.create( - scope, - Equal.create( - scope, - org.tensorflow.op.core.Shape.create(scope, labels), - Shapes.take( - scope, - org.tensorflow.op.core.Shape.create(scope, logits), - Constant.scalarOf(scope, -1))), - Collections.singletonList( - Constant.scalarOf( - scope, - "Shape mismatch: The shape of labels " - + "should equal the shape of logits except for the last " - + "dimension ")))); - } - - // Reshape logits to 2 dim, labels to 1 dim. - long numClassses = logitsShape.size(logitsShape.numDimensions() - 1); - - precise_logits = - Reshape.create( - scope, precise_logits, Constant.vectorOf(scope, new long[] {-1, numClassses})); - labels = Reshape.create(scope, labels, Constant.scalarOf(scope, -1)); - scope.withControlDependencies(shapeChecks); - SparseSoftmaxCrossEntropyWithLogits smax = - SparseSoftmaxCrossEntropyWithLogits.create(scope, precise_logits, labels); - Operand cost = smax.loss(); - cost = Reshape.create(scope, cost, labelsShape); - if (logits.asOutput().dataType() == TFloat16.DTYPE) { - cost = Cast.create(scope, cost, TFloat16.DTYPE); - } - return cost; - } - - /** - * Computes sigmoid cross entropy given `logits`. - * - *

Measures the probability error in discrete classification tasks in which each class is - * independent and not mutually exclusive. For instance, one could perform multilabel - * classification where a picture can contain both an elephant and a dog at the same time. - * - *

For brevity, let `x = logits`, `z = labels`. The logistic loss is - * - *

-   *     z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
-   *     = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
-   *     = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
-   *     = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
-   *     = (1 - z) * x + log(1 + exp(-x))
-   *     = x - x * z + log(1 + exp(-x))
-   * 
- * - *

For x < 0, to avoid overflow in exp(-x), we reformulate the above - * - *

-   *      x - x * z + log(1 + exp(-x))
-   *      = log(exp(x)) - x * z + log(1 + exp(-x))
-   *      = - x * z + log(1 + exp(x))
-   * 
- * - *

Hence, to ensure stability and avoid overflow, the implementation uses this equivalent - * formulation - * - *

-   *     max(x, 0) - x * z + log(1 + exp(-abs(x)))
-   * 
- * - *

`logits` and `labels` must have the same type and shape. - * - * @param scope The TensorFlow scope - * @param labels the labels - * @param logits the logits of type float32 or float64 - * @param the type of labels and logits - * @return the component-wise logistic losses. - */ - @Endpoint(name = "sigmoidCrossEntropyWithLogits") - public static Operand sigmoidCrossEntropyWithLogits( - Scope scope, Operand labels, Operand logits) { - if (labels.asOutput().shape().numDimensions() != logits.asOutput().shape().numDimensions()) - throw new IllegalArgumentException( - String.format( - "logits and labels must have the same shape (%s vs %s)", - labels.asOutput().shape().toString(), logits.asOutput().shape())); - Operand zeros = - Cast.create(scope, ZerosLike.create(scope, logits), logits.asOutput().dataType()); - Operand cond = GreaterEqual.create(scope, logits, zeros); - - Operand relu_logits = Select.create(scope, cond, logits, zeros); - Operand neg_abs_logits = Select.create(scope, cond, Neg.create(scope, logits), logits); - return Add.create( - scope, - Sub.create(scope, relu_logits, Mul.create(scope, logits, labels)), - Log1p.create(scope, Exp.create(scope, neg_abs_logits))); - } - - /** - * Flattens logits' outer dimensions and keep its last dimension. - * - * @param scope the TensorFlow scope - * @param logits the logits - * @param the type of logits - * @return the flattened logits - */ - private static Operand flattenOuterDims(Scope scope, Operand logits) { - Operand one = Constant.scalarOf(scope, 1L); - - org.tensorflow.ndarray.Shape shape = logits.asOutput().shape(); - int ndims = shape.numDimensions(); - if (!shape.hasUnknownDimension()) { - long product = 1L; - boolean productValid = true; - for (int i = ndims - 2; i >= 0; i--) { - long d = shape.size(i); - if (d == org.tensorflow.ndarray.Shape.UNKNOWN_SIZE) { - productValid = false; - break; - } - product *= d; - } - if (productValid) { - org.tensorflow.ndarray.Shape outputShape = Shape.of(product, shape.size(ndims - 1)); - return Reshape.create(scope, logits, Constant.vectorOf(scope, outputShape.asArray())); - } - } - - Operand rank = Cast.create(scope, Rank.create(scope, logits), TInt64.DTYPE); - Operand rankMinusOne = Sub.create(scope, rank, one); - - Operand last_dim_size = - Slice.create( - scope, - org.tensorflow.op.core.Shape.create(scope, logits, TInt64.DTYPE), - rankMinusOne, - one); - Operand concat = - Concat.create( - scope, - Arrays.asList(Constant.vectorOf(scope, new long[] {-1}), last_dim_size), - Constant.scalarOf(scope, 0)); - return Reshape.create(scope, logits, concat); - } - - /** - * Move the dim to the end if dim is not the last dimension. - * - * @param scope The TensorFlow Scope - * @param input the input to reshape - * @param dim_index the index to move - * @param rank the number of Dimensions in the tensor - * @param the data type of the tensor. - * @param the data type of the rank - * @return the reshaped input - */ - private static Operand moveDimToEnd( - Scope scope, Operand input, int dim_index, Operand rank) { - DataType rankDType = rank.asOutput().dataType(); - Operand one = Cast.create(scope, Constant.scalarOf(scope, 1), rankDType); - List> concatList = - Arrays.asList( - Range.create( - scope, - Cast.create(scope, Constant.scalarOf(scope, dim_index), rankDType), - one, - one), - Range.create( - scope, - Cast.create(scope, Constant.scalarOf(scope, (dim_index + 1)), rankDType), - rank, - one)); - return Transpose.create( - scope, input, Concat.create(scope, concatList, Constant.scalarOf(scope, 0))); - } -} From 515b799bf793fbb38a47b5aa92d948dad052187b Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 10:34:57 -0400 Subject: [PATCH 21/55] Reformatted code --- .../src/main/java/org/tensorflow/types/TBool.java | 9 +++++---- .../src/main/java/org/tensorflow/types/TString.java | 11 ++++++----- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java index bac5fb96f87..3cc72101893 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TBool.java @@ -17,21 +17,22 @@ package org.tensorflow.types; -import java.util.function.Consumer; import org.tensorflow.DataType; import org.tensorflow.Tensor; import org.tensorflow.exceptions.TensorFlowException; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; -import org.tensorflow.ndarray.buffer.layout.DataLayouts; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.ndarray.buffer.BooleanDataBuffer; import org.tensorflow.ndarray.BooleanNdArray; import org.tensorflow.ndarray.NdArray; +import org.tensorflow.ndarray.Shape; import org.tensorflow.ndarray.StdArrays; +import org.tensorflow.ndarray.buffer.BooleanDataBuffer; +import org.tensorflow.ndarray.buffer.layout.DataLayouts; import org.tensorflow.ndarray.impl.dense.BooleanDenseNdArray; import org.tensorflow.types.family.TType; +import java.util.function.Consumer; + /** * Boolean tensor type. * diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java index 0f097a16ddb..6e2e7a7ba56 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/types/TString.java @@ -17,23 +17,24 @@ package org.tensorflow.types; -import java.nio.charset.Charset; -import java.nio.charset.StandardCharsets; -import java.util.function.Function; import org.tensorflow.DataType; import org.tensorflow.Tensor; import org.tensorflow.internal.buffer.StringTensorBuffer; import org.tensorflow.internal.buffer.TensorBuffers; import org.tensorflow.internal.c_api.TF_Tensor; +import org.tensorflow.ndarray.NdArray; +import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; import org.tensorflow.ndarray.buffer.DataBuffer; import org.tensorflow.ndarray.buffer.layout.DataLayout; import org.tensorflow.ndarray.buffer.layout.DataLayouts; -import org.tensorflow.ndarray.NdArray; -import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.impl.dense.DenseNdArray; import org.tensorflow.types.family.TType; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.function.Function; + /** * String type. * From 5a9fe3747b730cbfb28b544bcac3aeb2077499a2 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 10:35:19 -0400 Subject: [PATCH 22/55] Added sub scope --- .../java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java | 1 + .../java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java | 1 + 2 files changed, 2 insertions(+) diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java index 1e8f3dd7907..1918e55a2f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java @@ -68,6 +68,7 @@ public static Operand sigmoidCrossEntropyWithLogits( "logits and labels must have the same shape (%s vs %s)", labels.asOutput().shape().toString(), logits.asOutput().shape())); } + scope = scope.withSubScope("SigmoidCrossEntropyWithLogits"); Operand zeros = Cast.create(scope, ZerosLike.create(scope, logits), logits.asOutput().dataType()); diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java index 6d8f5ef6f78..124b520aac8 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java @@ -73,6 +73,7 @@ public class SoftmaxCrossEntropyWithLogits { @Endpoint(name = "softmaxCrossEntropyWithLogits") public static Operand softmaxCrossEntropyWithLogits( Scope scope, Operand labels, Operand logits, int axis) { + scope = scope.withSubScope("SoftmaxCrossEntropyWithLogits"); axis = axis % logits.asOutput().shape().numDimensions(); if (axis < 0) { axis += logits.asOutput().shape().numDimensions(); From 8d21dd7266e48a4df36813ed3fb9dc1adee58915 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 12:30:10 -0400 Subject: [PATCH 23/55] Miscellaneous fixes based on review comments. --- .../op/nn/SigmoidCrossEntropyWithLogits.java | 34 ++++++++++++++++--- .../op/nn/SoftmaxCrossEntropyWithLogits.java | 14 ++++---- .../SparseSoftmaxCrossEntropyWithLogits.java | 10 +++--- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java index 1918e55a2f7..4f3e9569103 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SigmoidCrossEntropyWithLogits.java @@ -1,6 +1,7 @@ package org.tensorflow.op.nn; import org.tensorflow.Operand; +import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Endpoint; import org.tensorflow.op.annotation.Operator; @@ -62,7 +63,7 @@ public class SigmoidCrossEntropyWithLogits { @Endpoint(name = "sigmoidCrossEntropyWithLogits") public static Operand sigmoidCrossEntropyWithLogits( Scope scope, Operand labels, Operand logits) { - if (!labels.asOutput().shape().equals(logits.asOutput().shape())) { + if (!isCompatible(labels.asOutput().shape(), logits.asOutput().shape())) { throw new IllegalArgumentException( String.format( "logits and labels must have the same shape (%s vs %s)", @@ -74,11 +75,34 @@ public static Operand sigmoidCrossEntropyWithLogits( Cast.create(scope, ZerosLike.create(scope, logits), logits.asOutput().dataType()); Operand cond = GreaterEqual.create(scope, logits, zeros); - Operand relu_logits = Select.create(scope, cond, logits, zeros); - Operand neg_abs_logits = Select.create(scope, cond, Neg.create(scope, logits), logits); + Operand reluLogits = Select.create(scope, cond, logits, zeros); + Operand negAbsLogits = Select.create(scope, cond, Neg.create(scope, logits), logits); return Add.create( scope, - Sub.create(scope, relu_logits, Mul.create(scope, logits, labels)), - Log1p.create(scope, Exp.create(scope, neg_abs_logits))); + Sub.create(scope, reluLogits, Mul.create(scope, logits, labels)), + Log1p.create(scope, Exp.create(scope, negAbsLogits))); + } + /** + * Determine if 2 shapes are compatible + * + *

2 shapes are compatible if they have the same number of dimensions, and if the corresponding + * dimensions are equal, or at least one of the corresponding dimensions is unknown. + * + * @param shape the first shape + * @param other the second shape + * @return true, if the shapes are compatible. + */ + private static boolean isCompatible(Shape shape, Shape other) { + if (shape.numDimensions() != other.numDimensions()) return false; + for (int i = 0; i < shape.numDimensions(); i++) { + long aShapeDim = shape.size(i); + long bShapeDim = other.size(i); + if (aShapeDim == bShapeDim + || (aShapeDim == Shape.UNKNOWN_SIZE || bShapeDim == Shape.UNKNOWN_SIZE)) { + continue; + } + return false; + } + return true; } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java index 124b520aac8..f3caa0c4926 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java @@ -113,9 +113,9 @@ public static Operand softmaxCrossEntrop Operand outputShape = Slice.create( scope, - Constant.vectorOf(scope, inputShape.asArray()), - Constant.vectorOf(scope, new long[] {0}), - Constant.vectorOf(scope, new long[] {inputShape.numDimensions() - 1})); + Constant.tensorOf(scope, inputShape), + Constant.arrayOf(scope, 0L), + Constant.arrayOf(scope, inputShape.numDimensions() - 1L)); cost = Reshape.create(scope, cost, outputShape); if (scope.env().isGraph() && !shape.hasUnknownDimension()) { long[] array = shape.asArray(); @@ -129,8 +129,7 @@ public static Operand softmaxCrossEntrop for (int i = axis + 1; i < shape.numDimensions(); i++) { newArray[i - 1] = shape.size(i); } - Shape newShape = Shape.of(newArray); - cost = Reshape.create(scope, cost, Constant.vectorOf(scope, newShape.asArray())); + cost = Reshape.create(scope, cost, Constant.vectorOf(scope, newArray)); } if (convertToFloat32) { @@ -150,7 +149,7 @@ public static Operand softmaxCrossEntrop private static Operand flattenOuterDims(Scope scope, Operand logits) { Operand one = Constant.scalarOf(scope, 1L); - org.tensorflow.ndarray.Shape shape = logits.asOutput().shape(); + Shape shape = logits.asOutput().shape(); int ndims = shape.numDimensions(); if (!shape.hasUnknownDimension()) { long product = 1L; @@ -164,8 +163,7 @@ private static Operand flattenOuterDims(Scope scope, Oper product *= d; } if (productValid) { - return Reshape.create( - scope, logits, Constant.vectorOf(scope, new long[] {product, shape.size(-1)})); + return Reshape.create(scope, logits, Constant.arrayOf(scope, product, shape.size(-1))); } } diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java index 8d125235719..ebd6f74e7d8 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SparseSoftmaxCrossEntropyWithLogits.java @@ -65,6 +65,8 @@ public class SparseSoftmaxCrossEntropyWithLogits { * probabilities. * @return A Tensor of the same shape as labels and of the same type as * logits with the softmax cross entropy loss. + * @throws IllegalArgumentException If logits are scalars (need to have rank >= 1) or if the rank + * of the labels is not equal to the rank of the logits minus one. */ @Endpoint(name = "sparseSoftmaxCrossEntropyWithLogits") public static Operand sparseSoftmaxCrossEntropyWithLogits( @@ -140,12 +142,10 @@ public static Operand sparseSoftmaxCrossE + "dimension ")))); } - // Reshape logits to 2 dim, labels to 1 dim. - long numClassses = logitsShape.size(logitsShape.numDimensions() - 1); + // Reshape logits to 2 dims, labels to 1 dim. + long numClassses = logitsShape.size(-1); - preciseLogits = - Reshape.create( - scope, preciseLogits, Constant.vectorOf(scope, new long[] {-1, numClassses})); + preciseLogits = Reshape.create(scope, preciseLogits, Constant.arrayOf(scope, -1L, numClassses)); labels = Reshape.create(scope, labels, Constant.scalarOf(scope, -1)); scope.withControlDependencies(shapeChecks); org.tensorflow.op.nn.raw.SparseSoftmaxCrossEntropyWithLogits smax = From 4c3cc78a999505240be35040b8865d86b955e1af Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 18:52:11 -0400 Subject: [PATCH 24/55] Fixed op_generator.cc to remove a spurious new line in the generated Java files for some Ops. This also resulted in new generated source that are also committed. --- .../src/bazel/op_generator/op_generator.cc | 10 +++++++--- .../src/gen/java/org/tensorflow/op/core/Abort.java | 1 - .../gen/java/org/tensorflow/op/core/AssertThat.java | 1 - .../org/tensorflow/op/core/AssignAddVariableOp.java | 1 - .../org/tensorflow/op/core/AssignSubVariableOp.java | 1 - .../java/org/tensorflow/op/core/AssignVariableOp.java | 1 - .../gen/java/org/tensorflow/op/core/BarrierClose.java | 1 - .../java/org/tensorflow/op/core/BarrierInsertMany.java | 1 - .../java/org/tensorflow/op/core/ConsumeMutexLock.java | 1 - .../java/org/tensorflow/op/core/ControlTrigger.java | 1 - .../org/tensorflow/op/core/DeleteSessionTensor.java | 1 - .../java/org/tensorflow/op/core/DestroyResourceOp.java | 1 - .../gen/java/org/tensorflow/op/core/DeviceIndex.java | 3 +++ .../java/org/tensorflow/op/core/InitializeTable.java | 1 - .../op/core/InitializeTableFromTextFile.java | 1 - .../java/org/tensorflow/op/core/LookupTableImport.java | 1 - .../java/org/tensorflow/op/core/LookupTableInsert.java | 1 - .../java/org/tensorflow/op/core/LookupTableRemove.java | 1 - .../src/gen/java/org/tensorflow/op/core/MapClear.java | 1 - .../src/gen/java/org/tensorflow/op/core/MapStage.java | 1 - .../src/gen/java/org/tensorflow/op/core/NoOp.java | 1 - .../java/org/tensorflow/op/core/OrderedMapClear.java | 1 - .../java/org/tensorflow/op/core/OrderedMapStage.java | 1 - .../src/gen/java/org/tensorflow/op/core/Print.java | 1 - .../org/tensorflow/op/core/ResourceScatterAdd.java | 1 - .../org/tensorflow/op/core/ResourceScatterDiv.java | 1 - .../org/tensorflow/op/core/ResourceScatterMax.java | 1 - .../org/tensorflow/op/core/ResourceScatterMin.java | 1 - .../org/tensorflow/op/core/ResourceScatterMul.java | 1 - .../org/tensorflow/op/core/ResourceScatterNdAdd.java | 1 - .../org/tensorflow/op/core/ResourceScatterNdMax.java | 2 ++ .../org/tensorflow/op/core/ResourceScatterNdMin.java | 2 ++ .../org/tensorflow/op/core/ResourceScatterNdSub.java | 1 - .../tensorflow/op/core/ResourceScatterNdUpdate.java | 1 - .../org/tensorflow/op/core/ResourceScatterSub.java | 1 - .../org/tensorflow/op/core/ResourceScatterUpdate.java | 1 - .../tensorflow/op/core/ResourceStridedSliceAssign.java | 1 - .../gen/java/org/tensorflow/op/core/ScatterNdMax.java | 3 +++ .../gen/java/org/tensorflow/op/core/ScatterNdMin.java | 3 +++ .../src/gen/java/org/tensorflow/op/core/Send.java | 1 - .../src/gen/java/org/tensorflow/op/core/Stage.java | 1 - .../gen/java/org/tensorflow/op/core/StageClear.java | 1 - .../java/org/tensorflow/op/core/TensorArrayClose.java | 1 - .../op/core/TensorForestCreateTreeVariable.java | 1 - .../op/core/TensorForestTreeDeserialize.java | 1 - .../org/tensorflow/op/core/TensorScatterNdMax.java | 3 +++ .../org/tensorflow/op/core/TensorScatterNdMin.java | 3 +++ .../tensorflow/op/core/XlaSpmdFullToShardShape.java | 3 +++ .../tensorflow/op/core/XlaSpmdShardToFullShape.java | 3 +++ .../java/org/tensorflow/op/data/DatasetToTfRecord.java | 1 - .../java/org/tensorflow/op/data/DeleteIterator.java | 1 - .../java/org/tensorflow/op/data/DeleteMemoryCache.java | 1 - .../tensorflow/op/data/DeleteMultiDeviceIterator.java | 1 - .../org/tensorflow/op/data/DeserializeIterator.java | 1 - .../tensorflow/op/data/InitializeTableFromDataset.java | 2 ++ .../gen/java/org/tensorflow/op/data/MakeIterator.java | 1 - .../java/org/tensorflow/op/data/RegisterDataset.java | 3 +++ .../tensorflow/op/data/ShuffleAndRepeatDataset.java | 2 +- .../java/org/tensorflow/op/data/ShuffleDataset.java | 2 +- .../op/data/experimental/CompressElement.java | 3 +++ .../op/data/experimental/DataServiceDataset.java | 3 +++ .../op/data/experimental/DatasetToTFRecord.java | 1 - .../op/data/experimental/DummyIterationCounter.java | 3 +++ .../experimental/StatsAggregatorSetSummaryWriter.java | 1 - .../op/data/experimental/UncompressElement.java | 3 +++ .../op/estimator/BoostedTreesCreateEnsemble.java | 1 - .../BoostedTreesCreateQuantileStreamResource.java | 1 - .../op/estimator/BoostedTreesDeserializeEnsemble.java | 1 - ...BoostedTreesQuantileStreamResourceAddSummaries.java | 1 - .../BoostedTreesQuantileStreamResourceDeserialize.java | 1 - .../BoostedTreesQuantileStreamResourceFlush.java | 1 - .../op/estimator/BoostedTreesUpdateEnsemble.java | 1 - .../op/estimator/BoostedTreesUpdateEnsembleV2.java | 1 - .../java/org/tensorflow/op/image/ExtractGlimpse.java | 2 +- .../src/gen/java/org/tensorflow/op/io/QueueClose.java | 1 - .../gen/java/org/tensorflow/op/io/QueueEnqueue.java | 1 - .../java/org/tensorflow/op/io/QueueEnqueueMany.java | 1 - .../src/gen/java/org/tensorflow/op/io/ReaderReset.java | 1 - .../java/org/tensorflow/op/io/ReaderRestoreState.java | 1 - .../src/gen/java/org/tensorflow/op/io/WriteFile.java | 1 - .../tensorflow/op/linalg/BandedTriangularSolve.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/BesselI0.java | 3 +++ .../src/gen/java/org/tensorflow/op/math/BesselI1.java | 3 +++ .../gen/java/org/tensorflow/op/math/DenseBincount.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselJ0.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselJ1.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselK0.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselK0e.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselK1.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselK1e.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselY0.java | 3 +++ .../java/org/tensorflow/op/math/special/BesselY1.java | 3 +++ .../java/org/tensorflow/op/ragged/RaggedBincount.java | 3 +++ .../tensorflow/op/ragged/RaggedCountSparseOutput.java | 3 +++ .../gen/java/org/tensorflow/op/ragged/RaggedCross.java | 3 +++ .../tensorflow/op/random/AnonymousSeedGenerator.java | 3 +++ .../op/random/DeleteRandomSeedGenerator.java | 1 - .../org/tensorflow/op/random/DeleteSeedGenerator.java | 2 ++ .../src/gen/java/org/tensorflow/op/random/RngSkip.java | 1 - .../random/StatelessParameterizedTruncatedNormal.java | 3 +++ .../op/random/experimental/DummySeedGenerator.java | 3 +++ .../tensorflow/op/sparse/DenseCountSparseOutput.java | 3 +++ .../op/sparse/SparseAccumulatorApplyGradient.java | 1 - .../java/org/tensorflow/op/sparse/SparseBincount.java | 3 +++ .../tensorflow/op/sparse/SparseCountSparseOutput.java | 3 +++ .../gen/java/org/tensorflow/op/sparse/SparseCross.java | 2 +- .../org/tensorflow/op/sparse/SparseCrossHashed.java | 3 +++ .../org/tensorflow/op/summary/CloseSummaryWriter.java | 1 - .../tensorflow/op/summary/CreateSummaryDbWriter.java | 1 - .../tensorflow/op/summary/CreateSummaryFileWriter.java | 1 - .../org/tensorflow/op/summary/FlushSummaryWriter.java | 1 - .../java/org/tensorflow/op/summary/ImportEvent.java | 1 - .../org/tensorflow/op/summary/WriteAudioSummary.java | 1 - .../org/tensorflow/op/summary/WriteGraphSummary.java | 1 - .../tensorflow/op/summary/WriteHistogramSummary.java | 1 - .../org/tensorflow/op/summary/WriteImageSummary.java | 1 - .../tensorflow/op/summary/WriteRawProtoSummary.java | 1 - .../org/tensorflow/op/summary/WriteScalarSummary.java | 1 - .../java/org/tensorflow/op/summary/WriteSummary.java | 1 - .../org/tensorflow/op/tpu/ConfigureTPUEmbedding.java | 1 - .../op/tpu/EnqueueTPUEmbeddingIntegerBatch.java | 1 - .../op/tpu/EnqueueTPUEmbeddingRaggedTensorBatch.java | 2 ++ .../op/tpu/EnqueueTPUEmbeddingSparseBatch.java | 1 - .../op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java | 1 - .../gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java | 1 - .../op/tpu/InfeedEnqueuePrelinearizedBuffer.java | 1 - .../java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java | 1 - .../op/tpu/LoadTPUEmbeddingADAMParameters.java | 1 - .../LoadTPUEmbeddingADAMParametersGradAccumDebug.java | 1 - .../op/tpu/LoadTPUEmbeddingAdadeltaParameters.java | 1 - ...adTPUEmbeddingAdadeltaParametersGradAccumDebug.java | 1 - .../op/tpu/LoadTPUEmbeddingAdagradParameters.java | 1 - ...oadTPUEmbeddingAdagradParametersGradAccumDebug.java | 1 - .../tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java | 1 - .../op/tpu/LoadTPUEmbeddingFTRLParameters.java | 1 - .../LoadTPUEmbeddingFTRLParametersGradAccumDebug.java | 1 - .../tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java | 1 - .../op/tpu/LoadTPUEmbeddingMomentumParameters.java | 1 - ...adTPUEmbeddingMomentumParametersGradAccumDebug.java | 1 - .../tpu/LoadTPUEmbeddingProximalAdagradParameters.java | 1 - ...beddingProximalAdagradParametersGradAccumDebug.java | 1 - .../op/tpu/LoadTPUEmbeddingProximalYogiParameters.java | 2 ++ ...UEmbeddingProximalYogiParametersGradAccumDebug.java | 2 ++ .../op/tpu/LoadTPUEmbeddingRMSPropParameters.java | 1 - ...oadTPUEmbeddingRMSPropParametersGradAccumDebug.java | 1 - ...PUEmbeddingStochasticGradientDescentParameters.java | 1 - ...chasticGradientDescentParametersGradAccumDebug.java | 2 ++ .../gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java | 1 - .../org/tensorflow/op/tpu/OutfeedEnqueueTuple.java | 1 - .../RetrieveTPUEmbeddingProximalYogiParameters.java | 3 +++ ...UEmbeddingProximalYogiParametersGradAccumDebug.java | 3 +++ ...chasticGradientDescentParametersGradAccumDebug.java | 3 +++ .../tensorflow/op/tpu/SendTPUEmbeddingGradients.java | 1 - .../org/tensorflow/op/tpu/ShutdownDistributedTPU.java | 1 - .../org/tensorflow/op/tpu/TPUReplicateMetadata.java | 1 - .../tensorflow/op/train/AccumulatorApplyGradient.java | 1 - .../tensorflow/op/train/AccumulatorSetGlobalStep.java | 1 - .../org/tensorflow/op/train/MergeV2Checkpoints.java | 1 - .../src/gen/java/org/tensorflow/op/train/NegTrain.java | 1 - .../op/train/ResourceAccumulatorApplyGradient.java | 1 - .../op/train/ResourceAccumulatorSetGlobalStep.java | 1 - .../org/tensorflow/op/train/ResourceApplyAdaMax.java | 1 - .../org/tensorflow/op/train/ResourceApplyAdadelta.java | 1 - .../org/tensorflow/op/train/ResourceApplyAdagrad.java | 1 - .../tensorflow/op/train/ResourceApplyAdagradDa.java | 1 - .../org/tensorflow/op/train/ResourceApplyAdam.java | 1 - .../op/train/ResourceApplyAdamWithAmsgrad.java | 1 - .../org/tensorflow/op/train/ResourceApplyAddSign.java | 1 - .../op/train/ResourceApplyCenteredRmsProp.java | 1 - .../org/tensorflow/op/train/ResourceApplyFtrl.java | 8 +++----- .../op/train/ResourceApplyGradientDescent.java | 1 - .../op/train/ResourceApplyKerasMomentum.java | 1 - .../org/tensorflow/op/train/ResourceApplyMomentum.java | 1 - .../tensorflow/op/train/ResourceApplyPowerSign.java | 1 - .../op/train/ResourceApplyProximalAdagrad.java | 1 - .../op/train/ResourceApplyProximalGradientDescent.java | 1 - .../org/tensorflow/op/train/ResourceApplyRmsProp.java | 1 - .../op/train/ResourceSparseApplyAdadelta.java | 1 - .../op/train/ResourceSparseApplyAdagrad.java | 1 - .../op/train/ResourceSparseApplyAdagradDa.java | 1 - .../op/train/ResourceSparseApplyAdagradV2.java | 1 - .../op/train/ResourceSparseApplyCenteredRmsProp.java | 1 - .../tensorflow/op/train/ResourceSparseApplyFtrl.java | 7 ++----- .../op/train/ResourceSparseApplyKerasMomentum.java | 1 - .../op/train/ResourceSparseApplyMomentum.java | 1 - .../op/train/ResourceSparseApplyProximalAdagrad.java | 1 - .../ResourceSparseApplyProximalGradientDescent.java | 1 - .../op/train/ResourceSparseApplyRmsProp.java | 1 - .../src/gen/java/org/tensorflow/op/train/Save.java | 1 - .../gen/java/org/tensorflow/op/train/SaveSlices.java | 1 - .../gen/java/org/tensorflow/op/train/SdcaShrinkL1.java | 1 - .../src/gen/java/org/tensorflow/op/xla/Send.java | 1 - 192 files changed, 143 insertions(+), 157 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc index 03db4be125b..843f3bdb247 100644 --- a/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc +++ b/tensorflow-core/tensorflow-core-api/src/bazel/op_generator/op_generator.cc @@ -514,11 +514,15 @@ void GenerateOp(const OpSpec& op, const EndpointSpec& endpoint, Javadoc name_javadoc = Javadoc::Create("The name of this op, as known by TensorFlow core engine"); string quoted_string = "\"" + op.graph_op_name() + "\""; writer.WriteFieldWithInitializer(nameVariable, PUBLIC|STATIC|FINAL, &name_javadoc, quoted_string ); - writer.EndLine(); - for (const ArgumentSpec& output : op.outputs()) { - writer.WriteField(output.var(), PRIVATE); + + if(!op.outputs().empty()) { + writer.EndLine(); + for (const ArgumentSpec& output : op.outputs()) { + writer.WriteField(output.var(), PRIVATE); + } } + RenderConstructor(op, op_class, &writer); writer.EndType(); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java index 53e9401dfa2..a84f2405b19 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Abort.java @@ -104,7 +104,6 @@ public static Options exitWithoutError(Boolean exitWithoutError) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "Abort"; - private Abort(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java index 950830b7462..dce70c04e5a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssertThat.java @@ -90,7 +90,6 @@ public static Options summarize(Long summarize) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "Assert"; - private AssertThat(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java index 5adaccf15e0..53edc808882 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignAddVariableOp.java @@ -55,7 +55,6 @@ public static AssignAddVariableOp create(Scope scope, Operand< /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "AssignAddVariableOp"; - private AssignAddVariableOp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java index 4bb683c97d2..372a71b2168 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignSubVariableOp.java @@ -55,7 +55,6 @@ public static AssignSubVariableOp create(Scope scope, Operand< /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "AssignSubVariableOp"; - private AssignSubVariableOp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java index 90cabd12a24..ac08d62f9a8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/AssignVariableOp.java @@ -55,7 +55,6 @@ public static AssignVariableOp create(Scope scope, Operand /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "AssignVariableOp"; - private AssignVariableOp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java index a777d684ec1..514f4f50edf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierClose.java @@ -95,7 +95,6 @@ public static Options cancelPendingEnqueues(Boolean cancelPendingEnqueues) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BarrierClose"; - private BarrierClose(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java index 31488738838..b652c11a35c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/BarrierInsertMany.java @@ -63,7 +63,6 @@ public static BarrierInsertMany create(Scope scope, Operand mutexLock) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ConsumeMutexLock"; - private ConsumeMutexLock(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java index 721112b8204..e40715c9f2c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ControlTrigger.java @@ -48,7 +48,6 @@ public static ControlTrigger create(Scope scope) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ControlTrigger"; - private ControlTrigger(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java index 50c7615a0ff..5f92cc26ca2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeleteSessionTensor.java @@ -50,7 +50,6 @@ public static DeleteSessionTensor create(Scope scope, Operand handle) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DeleteSessionTensor"; - private DeleteSessionTensor(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java index e1958682ee1..8a427166874 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DestroyResourceOp.java @@ -88,7 +88,6 @@ public static Options ignoreLookupError(Boolean ignoreLookupError) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DestroyResourceOp"; - private DestroyResourceOp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeviceIndex.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeviceIndex.java index 26f984e840d..f033d3fcc9d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeviceIndex.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/DeviceIndex.java @@ -68,6 +68,9 @@ public Output asOutput() { return index; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeviceIndex"; + private Output index; private DeviceIndex(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java index 5de2ca6ff07..48662ed420d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTable.java @@ -54,7 +54,6 @@ public static InitializeTable create(Scope sc /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "InitializeTableV2"; - private InitializeTable(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java index 0a88cea3ef2..2050c4d8628 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/InitializeTableFromTextFile.java @@ -121,7 +121,6 @@ public static Options delimiter(String delimiter) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "InitializeTableFromTextFileV2"; - private InitializeTableFromTextFile(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java index a94393a50f1..9884a40e3cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableImport.java @@ -57,7 +57,6 @@ public static LookupTableImport create(Scope /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LookupTableImportV2"; - private LookupTableImport(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java index c31784ea942..0f09ae25d1b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableInsert.java @@ -57,7 +57,6 @@ public static LookupTableInsert create(Scope /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LookupTableInsertV2"; - private LookupTableInsert(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java index 584e7e1325c..41463ad7539 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/LookupTableRemove.java @@ -54,7 +54,6 @@ public static LookupTableRemove create(Scope scope, Operand /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LookupTableRemoveV2"; - private LookupTableRemove(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java index ea7581ef2c7..bad1e90554f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapClear.java @@ -145,7 +145,6 @@ public static Options sharedName(String sharedName) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "MapClear"; - private MapClear(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java index 5d72ce8f22f..9291b32d53b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/MapStage.java @@ -160,7 +160,6 @@ public static Options sharedName(String sharedName) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "MapStage"; - private MapStage(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java index 862aabcd795..922b5d55ce3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/NoOp.java @@ -46,7 +46,6 @@ public static NoOp create(Scope scope) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "NoOp"; - private NoOp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java index 29f4133ce09..05a1b7ab984 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapClear.java @@ -145,7 +145,6 @@ public static Options sharedName(String sharedName) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "OrderedMapClear"; - private OrderedMapClear(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java index b51f94c148a..7e02973e3c6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/OrderedMapStage.java @@ -162,7 +162,6 @@ public static Options sharedName(String sharedName) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "OrderedMapStage"; - private OrderedMapStage(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java index 3e96c00d369..52b933329a0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Print.java @@ -105,7 +105,6 @@ public static Options end(String end) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "PrintV2"; - private Print(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java index 5383062823b..0966dd5fcc4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterAdd.java @@ -75,7 +75,6 @@ public static ResourceScatterAdd create(Sco /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterAdd"; - private ResourceScatterAdd(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java index ed950863242..9560bddf284 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterDiv.java @@ -75,7 +75,6 @@ public static ResourceScatterDiv create(Sco /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterDiv"; - private ResourceScatterDiv(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java index 7553fab4812..ce952ee19ba 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMax.java @@ -75,7 +75,6 @@ public static ResourceScatterMax create(Sco /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterMax"; - private ResourceScatterMax(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java index 68518b4c640..51ec6b7637e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMin.java @@ -75,7 +75,6 @@ public static ResourceScatterMin create(Sco /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterMin"; - private ResourceScatterMin(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java index f52b338de57..2d5f71e006d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterMul.java @@ -75,7 +75,6 @@ public static ResourceScatterMul create(Sco /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterMul"; - private ResourceScatterMul(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java index 5abfcbea5ee..11e45c33098 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdAdd.java @@ -125,7 +125,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterNdAdd"; - private ResourceScatterNdAdd(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMax.java index e24e3d68fef..82c1f766308 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMax.java @@ -91,6 +91,8 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterNdMax"; private ResourceScatterNdMax(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMin.java index 3ffc78afa87..88e107c65c7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdMin.java @@ -91,6 +91,8 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceScatterNdMin"; private ResourceScatterNdMin(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java index c4b6060d611..267099b7cfc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdSub.java @@ -125,7 +125,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterNdSub"; - private ResourceScatterNdSub(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java index b47fb4a1367..4a1e875bc97 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterNdUpdate.java @@ -127,7 +127,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterNdUpdate"; - private ResourceScatterNdUpdate(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java index 2559ff21a93..7b772fab997 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterSub.java @@ -75,7 +75,6 @@ public static ResourceScatterSub create(Sco /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterSub"; - private ResourceScatterSub(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java index eff04c6c08a..067ddf5f205 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceScatterUpdate.java @@ -66,7 +66,6 @@ public static ResourceScatterUpdate create( /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceScatterUpdate"; - private ResourceScatterUpdate(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java index 2002140573b..4deb4c55f64 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ResourceStridedSliceAssign.java @@ -176,7 +176,6 @@ public static Options shrinkAxisMask(Long shrinkAxisMask) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceStridedSliceAssign"; - private ResourceStridedSliceAssign(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMax.java index 851cbb16cf4..da94c783cae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMax.java @@ -107,6 +107,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNdMax"; + private Output outputRef; private ScatterNdMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMin.java index a3e3d4c9790..5aea70bc929 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/ScatterNdMin.java @@ -107,6 +107,9 @@ public Output asOutput() { return outputRef; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ScatterNdMin"; + private Output outputRef; private ScatterNdMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java index bf3db1cd88a..d679b85319a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Send.java @@ -97,7 +97,6 @@ public static Options clientTerminated(Boolean clientTerminated) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "Send"; - private Send(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java index 408b6eca252..526462b02f4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/Stage.java @@ -151,7 +151,6 @@ public static Options sharedName(String sharedName) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "Stage"; - private Stage(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java index 755e7ab72d9..60e51559f74 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/StageClear.java @@ -145,7 +145,6 @@ public static Options sharedName(String sharedName) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "StageClear"; - private StageClear(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java index a16e856ae72..62180e8e5ff 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorArrayClose.java @@ -52,7 +52,6 @@ public static TensorArrayClose create(Scope scope, Operand handle) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "TensorArrayCloseV3"; - private TensorArrayClose(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java index e647f58b2f3..5ca6ffa1cd0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestCreateTreeVariable.java @@ -51,7 +51,6 @@ public static TensorForestCreateTreeVariable create(Scope scope, Operand tree /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "TensorForestCreateTreeVariable"; - private TensorForestCreateTreeVariable(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java index 5fb704b2361..a5e1638035e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorForestTreeDeserialize.java @@ -51,7 +51,6 @@ public static TensorForestTreeDeserialize create(Scope scope, Operand treeHan /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "TensorForestTreeDeserialize"; - private TensorForestTreeDeserialize(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMax.java index d040cf0639a..a14b20195af 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMax.java @@ -65,6 +65,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorScatterMax"; + private Output output; private TensorScatterNdMax(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMin.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMin.java index 797878d9c76..b202b72eebd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMin.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/TensorScatterNdMin.java @@ -65,6 +65,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "TensorScatterMin"; + private Output output; private TensorScatterNdMin(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdFullToShardShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdFullToShardShape.java index 51f2c2b5dde..6615d2ef9f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdFullToShardShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdFullToShardShape.java @@ -68,6 +68,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSpmdFullToShardShape"; + private Output output; private XlaSpmdFullToShardShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdShardToFullShape.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdShardToFullShape.java index 5a120fb6fb8..75e31c7c317 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdShardToFullShape.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/core/XlaSpmdShardToFullShape.java @@ -70,6 +70,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "XlaSpmdShardToFullShape"; + private Output output; private XlaSpmdShardToFullShape(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java index 41617c9b690..114e11074dc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DatasetToTfRecord.java @@ -54,7 +54,6 @@ public static DatasetToTfRecord create(Scope scope, Operand inputDataset, Ope /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DatasetToTFRecord"; - private DatasetToTfRecord(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java index ec3629a8eb7..69f3af096bb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteIterator.java @@ -51,7 +51,6 @@ public static DeleteIterator create(Scope scope, Operand handle, Operand d /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DeleteIterator"; - private DeleteIterator(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java index 3c0f37dc409..21c33030b66 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeleteMemoryCache.java @@ -49,7 +49,6 @@ public static DeleteMemoryCache create(Scope scope, Operand handle, Operand multiDevi /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DeleteMultiDeviceIterator"; - private DeleteMultiDeviceIterator(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java index 528fd09bc53..4f772fd5028 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/DeserializeIterator.java @@ -52,7 +52,6 @@ public static DeserializeIterator create(Scope scope, Operand resourceHandle, /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DeserializeIterator"; - private DeserializeIterator(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/InitializeTableFromDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/InitializeTableFromDataset.java index 527c951377b..05a263a4ec1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/InitializeTableFromDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/InitializeTableFromDataset.java @@ -46,6 +46,8 @@ public static InitializeTableFromDataset create(Scope scope, Operand tableHan return new InitializeTableFromDataset(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "InitializeTableFromDataset"; private InitializeTableFromDataset(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java index 685574a92d5..4aace25184e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/MakeIterator.java @@ -54,7 +54,6 @@ public static MakeIterator create(Scope scope, Operand dataset, Operand it /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "MakeIterator"; - private MakeIterator(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RegisterDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RegisterDataset.java index 7e0695768c2..5705413165c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RegisterDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/RegisterDataset.java @@ -65,6 +65,9 @@ public Output asOutput() { return datasetId; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RegisterDataset"; + private Output datasetId; private RegisterDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java index 1f6d2697497..c5703e8e85c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleAndRepeatDataset.java @@ -119,7 +119,7 @@ public Output asOutput() { } /** The name of this op, as known by TensorFlow core engine */ - public static final String OP_NAME = "ShuffleAndRepeatDataset"; + public static final String OP_NAME = "ShuffleAndRepeatDatasetV2"; private Output handle; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java index ce3de6f787f..3dd522e319c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/ShuffleDataset.java @@ -117,7 +117,7 @@ public Output asOutput() { } /** The name of this op, as known by TensorFlow core engine */ - public static final String OP_NAME = "ShuffleDatasetV2"; + public static final String OP_NAME = "ShuffleDatasetV3"; private Output handle; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CompressElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CompressElement.java index e56a8cde614..9e4bfb34a8b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CompressElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/CompressElement.java @@ -60,6 +60,9 @@ public Output asOutput() { return (Output) compressed; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "CompressElement"; + private Output compressed; private CompressElement(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DataServiceDataset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DataServiceDataset.java index 4623ec2ea5d..b3e853f9de4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DataServiceDataset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DataServiceDataset.java @@ -122,6 +122,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DataServiceDataset"; + private Output handle; private DataServiceDataset(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java index ee0f494fa73..6e0a0b8f2dc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DatasetToTFRecord.java @@ -54,7 +54,6 @@ public static DatasetToTFRecord create(Scope scope, Operand inputDataset, Ope /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ExperimentalDatasetToTFRecord"; - private DatasetToTFRecord(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DummyIterationCounter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DummyIterationCounter.java index b2febce6f81..72f83847285 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DummyIterationCounter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/DummyIterationCounter.java @@ -56,6 +56,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DummyIterationCounter"; + private Output handle; private DummyIterationCounter(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java index ad63ff056d8..1af246d8313 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/StatsAggregatorSetSummaryWriter.java @@ -50,7 +50,6 @@ public static StatsAggregatorSetSummaryWriter create(Scope scope, Operand sta /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "StatsAggregatorSetSummaryWriter"; - private StatsAggregatorSetSummaryWriter(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UncompressElement.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UncompressElement.java index 5d94d8699ab..c5732154e94 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UncompressElement.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/data/experimental/UncompressElement.java @@ -76,6 +76,9 @@ public Iterator> iterator() { return (Iterator) components.iterator(); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "UncompressElement"; + private List> components; private UncompressElement(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java index 04613900567..8841988b36d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateEnsemble.java @@ -54,7 +54,6 @@ public static BoostedTreesCreateEnsemble create(Scope scope, Operand treeEnse /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesCreateEnsemble"; - private BoostedTreesCreateEnsemble(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java index 59362970a58..802a61ecb2a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesCreateQuantileStreamResource.java @@ -88,7 +88,6 @@ public static Options maxElements(Long maxElements) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesCreateQuantileStreamResource"; - private BoostedTreesCreateQuantileStreamResource(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java index 6fd83d5785d..15371fb4df9 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesDeserializeEnsemble.java @@ -56,7 +56,6 @@ public static BoostedTreesDeserializeEnsemble create(Scope scope, Operand tre /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesDeserializeEnsemble"; - private BoostedTreesDeserializeEnsemble(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java index 76480c4be6d..418ff3b2ff6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceAddSummaries.java @@ -56,7 +56,6 @@ public static BoostedTreesQuantileStreamResourceAddSummaries create(Scope scope, /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesQuantileStreamResourceAddSummaries"; - private BoostedTreesQuantileStreamResourceAddSummaries(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java index 82066e267d2..6efb58ed60c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceDeserialize.java @@ -54,7 +54,6 @@ public static BoostedTreesQuantileStreamResourceDeserialize create(Scope scope, /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesQuantileStreamResourceDeserialize"; - private BoostedTreesQuantileStreamResourceDeserialize(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java index 359b7b63ff6..cc10434a582 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesQuantileStreamResourceFlush.java @@ -97,7 +97,6 @@ public static Options generateQuantiles(Boolean generateQuantiles) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesQuantileStreamResourceFlush"; - private BoostedTreesQuantileStreamResourceFlush(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java index c1b7bb44559..e6ddcf3d2da 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsemble.java @@ -79,7 +79,6 @@ public static BoostedTreesUpdateEnsemble create(Scope scope, Operand treeEnse /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesUpdateEnsemble"; - private BoostedTreesUpdateEnsemble(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java index afd9d646c2f..ceaff116fd1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/estimator/BoostedTreesUpdateEnsembleV2.java @@ -118,7 +118,6 @@ public static Options logitsDimension(Long logitsDimension) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "BoostedTreesUpdateEnsembleV2"; - private BoostedTreesUpdateEnsembleV2(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java index 172b24f74ac..05bc1d924b3 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/image/ExtractGlimpse.java @@ -199,7 +199,7 @@ public Output asOutput() { } /** The name of this op, as known by TensorFlow core engine */ - public static final String OP_NAME = "ExtractGlimpse"; + public static final String OP_NAME = "ExtractGlimpseV2"; private Output glimpse; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java index fb55f708140..ea7791f143e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueClose.java @@ -91,7 +91,6 @@ public static Options cancelPendingEnqueues(Boolean cancelPendingEnqueues) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "QueueCloseV2"; - private QueueClose(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java index 546981e8abf..a159b0cd17c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueue.java @@ -96,7 +96,6 @@ public static Options timeoutMs(Long timeoutMs) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "QueueEnqueueV2"; - private QueueEnqueue(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java index 48df5d3b9d3..b1f9cbd6807 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/QueueEnqueueMany.java @@ -101,7 +101,6 @@ public static Options timeoutMs(Long timeoutMs) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "QueueEnqueueManyV2"; - private QueueEnqueueMany(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java index 6e3de01134b..243d4a72080 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderReset.java @@ -49,7 +49,6 @@ public static ReaderReset create(Scope scope, Operand readerHandle) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ReaderResetV2"; - private ReaderReset(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java index b0abea1257c..431ba079ffc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/ReaderRestoreState.java @@ -56,7 +56,6 @@ public static ReaderRestoreState create(Scope scope, Operand readerHandle, Op /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ReaderRestoreStateV2"; - private ReaderRestoreState(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java index d9fba243fc3..d1c9dd9b9c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/io/WriteFile.java @@ -54,7 +54,6 @@ public static WriteFile create(Scope scope, Operand filename, Operand asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BandedTriangularSolve"; + private Output output; private BandedTriangularSolve(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0.java index 53e1ac83c32..45dcd2b8e4c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI0.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselI0"; + private Output y; private BesselI0(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1.java index 638f6b06972..148758aa5a4 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/BesselI1.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselI1"; + private Output y; private BesselI1(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DenseBincount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DenseBincount.java index 165be081102..e38d559f4ae 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DenseBincount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/DenseBincount.java @@ -112,6 +112,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DenseBincount"; + private Output output; private DenseBincount(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ0.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ0.java index bc73a0c9c02..8d2184a49cb 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ0.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ0.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselJ0"; + private Output y; private BesselJ0(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ1.java index 4fd21c42288..d8f9621a36c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselJ1.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselJ1"; + private Output y; private BesselJ1(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0.java index 8f3c540b185..eaae243f83f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselK0"; + private Output y; private BesselK0(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0e.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0e.java index 1a8f9761c08..c57ae64e233 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0e.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK0e.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselK0e"; + private Output y; private BesselK0e(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1.java index bcaaf6f6f9c..1858d25fe3d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselK1"; + private Output y; private BesselK1(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1e.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1e.java index c6590805d54..e4a5cc23efd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1e.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselK1e.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselK1e"; + private Output y; private BesselK1e(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY0.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY0.java index 86843a30939..9228d1b6145 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY0.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY0.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselY0"; + private Output y; private BesselY0(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY1.java index 2cdc4ad7df0..0461416b808 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/math/special/BesselY1.java @@ -59,6 +59,9 @@ public Output asOutput() { return y; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "BesselY1"; + private Output y; private BesselY1(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedBincount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedBincount.java index fc1636d8d64..1e0224aa9ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedBincount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedBincount.java @@ -115,6 +115,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedBincount"; + private Output output; private RaggedBincount(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCountSparseOutput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCountSparseOutput.java index 07b364f6ebb..4829e49488b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCountSparseOutput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCountSparseOutput.java @@ -140,6 +140,9 @@ public Output outputDenseShape() { return outputDenseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedCountSparseOutput"; + private Output outputIndices; private Output outputValues; private Output outputDenseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCross.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCross.java index fa6e811969b..9ea32878257 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCross.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/ragged/RaggedCross.java @@ -94,6 +94,9 @@ public Output outputRowSplits() { return outputRowSplits; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RaggedCross"; + private Output outputValues; private Output outputRowSplits; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousSeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousSeedGenerator.java index f55c3222977..c724bb6d110 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousSeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/AnonymousSeedGenerator.java @@ -63,6 +63,9 @@ public Output deleter() { return deleter; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "AnonymousSeedGenerator"; + private Output handle; private Output deleter; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java index 9bc34d98ebb..23b154f9d75 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteRandomSeedGenerator.java @@ -49,7 +49,6 @@ public static DeleteRandomSeedGenerator create(Scope scope, Operand handle, O /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "DeleteRandomSeedGenerator"; - private DeleteRandomSeedGenerator(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteSeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteSeedGenerator.java index 2872ea12aff..16982946d1f 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteSeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/DeleteSeedGenerator.java @@ -46,6 +46,8 @@ public static DeleteSeedGenerator create(Scope scope, Operand handle, Operand return new DeleteSeedGenerator(opBuilder.build()); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DeleteSeedGenerator"; private DeleteSeedGenerator(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java index e3411c3b989..f41cff35b04 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/RngSkip.java @@ -58,7 +58,6 @@ public static RngSkip create(Scope scope, Operand resource, Operand a /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "RngSkip"; - private RngSkip(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessParameterizedTruncatedNormal.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessParameterizedTruncatedNormal.java index 053db14c986..179160463c7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessParameterizedTruncatedNormal.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/StatelessParameterizedTruncatedNormal.java @@ -72,6 +72,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "StatelessParameterizedTruncatedNormal"; + private Output output; private StatelessParameterizedTruncatedNormal(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/experimental/DummySeedGenerator.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/experimental/DummySeedGenerator.java index 92e58ba293f..dd537fa2d68 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/experimental/DummySeedGenerator.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/random/experimental/DummySeedGenerator.java @@ -56,6 +56,9 @@ public Output asOutput() { return (Output) handle; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DummySeedGenerator"; + private Output handle; private DummySeedGenerator(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseCountSparseOutput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseCountSparseOutput.java index 62c489cab7b..ed390a7ba47 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseCountSparseOutput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/DenseCountSparseOutput.java @@ -132,6 +132,9 @@ public Output outputDenseShape() { return outputDenseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "DenseCountSparseOutput"; + private Output outputIndices; private Output outputValues; private Output outputDenseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java index 3f36812ea57..328fe0c49ea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseAccumulatorApplyGradient.java @@ -69,7 +69,6 @@ public static SparseAccumulatorApplyGradient create(Scope scop /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "SparseAccumulatorApplyGradient"; - private SparseAccumulatorApplyGradient(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseBincount.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseBincount.java index 7902e8544dd..344e27f1346 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseBincount.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseBincount.java @@ -117,6 +117,9 @@ public Output asOutput() { return output; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseBincount"; + private Output output; private SparseBincount(Operation operation) { diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCountSparseOutput.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCountSparseOutput.java index 36230bc774e..5e5566db5ec 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCountSparseOutput.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCountSparseOutput.java @@ -136,6 +136,9 @@ public Output outputDenseShape() { return outputDenseShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseCountSparseOutput"; + private Output outputIndices; private Output outputValues; private Output outputDenseShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java index 06113f0315b..1cd471349c2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCross.java @@ -118,7 +118,7 @@ public Output outputShape() { } /** The name of this op, as known by TensorFlow core engine */ - public static final String OP_NAME = "SparseCross"; + public static final String OP_NAME = "SparseCrossV2"; private Output outputIndices; private Output outputValues; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCrossHashed.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCrossHashed.java index 9e7cc9b1e6c..2fc6976079e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCrossHashed.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/sparse/SparseCrossHashed.java @@ -122,6 +122,9 @@ public Output outputShape() { return outputShape; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "SparseCrossHashed"; + private Output outputIndices; private Output outputValues; private Output outputShape; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java index ff9735f0b07..f5d95d50976 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CloseSummaryWriter.java @@ -47,7 +47,6 @@ public static CloseSummaryWriter create(Scope scope, Operand writer) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "CloseSummaryWriter"; - private CloseSummaryWriter(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java index 61e7405f74d..8e40aa798d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryDbWriter.java @@ -56,7 +56,6 @@ public static CreateSummaryDbWriter create(Scope scope, Operand writer, Opera /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "CreateSummaryDbWriter"; - private CreateSummaryDbWriter(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java index d113ebcf3f6..e429fab20e2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/CreateSummaryFileWriter.java @@ -57,7 +57,6 @@ public static CreateSummaryFileWriter create(Scope scope, Operand writer, Ope /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "CreateSummaryFileWriter"; - private CreateSummaryFileWriter(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java index 6b1e610c632..e1586542972 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/FlushSummaryWriter.java @@ -47,7 +47,6 @@ public static FlushSummaryWriter create(Scope scope, Operand writer) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "FlushSummaryWriter"; - private FlushSummaryWriter(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java index 9b6dc173abe..7bd97de571e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/ImportEvent.java @@ -50,7 +50,6 @@ public static ImportEvent create(Scope scope, Operand writer, Operand writer, Operand WriteHistogramSummary create(Scope scope, Oper /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "WriteHistogramSummary"; - private WriteHistogramSummary(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java index 286d584d695..757ddf59a1c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteImageSummary.java @@ -94,7 +94,6 @@ public static Options maxImages(Long maxImages) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "WriteImageSummary"; - private WriteImageSummary(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java index 524b56bed7a..75499c1ff69 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteRawProtoSummary.java @@ -53,7 +53,6 @@ public static WriteRawProtoSummary create(Scope scope, Operand writer, Operan /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "WriteRawProtoSummary"; - private WriteRawProtoSummary(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java index 2317db7bdeb..f173651001a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteScalarSummary.java @@ -57,7 +57,6 @@ public static WriteScalarSummary create(Scope scope, Operand /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "WriteScalarSummary"; - private WriteScalarSummary(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java index 6d257f948e8..5404e593f27 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/summary/WriteSummary.java @@ -58,7 +58,6 @@ public static WriteSummary create(Scope scope, Operand writ /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "WriteSummary"; - private WriteSummary(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java index 1905a3082b3..76bccd51f83 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/ConfigureTPUEmbedding.java @@ -48,7 +48,6 @@ public static ConfigureTPUEmbedding create(Scope scope, String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ConfigureTPUEmbedding"; - private ConfigureTPUEmbedding(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java index 4198c38e11c..0a1a80c7a0a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingIntegerBatch.java @@ -93,7 +93,6 @@ public static Options deviceOrdinal(Long deviceOrdinal) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "EnqueueTPUEmbeddingIntegerBatch"; - private EnqueueTPUEmbeddingIntegerBatch(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingRaggedTensorBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingRaggedTensorBatch.java index c605dafbc87..bf4da86d05d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingRaggedTensorBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingRaggedTensorBatch.java @@ -177,6 +177,8 @@ public static Options maxSequenceLengths(List maxSequenceLengths) { return new Options().maxSequenceLengths(maxSequenceLengths); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "EnqueueTPUEmbeddingRaggedTensorBatch"; private EnqueueTPUEmbeddingRaggedTensorBatch(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java index 23288018938..2cb7dfb674b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseBatch.java @@ -146,7 +146,6 @@ public static Options combiners(List combiners) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "EnqueueTPUEmbeddingSparseBatch"; - private EnqueueTPUEmbeddingSparseBatch(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java index 59018e1b3e5..3d93c6a0f71 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/EnqueueTPUEmbeddingSparseTensorBatch.java @@ -178,7 +178,6 @@ public static Options maxSequenceLengths(List maxSequenceLengths) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "EnqueueTPUEmbeddingSparseTensorBatch"; - private EnqueueTPUEmbeddingSparseTensorBatch(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java index 9c79df444e3..391d51a9ab0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueue.java @@ -135,7 +135,6 @@ public static Options deviceOrdinal(Long deviceOrdinal) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "InfeedEnqueue"; - private InfeedEnqueue(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java index b1d32f70ec9..9344352791c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueuePrelinearizedBuffer.java @@ -84,7 +84,6 @@ public static Options deviceOrdinal(Long deviceOrdinal) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "InfeedEnqueuePrelinearizedBuffer"; - private InfeedEnqueuePrelinearizedBuffer(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java index d2a95d84244..b439df84f71 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/InfeedEnqueueTuple.java @@ -124,7 +124,6 @@ public static Options deviceOrdinal(Long deviceOrdinal) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "InfeedEnqueueTuple"; - private InfeedEnqueueTuple(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java index 9e60fae350e..744688cee23 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParameters.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingADAMParameters"; - private LoadTPUEmbeddingADAMParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java index 58cfa5cf465..63df2e6aa79 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingADAMParametersGradAccumDebug.java @@ -137,7 +137,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingADAMParametersGradAccumDebug"; - private LoadTPUEmbeddingADAMParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java index e4f4228f0f1..43535a2aff8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParameters.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingAdadeltaParameters"; - private LoadTPUEmbeddingAdadeltaParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java index 76af15dc0b6..ce1b759ee60 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdadeltaParametersGradAccumDebug.java @@ -137,7 +137,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingAdadeltaParametersGradAccumDebug"; - private LoadTPUEmbeddingAdadeltaParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java index dc4f5c62341..f9e16c5b5d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParameters.java @@ -133,7 +133,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingAdagradParameters"; - private LoadTPUEmbeddingAdagradParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java index 6551f875f2d..7f8df653745 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingAdagradParametersGradAccumDebug.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingAdagradParametersGradAccumDebug"; - private LoadTPUEmbeddingAdagradParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java index d4a0103654c..f0b704cfaa1 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingCenteredRMSPropParameters.java @@ -137,7 +137,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingCenteredRMSPropParameters"; - private LoadTPUEmbeddingCenteredRMSPropParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java index a65301f6348..c96edf58894 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParameters.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingFTRLParameters"; - private LoadTPUEmbeddingFTRLParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java index 5a1c165428d..f0a85bd945a 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingFTRLParametersGradAccumDebug.java @@ -137,7 +137,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingFTRLParametersGradAccumDebug"; - private LoadTPUEmbeddingFTRLParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java index 407cf842f19..f418a70cc8c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMDLAdagradLightParameters.java @@ -137,7 +137,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingMDLAdagradLightParameters"; - private LoadTPUEmbeddingMDLAdagradLightParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java index 35b8479749b..718bdc24f5c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParameters.java @@ -133,7 +133,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingMomentumParameters"; - private LoadTPUEmbeddingMomentumParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java index babc2de15fd..424c3c846c0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingMomentumParametersGradAccumDebug.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingMomentumParametersGradAccumDebug"; - private LoadTPUEmbeddingMomentumParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java index 0ebad625abe..7b7265e9b82 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParameters.java @@ -133,7 +133,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingProximalAdagradParameters"; - private LoadTPUEmbeddingProximalAdagradParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java index 80b05d47203..c18d2cf22f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug"; - private LoadTPUEmbeddingProximalAdagradParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParameters.java index 651c8e189c4..2a96916c4f5 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParameters.java @@ -125,6 +125,8 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingProximalYogiParameters"; private LoadTPUEmbeddingProximalYogiParameters(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParametersGradAccumDebug.java index 274accba1c9..e863dc554d6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingProximalYogiParametersGradAccumDebug.java @@ -127,6 +127,8 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingProximalYogiParametersGradAccumDebug"; private LoadTPUEmbeddingProximalYogiParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java index d0e39d22edb..1f747282d55 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParameters.java @@ -135,7 +135,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingRMSPropParameters"; - private LoadTPUEmbeddingRMSPropParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java index 98f1043a768..a7c8ed4812c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingRMSPropParametersGradAccumDebug.java @@ -137,7 +137,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingRMSPropParametersGradAccumDebug"; - private LoadTPUEmbeddingRMSPropParametersGradAccumDebug(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java index ca881823239..769d3436eda 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParameters.java @@ -131,7 +131,6 @@ public static Options config(String config) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "LoadTPUEmbeddingStochasticGradientDescentParameters"; - private LoadTPUEmbeddingStochasticGradientDescentParameters(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java index 76a13a489ad..e408844e484 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java @@ -130,6 +130,8 @@ public static Options config(String config) { return new Options().config(config); } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug"; private LoadTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java index 46ee54430d9..5b5f059a81e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueue.java @@ -49,7 +49,6 @@ public static OutfeedEnqueue create(Scope scope, Operand in /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "OutfeedEnqueue"; - private OutfeedEnqueue(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java index 25d110f1114..8bfd04b9a2c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/OutfeedEnqueueTuple.java @@ -50,7 +50,6 @@ public static OutfeedEnqueueTuple create(Scope scope, Iterable> input /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "OutfeedEnqueueTuple"; - private OutfeedEnqueueTuple(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParameters.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParameters.java index eaee4fdabc4..a46cae90359 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParameters.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParameters.java @@ -137,6 +137,9 @@ public Output m() { return m; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingProximalYogiParameters"; + private Output parameters; private Output v; private Output m; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParametersGradAccumDebug.java index ec57d8cb424..55535a573f6 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingProximalYogiParametersGradAccumDebug.java @@ -143,6 +143,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingProximalYogiParametersGradAccumDebug"; + private Output parameters; private Output v; private Output m; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java index f649b4d01fa..9f35ffcd8e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/RetrieveTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug.java @@ -139,6 +139,9 @@ public Output gradientAccumulators() { return gradientAccumulators; } + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "RetrieveTPUEmbeddingStochasticGradientDescentParametersGradAccumDebug"; + private Output parameters; private Output gradientAccumulators; diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java index 25d25c1d5bf..482080bde5d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/tpu/SendTPUEmbeddingGradients.java @@ -64,7 +64,6 @@ public static SendTPUEmbeddingGradients create(Scope scope, Iterable AccumulatorApplyGradient create(Scope scope, Ope /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "AccumulatorApplyGradient"; - private AccumulatorApplyGradient(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java index b57bb702669..9039d3a654d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/AccumulatorSetGlobalStep.java @@ -56,7 +56,6 @@ public static AccumulatorSetGlobalStep create(Scope scope, Operand hand /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "AccumulatorSetGlobalStep"; - private AccumulatorSetGlobalStep(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java index 4fe4a27171a..986553a2d8e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/MergeV2Checkpoints.java @@ -96,7 +96,6 @@ public static Options deleteOldDirs(Boolean deleteOldDirs) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "MergeV2Checkpoints"; - private MergeV2Checkpoints(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java index f43928961a9..b3e5316ad7e 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/NegTrain.java @@ -68,7 +68,6 @@ public static NegTrain create(Scope scope, Operand wIn, Operand ResourceAccumulatorApplyGradient create(Scope sc /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceAccumulatorApplyGradient"; - private ResourceAccumulatorApplyGradient(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java index e04784aef48..37570909340 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceAccumulatorSetGlobalStep.java @@ -54,7 +54,6 @@ public static ResourceAccumulatorSetGlobalStep create(Scope scope, Operand ha /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceAccumulatorSetGlobalStep"; - private ResourceAccumulatorSetGlobalStep(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java index 5efab216739..169da75fecd 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdaMax.java @@ -107,7 +107,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAdaMax"; - private ResourceApplyAdaMax(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java index 0121155a2ef..4323a39de45 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdadelta.java @@ -103,7 +103,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAdadelta"; - private ResourceApplyAdadelta(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java index 8868193464f..b60ad1fc0e0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagrad.java @@ -117,7 +117,6 @@ public static Options updateSlots(Boolean updateSlots) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAdagradV2"; - private ResourceApplyAdagrad(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java index 7f5b26056ac..7c6f06634ef 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdagradDa.java @@ -101,7 +101,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAdagradDA"; - private ResourceApplyAdagradDa(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java index 20a07b4865d..4a1aea5d355 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdam.java @@ -130,7 +130,6 @@ public static Options useNesterov(Boolean useNesterov) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAdam"; - private ResourceApplyAdam(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java index ec13f10038d..a436bc7fdd2 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAdamWithAmsgrad.java @@ -114,7 +114,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAdamWithAmsgrad"; - private ResourceApplyAdamWithAmsgrad(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java index e64354ec3bb..85c9c587979 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyAddSign.java @@ -104,7 +104,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyAddSign"; - private ResourceApplyAddSign(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java index c4c8d7c9ec7..6fc3a8a02ff 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyCenteredRmsProp.java @@ -123,7 +123,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyCenteredRMSProp"; - private ResourceApplyCenteredRmsProp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java index c9de01ad14d..e69b6b99959 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyFtrl.java @@ -120,18 +120,16 @@ public static ResourceApplyFtrl create(Scope scope, Operand public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } - - /** The name of this op, as known by TensorFlow core engine */ - public static final String OP_NAME = "ResourceApplyFtrlV2"; - + /** * @param multiplyLinearByLr */ public static Options multiplyLinearByLr(Boolean multiplyLinearByLr) { return new Options().multiplyLinearByLr(multiplyLinearByLr); } - + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceApplyFtrlV2"; private ResourceApplyFtrl(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java index 0e495bdd651..f33c6b9ca87 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyGradientDescent.java @@ -90,7 +90,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyGradientDescent"; - private ResourceApplyGradientDescent(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java index 3a986d617eb..3922439dcad 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyKerasMomentum.java @@ -124,7 +124,6 @@ public static Options useNesterov(Boolean useNesterov) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyKerasMomentum"; - private ResourceApplyKerasMomentum(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java index c441193d864..c554c8a939d 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyMomentum.java @@ -124,7 +124,6 @@ public static Options useNesterov(Boolean useNesterov) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyMomentum"; - private ResourceApplyMomentum(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java index c1ba8b0ebd7..662c2253264 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyPowerSign.java @@ -104,7 +104,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyPowerSign"; - private ResourceApplyPowerSign(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java index b51ce4698e1..8036d891e33 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalAdagrad.java @@ -100,7 +100,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyProximalAdagrad"; - private ResourceApplyProximalAdagrad(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java index 7f9c4f4e52c..3b217c88c67 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyProximalGradientDescent.java @@ -97,7 +97,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyProximalGradientDescent"; - private ResourceApplyProximalGradientDescent(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java index 4c400f1aaa1..ae42295c1f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceApplyRmsProp.java @@ -113,7 +113,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceApplyRMSProp"; - private ResourceApplyRmsProp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java index 9a50137d196..baea98fc1f7 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdadelta.java @@ -101,7 +101,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyAdadelta"; - private ResourceSparseApplyAdadelta(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java index 69a3e775622..f7816e78d0c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagrad.java @@ -120,7 +120,6 @@ public static Options updateSlots(Boolean updateSlots) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyAdagrad"; - private ResourceSparseApplyAdagrad(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java index 4f3189f074c..417eca86a80 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradDa.java @@ -104,7 +104,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyAdagradDA"; - private ResourceSparseApplyAdagradDa(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java index 30e6c19da15..f60d192c368 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyAdagradV2.java @@ -121,7 +121,6 @@ public static Options updateSlots(Boolean updateSlots) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyAdagradV2"; - private ResourceSparseApplyAdagradV2(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java index ab9b9d3c38d..d6806c36abf 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyCenteredRmsProp.java @@ -124,7 +124,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyCenteredRMSProp"; - private ResourceSparseApplyCenteredRmsProp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java index 84caa503dec..a13382272c8 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyFtrl.java @@ -125,18 +125,15 @@ public static Options useLocking(Boolean useLocking) { return new Options().useLocking(useLocking); } - - /** The name of this op, as known by TensorFlow core engine */ - public static final String OP_NAME = "ResourceSparseApplyFtrlV2"; - /** * @param multiplyLinearByLr */ public static Options multiplyLinearByLr(Boolean multiplyLinearByLr) { return new Options().multiplyLinearByLr(multiplyLinearByLr); } - + /** The name of this op, as known by TensorFlow core engine */ + public static final String OP_NAME = "ResourceSparseApplyFtrlV2"; private ResourceSparseApplyFtrl(Operation operation) { super(operation); diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java index 0284564f78c..b385403f989 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyKerasMomentum.java @@ -129,7 +129,6 @@ public static Options useNesterov(Boolean useNesterov) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyKerasMomentum"; - private ResourceSparseApplyKerasMomentum(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java index 5199932b5bc..bc303bfbbf0 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyMomentum.java @@ -129,7 +129,6 @@ public static Options useNesterov(Boolean useNesterov) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyMomentum"; - private ResourceSparseApplyMomentum(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java index e235a19f5d1..678601d6aea 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalAdagrad.java @@ -105,7 +105,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyProximalAdagrad"; - private ResourceSparseApplyProximalAdagrad(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java index 08a9edc01c4..11ad213524c 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyProximalGradientDescent.java @@ -101,7 +101,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyProximalGradientDescent"; - private ResourceSparseApplyProximalGradientDescent(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java index 982e1f30eb7..8c519504f89 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/ResourceSparseApplyRmsProp.java @@ -116,7 +116,6 @@ public static Options useLocking(Boolean useLocking) { /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "ResourceSparseApplyRMSProp"; - private ResourceSparseApplyRmsProp(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java index 781714d8121..c5de40fc91b 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/Save.java @@ -63,7 +63,6 @@ public static Save create(Scope scope, Operand prefix, Operand /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "SaveV2"; - private Save(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java index e8e67190e63..73325d1d1bc 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SaveSlices.java @@ -89,7 +89,6 @@ public static SaveSlices create(Scope scope, Operand filename, Operand< /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "SaveSlices"; - private SaveSlices(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java index 24c6d53ef9d..748a2eacaec 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/train/SdcaShrinkL1.java @@ -56,7 +56,6 @@ public static SdcaShrinkL1 create(Scope scope, Iterable> weigh /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "SdcaShrinkL1"; - private SdcaShrinkL1(Operation operation) { super(operation); } diff --git a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java index d1172f8e96f..b18a86458ca 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/java/org/tensorflow/op/xla/Send.java @@ -55,7 +55,6 @@ public static Send create(Scope scope, Operand tensor, Stri /** The name of this op, as known by TensorFlow core engine */ public static final String OP_NAME = "XlaSend"; - private Send(Operation operation) { super(operation); } From 44f530f292fdba34164de696fb454b30108064d3 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 18:53:44 -0400 Subject: [PATCH 25/55] Changed back to non-generic Operand until we resolve how to handle generics. --- .../org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java index f3caa0c4926..8447b985bb0 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java @@ -79,7 +79,7 @@ public static Operand softmaxCrossEntrop axis += logits.asOutput().shape().numDimensions(); } - Operand preciseLogits = + Operand preciseLogits = (Operand) logits; // cannot use generics cause logits of bool gets cast to TFloat32 @@ -90,7 +90,7 @@ public static Operand softmaxCrossEntrop preciseLogits = Cast.create(scope, logits, TFloat32.DTYPE); } /* cannot use generics on DataType because preciseLogits may have been cast. */ - DataType dtype = preciseLogits.asOutput().dataType(); + DataType dtype = preciseLogits.asOutput().dataType(); Operand castLabels = Cast.create(scope, labels, dtype); Operand inputRank = Cast.create(scope, Rank.create(scope, preciseLogits), TInt64.DTYPE); Shape shape = logits.asOutput().shape(); From b8d3ac2d001251c95bd55ed9cd902431108468bd Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Thu, 3 Sep 2020 18:55:55 -0400 Subject: [PATCH 26/55] Regenerated due to creation of SoftmaxCrossEntropyWithLogits.java, SigmoidCrossEntropyWithLogits.java, and SparseSoftmaxCrossEntropyWithLogits.java under package org.tensorflow.op.nn in --- .../annotations/org/tensorflow/op/NnOps.java | 136 ++++++++++++------ 1 file changed, 89 insertions(+), 47 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java index 8374a864ec2..e15cccdd339 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java @@ -20,7 +20,6 @@ import java.util.List; import org.tensorflow.DataType; import org.tensorflow.Operand; -import org.tensorflow.op.core.NN; import org.tensorflow.op.nn.AvgPool; import org.tensorflow.op.nn.AvgPool3d; import org.tensorflow.op.nn.AvgPool3dGrad; @@ -84,10 +83,13 @@ import org.tensorflow.op.nn.Relu; import org.tensorflow.op.nn.Relu6; import org.tensorflow.op.nn.Selu; +import org.tensorflow.op.nn.SigmoidCrossEntropyWithLogits; import org.tensorflow.op.nn.Softmax; +import org.tensorflow.op.nn.SoftmaxCrossEntropyWithLogits; import org.tensorflow.op.nn.Softsign; import org.tensorflow.op.nn.SpaceToBatch; import org.tensorflow.op.nn.SpaceToDepth; +import org.tensorflow.op.nn.SparseSoftmaxCrossEntropyWithLogits; import org.tensorflow.op.nn.TopK; import org.tensorflow.types.TFloat32; import org.tensorflow.types.TInt32; @@ -1756,49 +1758,53 @@ public Selu selu(Operand features) { } /** - * Computes sigmoid cross entropy given `logits`. + * Computes sigmoid cross entropy given logits. * *

Measures the probability error in discrete classification tasks in which each class is * independent and not mutually exclusive. For instance, one could perform multilabel * classification where a picture can contain both an elephant and a dog at the same time. * - *

For brevity, let `x = logits`, `z = labels`. The logistic loss is + *

For brevity, let x = logits, z = labels. The logistic loss in + * pseudo-code is * *

-   *      z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
-   *      = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
-   *      = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
-   *      = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
-   *      = (1 - z) * x + log(1 + exp(-x))
-   *      = x - x * z + log(1 + exp(-x))
+   *  z * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
+   *   = z * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
+   *   = z * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
+   *   = z * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
+   *   = (1 - z) * x + log(1 + exp(-x))
+   *   = x - x * z + log(1 + exp(-x))
    *  
* - *

For x < 0, to avoid overflow in exp(-x), we reformulate the above + *

For x < 0, to avoid overflow in exp(-x), we reformulate the above * *

-   *       x - x * z + log(1 + exp(-x))
-   *       = log(exp(x)) - x * z + log(1 + exp(-x))
-   *       = - x * z + log(1 + exp(x))
+   *  x - x * z + log(1 + exp(-x))
+   *   = log(exp(x)) - x * z + log(1 + exp(-x))
+   *   = - x * z + log(1 + exp(x))
    *  
* *

Hence, to ensure stability and avoid overflow, the implementation uses this equivalent * formulation * *

-   *      max(x, 0) - x * z + log(1 + exp(-abs(x)))
+   *    max(x, 0) - x * z + log(1 + exp(-abs(x)))
    *  
* - *

`logits` and `labels` must have the same type and shape. + *

logits and labels must have the same type and shape. + * + *

* * @param scope The TensorFlow scope * @param labels the labels * @param logits the logits of type float32 or float64 * @param the type of labels and logits * @return the component-wise logistic losses. + * @throws IllegalArgumentException if logits' and labels' do not have the same shape */ public Operand sigmoidCrossEntropyWithLogits(Operand labels, Operand logits) { - return NN.sigmoidCrossEntropyWithLogits(scope, labels, logits); + return SigmoidCrossEntropyWithLogits.sigmoidCrossEntropyWithLogits(scope, labels, logits); } /** @@ -1817,48 +1823,55 @@ public Softmax softmax(Operand logits) { } /** - * Computes softmax cross entropy between `logits` and `labels`. + * Computes softmax cross entropy between logits and labels. * *

Measures the probability error in discrete classification tasks in which the classes are * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is * labeled with one and only one label: an image can be a dog or a truck, but not both. * - *

**NOTE:** While the classes are mutually exclusive, their probabilities need not be. All - * that is required is that each row of `labels` is a valid probability distribution. If they are - * not, the computation of the gradient will be incorrect. + *

NOTE: + * + *

While the classes are mutually exclusive, their probabilities need not be. All that is + * required is that each row of labels is a valid probability distribution. If they + * are not, the computation of the gradient will be incorrect. * - *

If using exclusive `labels` (wherein one and only one class is true at a time), see - * `sparse_softmax_cross_entropy_with_logits`. + *

If using exclusive labels (wherein one and only one class is true at a time), + * see {@link org.tensorflow.op.NnOps#sparseSoftmaxCrossEntropyWithLogits} * *

Usage: * *

-   *    >>> logits = [[4.0, 2.0, 1.0], [0.0, 5.0, 1.0]]
-   *    >>> labels = [[1.0, 0.0, 0.0], [0.0, 0.8, 0.2]]
-   *    >>> tf.nn.softmax_cross_entropy_with_logits(labels=labels, logits=logits)
-   *    
+   *    Operand<TFloat32> logits =
+   *        tf.constant(new float[][] {{4.0F, 2.0F, 1.0F}, {0.0F, 5.0F, 1.0F}} );
+   *    Operand<TFloat32> labels =
+   *        tf.constant(new float[][] {{1.0F, 0.0F, 0.0F}, {0.0F, 0.8F, 0.2F}} );
+   *    Operand<TFloat32> output =
+   *        tf.nn.softmaxCrossEntropyWithLogits(labels, logits, -1);
+   *    // output Shape = [2]
+   *    // dataType = FLOAT (1)
+   *    // values { 0.169846, 0.824745 }
    *  
* - *

Backpropagation will happen into both `logits` and `labels`. To disallow backpropagation - * into `labels`, pass label tensors through `tf.stop_gradient` before feeding it to this - * function. + *

Backpropagation will happen into both logits and labels. To + * disallow backpropagation into labels, pass label tensors through + * tf.stopGradient before feeding it to this function. * * @param scope current scope * @param labels Each vector along the class dimension should hold a valid probability - * distribution e.g. for the case in which labels are of shape `[batch_size, num_classes]`, - * each row of `labels[i]` must be a valid probability distribution. + * distribution e.g. for the case in which labels are of shape [batch_size, num_classes] + * , each row of labels[i] must be a valid probability distribution. * @param logits Per-label activations, typically a linear output. These activation energies are * interpreted as unnormalized log probabilities. * @param axis The class dimension. -1 is the last dimension. - * @param the data type of the logits + * @param the data type of the logits * @param the number type of the operands - * @return the softmax cross entropy loss. Its type is the same as `logits` and its shape is the - * same as `labels` except that it does not have the last dimension of `labels`. + * @return the softmax cross entropy loss. Its type is the same as logits and its + * shape is the same as labels except that it does not have the last dimension of + * labels. */ public Operand softmaxCrossEntropyWithLogits( Operand labels, Operand logits, int axis) { - return NN.softmaxCrossEntropyWithLogits(scope, labels, logits, axis); + return SoftmaxCrossEntropyWithLogits.softmaxCrossEntropyWithLogits(scope, labels, logits, axis); } /** @@ -2050,22 +2063,51 @@ public SpaceToDepth spaceToDepth(Operand input, Long blo } /** - * Computes sparse softmax cross entropy between `logits` and `labels`. + * Computes sparse softmax cross entropy between logits and labels. + * + *

Measures the probability error in discrete classification tasks in which the classes are + * mutually exclusive (each entry is in exactly one class). For example, each CIFAR-10 image is + * labeled with one and only one label: an image can be a dog or a truck, but not both. + * + *

NOTE: + * + *

For this operation, the probability of a given label is considered exclusive. That is, soft + * classes are not allowed, and the labels vector must provide a single specific + * index for the true class for each row of logits (each minibatch entry). For soft + * softmax classification with a probability distribution for each entry, {@link + * org.tensorflow.op.NnOps#softmaxCrossEntropyWithLogits}. + * + *

WARNING: + * + *

This op expects unscaled logits, since it performs a softmax on logits + * internally for efficiency. Do not call this op with the output of softmax, + * as it will produce incorrect results. + * + *

A common use case is to have logits of shape [batchSize, numClasses] and have + * labels of shape [batchSize], but higher dimensions are supported, in which case + * the dim-th dimension is assumed to be of size numClasses. + * logits must have the dataType of TFloat16, TFloat32 + * , or TFloat64, and labels must have the dtype of TInt32 + * or TInt64. * * @param scope current scope - * @param labels `Tensor` of shape `[d_0, d_1, ..., d_{r-1}]` (where `r` is rank of `labels` and - * result) and dtype `int32` or `int64`. Each entry in `labels` must be an index in `[0, - * num_classes)`. Other values will raise an exception when this op is run on CPU, and return - * `NaN` for corresponding loss and gradient rows on GPU. - * @param logits Per-label activations (typically a linear output) of shape `[d_0, d_1, ..., - * d_{r-1}, num_classes]` and dtype `float16`, `float32`, or `float64`. These activation - * energies are interpreted as unnormalized log probabilities. - * @return A `Tensor` of the same shape as `labels` and of the same type as `logits` with the - * softmax cross entropy loss. + * @param labels Tensor of shape [d_0, d_1, ..., d_{r-1}] (where r + * is rank of labels and result) and the dataType is TInt32 + * or TInt64. Each entry in labels must be an index in [0, + * numClasses). Other values will raise an exception when this op is run on CPU, and + * return NaN for corresponding loss and gradient rows on GPU. + * @param logits Per-label activations (typically a linear output) of shape [d_0, d_1, ..., + * d_{r-1}, numClasses] and dataType of TFloat16, TFloat32, + * or TFloat64. These activation energies are interpreted as unnormalized log + * probabilities. + * @return A Tensor of the same shape as labels and of the same type as + * logits with the softmax cross entropy loss. + * @throws IllegalArgumentException If logits are scalars (need to have rank >= 1) or if the rank + * of the labels is not equal to the rank of the logits minus one. */ public Operand sparseSoftmaxCrossEntropyWithLogits( Operand labels, Operand logits) { - return NN.sparseSoftmaxCrossEntropyWithLogits(scope, labels, logits); + return SparseSoftmaxCrossEntropyWithLogits.sparseSoftmaxCrossEntropyWithLogits(scope, labels, logits); } /** From c32fc5be951166ffde8d8763dcc99dd7e5879e86 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Mon, 7 Sep 2020 14:15:30 -0400 Subject: [PATCH 27/55] change snake case to camel case. format code --- .../keras/optimizers/AdaDeltaTest.java | 330 +++++------ .../keras/optimizers/AdaGradDATest.java | 64 +-- .../keras/optimizers/AdaGradTest.java | 97 ++-- .../tensorflow/keras/optimizers/AdamTest.java | 143 ++--- .../keras/optimizers/AdamaxTest.java | 115 ++-- .../tensorflow/keras/optimizers/FtrlTest.java | 196 +++---- .../keras/optimizers/NadamTest.java | 140 ++--- .../keras/optimizers/RMSPropTest.java | 514 +++++++++--------- .../tensorflow/keras/optimizers/SGDTest.java | 114 ++-- 9 files changed, 721 insertions(+), 992 deletions(-) diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java index 8a7c8af9fae..52de6b6b0e1 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java @@ -14,26 +14,8 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import static org.tensorflow.framework.optimizers.AdaDelta.ACCUMULATOR; -import static org.tensorflow.framework.optimizers.AdaDelta.ACCUMULATOR_UPDATE; +import org.junit.jupiter.api.*; import org.tensorflow.framework.optimizers.Optimizer.GradAndVar; -import static org.tensorflow.keras.optimizers.AdaDelta.EPSILON_DEFAULT; -import static org.tensorflow.keras.optimizers.AdaDelta.EPSILON_KEY; -import static org.tensorflow.keras.optimizers.AdaDelta.LEARNING_RATE_DEFAULT; -import static org.tensorflow.keras.optimizers.AdaDelta.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.AdaDelta.RHO_DEFAULT; -import static org.tensorflow.keras.optimizers.AdaDelta.RHO_RATE_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; @@ -42,185 +24,167 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.tensorflow.framework.optimizers.AdaDelta.ACCUMULATOR; +import static org.tensorflow.framework.optimizers.AdaDelta.ACCUMULATOR_UPDATE; /** Test cases for AdaDelta Optimizer */ public class AdaDeltaTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; - private int index; + public AdaDeltaTest() {} - public AdaDeltaTest() { - } + @BeforeAll + public static void setUpClass() {} - @BeforeAll - public static void setUpClass() { - } + @AfterAll + public static void tearDownClass() {} - @AfterAll - public static void tearDownClass() { - } + @BeforeEach + public void setUp() {} - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } + @AfterEach + public void tearDown() {} - /** - * Test of create method, of class AdaDelta. - */ - @Test - public void testCreate() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "AdaDelta"); - config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - config.put(RHO_RATE_KEY, RHO_DEFAULT); - config.put(EPSILON_KEY, EPSILON_DEFAULT); - AdaDelta expResult = new AdaDelta(tf); - AdaDelta result = AdaDelta.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } + @Test + public void testConstructAdadeltaWithLR() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + AdaDelta opt = new AdaDelta(tf, 1.0F, 0.9F, 1.F); + AdaDelta opt2 = new AdaDelta(tf, 0.1F, 0.9F, 1.F); + AdaDelta opt3 = new AdaDelta(tf, 0.1F, 0.9F, 1e-8F); + String format = "AdaDelta{learningRate=%s, rho=%s, epsilon=%s}"; + String optExpected = String.format(format, 1.0F, 0.9F, 1.F); + String opt2Expected = String.format(format, 0.1F, 0.9F, 1.F); + String opt3Expected = String.format(format, 0.1F, 0.9F, 1e-8F); - @Test - public void testConstructAdadeltaWithLR() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - AdaDelta opt = new AdaDelta(tf, 1.0F, 0.9F, 1.F); - AdaDelta opt2 = new AdaDelta(tf, 0.1F, 0.9F, 1.F); - AdaDelta opt3 = new AdaDelta(tf, 0.1F, 0.9F, 1e-8F); - String format = "AdaDelta{learningRate=%s, rho=%s, epsilon=%s}"; - String optExpected = String.format(format, 1.0F, 0.9F, 1.F); - String opt2Expected = String.format(format, 0.1F, 0.9F, 1.F); - String opt3Expected = String.format(format, 0.1F, 0.9F, 1e-8F); - - String optString = opt.toString(); - String opt2String = opt2.toString(); - String opt3String = opt3.toString(); - - assertEquals(optExpected, optString); - assertEquals(opt2Expected, opt2String); - assertEquals(opt3Expected, opt3String); - } + String optString = opt.toString(); + String opt2String = opt2.toString(); + String opt3String = opt3.toString(); + assertEquals(optExpected, optString); + assertEquals(opt2Expected, opt2String); + assertEquals(opt3Expected, opt3String); } - - @Test - public void testConstructAdadeltaWithEpsilonValues() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - AdaDelta opt = new AdaDelta(tf); - Map config = opt.getConfig(); - assertEquals(EPSILON_DEFAULT, (float) config.get(EPSILON_KEY)); - - opt = new AdaDelta(tf, LEARNING_RATE_DEFAULT, RHO_DEFAULT, 1e-8F); - config = opt.getConfig(); - assertEquals(1e-8F, (float) config.get(EPSILON_KEY)); - } + } + + @Test + public void testConstructOptions() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + AdaDelta.Options options = + AdaDelta.Options.builder() + .name("myAdaDelta") + .learningRate(1.0F) + .rho(0.9F) + .epsilon(1.F) + .build(); + AdaDelta opt = new AdaDelta(tf, options); + + String format = "AdaDelta{learningRate=%s, rho=%s, epsilon=%s}"; + String optExpected = String.format(format, 1.0F, 0.9F, 1.F); + + String optString = opt.toString(); + + assertEquals(optExpected, optString); } - - @Test - public void testBasic() { - int num_updates = 4; // # number of ADADELTA steps to perform - float[] grads = {0.2F, 0.1F, 0.01F}; - float[] lrs = {1.0F, 0.5F, 0.1F}; - for (float grad : grads) { - for (float lr : lrs) { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] fgrads = {grad, grad}; - Shape shape = Shape.of(var0_init.length); - Variable var0 = tf.withName("var0").variable(shape, TFloat32.DTYPE); - Variable var1 = tf.withName("var1").variable(shape, TFloat32.DTYPE); - - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); - - Constant cgrads = tf.constant(fgrads); - - float accum = 0.0F; - float accum_update = 0.0F; - float rho = 0.95F; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; - - /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); - gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var0.asOutput())); - gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var1.asOutput())); - - /* get the Optimizer */ - AdaDelta adaDelta = new AdaDelta(tf, lr, rho, epsilon); - - /** - * apply gradients - */ - Op adadelta_update = adaDelta.applyGradients(gradsAndVars, "AdaDeltaTest"); - - /* Create and validae the shapes of the slota */ - Variable[] slots = new Variable[2]; - Variable[] slotUpdates = new Variable[2]; - - slots[0] = adaDelta.getSlot(var0.asOutput(), ACCUMULATOR).get(); - assertEquals(slots[0].asOutput().shape(), var0.asOutput().shape()); - - slotUpdates[0] = adaDelta.getSlot(var0.asOutput(), ACCUMULATOR_UPDATE).get(); - assertEquals(slotUpdates[0].asOutput().shape(), var0.asOutput().shape()); - - slots[1] = adaDelta.getSlot(var1.asOutput(), ACCUMULATOR).get(); - assertEquals(slots[1].asOutput().shape(), var1.asOutput().shape()); - - slotUpdates[1] = adaDelta.getSlot(var1.asOutput(), ACCUMULATOR_UPDATE).get(); - assertEquals(slotUpdates[1].asOutput().shape(), var1.asOutput().shape()); - - /* initialize the local variables */ - session.run(var0Initializer); - session.run(var1Initializer); - - /** - * initialize the accumulators - */ - session.run(tf.init()); - - /** - * make sure the variables were initialized properly - */ - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); - - float[] updates = new float[num_updates]; - float tot_update = 0; - for (int step = 0; step < num_updates; step++) { - session.run(adadelta_update); - accum = accum * rho + (float) Math.pow(grad, 2) * (1.0F - rho); - updates[step] = ((float) Math.sqrt(accum_update + epsilon) - * (float) (1 / Math.sqrt(accum + epsilon)) * grad); - accum_update = (accum_update * rho + ((float) Math.pow(updates[step], 2) * (1.0F - rho))); - tot_update += updates[step] * lr; - - for (int i = 0; i < 2; i++) { - session.evaluate(accum, slots[i]); - session.evaluate(accum_update, slotUpdates[i]); - } - - Float[] var0_initUpdate = {var0_init[0] - tot_update, var0_init[1] - tot_update}; - Float[] var1_initUpdate = {var1_init[0] - tot_update, var1_init[1] - tot_update}; - - session.evaluate(var0_initUpdate, var0); - session.evaluate(var1_initUpdate, var1); - - } - - } + } + + @Test + public void testBasic() { + int numUpdates = 4; // # number of ADADELTA steps to perform + float[] grads = {0.2F, 0.1F, 0.01F}; + float[] lrs = {1.0F, 0.5F, 0.1F}; + for (float grad : grads) { + for (float lr : lrs) { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] fgrads = {grad, grad}; + Shape shape = Shape.of(var0Init.length); + Variable var0 = tf.withName("var0").variable(shape, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); + + Constant cgrads = tf.constant(fgrads); + + float accum = 0.0F; + float accumUpdate = 0.0F; + float rho = 0.95F; + float epsilon = 1e-8F; + + /* build the GradsAnvVars */ + List> gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var0.asOutput())); + gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var1.asOutput())); + + /* get the Optimizer */ + AdaDelta adaDelta = new AdaDelta(tf, lr, rho, epsilon); + + /*apply gradients */ + Op adadeltaUpdate = adaDelta.applyGradients(gradsAndVars, "AdaDeltaTest"); + + /* Create and validate the shapes of the slota */ + Variable[] slots = new Variable[2]; + Variable[] slotUpdates = new Variable[2]; + + slots[0] = adaDelta.getSlot(var0.asOutput(), ACCUMULATOR).get(); + assertEquals(slots[0].asOutput().shape(), var0.asOutput().shape()); + + slotUpdates[0] = adaDelta.getSlot(var0.asOutput(), ACCUMULATOR_UPDATE).get(); + assertEquals(slotUpdates[0].asOutput().shape(), var0.asOutput().shape()); + + slots[1] = adaDelta.getSlot(var1.asOutput(), ACCUMULATOR).get(); + assertEquals(slots[1].asOutput().shape(), var1.asOutput().shape()); + + slotUpdates[1] = adaDelta.getSlot(var1.asOutput(), ACCUMULATOR_UPDATE).get(); + assertEquals(slotUpdates[1].asOutput().shape(), var1.asOutput().shape()); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /* initialize the accumulators */ + session.run(tf.init()); + + /* make sure the variables were initialized properly */ + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); + + float[] updates = new float[numUpdates]; + float totUpdate = 0; + for (int step = 0; step < numUpdates; step++) { + session.run(adadeltaUpdate); + accum = accum * rho + (float) Math.pow(grad, 2) * (1.0F - rho); + updates[step] = + ((float) Math.sqrt(accumUpdate + epsilon) + * (float) (1 / Math.sqrt(accum + epsilon)) + * grad); + accumUpdate = (accumUpdate * rho + ((float) Math.pow(updates[step], 2) * (1.0F - rho))); + totUpdate += updates[step] * lr; + + for (int i = 0; i < 2; i++) { + session.evaluate(accum, slots[i]); + session.evaluate(accumUpdate, slotUpdates[i]); } + + Float[] var0InitUpdate = {var0Init[0] - totUpdate, var0Init[1] - totUpdate}; + Float[] var1InitUpdate = {var1Init[0] - totUpdate, var1Init[1] - totUpdate}; + + session.evaluate(var0InitUpdate, var0); + session.evaluate(var1InitUpdate, var1); + } } + } } - + } } diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java index 3931db4da97..57a5f5c0bd8 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java @@ -14,20 +14,8 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.AdaGradDA.INITIAL_ACCUM_KEY; -import static org.tensorflow.keras.optimizers.AdaGradDA.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; @@ -37,10 +25,13 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + /** Test cases for AdaGradDA Optimizer */ public class AdaGradDATest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; int index; @@ -58,42 +49,27 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of create method, of class AdaGradDA. */ - @Test - public void testCreate() { - try (TestSession testSession = TestSession.createTestSession(tf_mode)) { - Ops tf = testSession.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "AdaDelta"); - config.put(LEARNING_RATE_KEY, 2.0F); - config.put(INITIAL_ACCUM_KEY, 0.1F); - AdaGradDA expResult = new AdaGradDA(tf, 2.0F, 0.1F, 0.0F, 0.0F); - AdaGradDA result = AdaGradDA.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - @Test public void testBasic() { - float[] var0_init = {0.0F, 0.0F}; - float[] var1_init = {0.0F, 0.0F}; - float[] grads0_init = {0.1F, 0.2F}; - float[] grads1_init = {0.01F, 0.02F}; + float[] var0Init = {0.0F, 0.0F}; + float[] var1Init = {0.0F, 0.0F}; + float[] grads0Init = {0.1F, 0.2F}; + float[] grads1Init = {0.01F, 0.02F}; float epsilon = 1e-8F; float epsilon1 = 1e-5F; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); /* initialize the local variables */ /* initialize the local variables */ @@ -109,14 +85,14 @@ public void testBasic() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Op ada_update = instance.applyGradients(gradsAndVars, "AdGradDATest"); + Op adaUpdate = instance.applyGradients(gradsAndVars, "AdGradDATest"); /** initialize the accumulators */ session.run(tf.init()); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); - session.run(ada_update); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); + session.run(adaUpdate); float[] expected0 = {-0.904534F, -1.603567F}; session.evaluate(expected0, var0); float[] expected1 = {-0.094821f, -0.189358f}; diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java index 28c45c4c8c3..92701b37d67 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java @@ -14,21 +14,8 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import static org.tensorflow.framework.optimizers.AdaGrad.ACCUMULATOR; +import org.junit.jupiter.api.*; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.AdaGrad.INITIAL_ACCUM_KEY; -import static org.tensorflow.keras.optimizers.AdaGrad.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.ND; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; @@ -41,10 +28,15 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.tensorflow.framework.optimizers.AdaGrad.ACCUMULATOR; + /** Test cases for AdaGrad Optimizer */ public class AdaGradTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; - int index; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; public AdaGradTest() {} @@ -60,53 +52,38 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of create method, of class AdaGrad. */ - @Test - public void testCreate() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "AdaDelta"); - config.put(LEARNING_RATE_KEY, 2.0F); - config.put(INITIAL_ACCUM_KEY, 0.1F); - AdaGrad expResult = new AdaGrad(tf, 2.0F, 0.1F); - AdaGrad result = AdaGrad.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - @Test public void testBasic() { int numSteps = 3; - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.1F}; - float[] grads1_init = {0.01F, 0.01F}; + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; float epsilon = 1e-8F; float epsilon1 = 1e-5F; float[] accum0 = {0.1f, 0.1f}; float[] accum1 = {0.1f, 0.1f}; - FloatNdArray var0_np = NdArrays.vectorOf(var0_init); - FloatNdArray var1_np = NdArrays.vectorOf(var1_init); - FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); - FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); - FloatNdArray accum0_np = NdArrays.vectorOf(accum0); - FloatNdArray accum1_np = NdArrays.vectorOf(accum1); + FloatNdArray var0Np = NdArrays.vectorOf(var0Init); + FloatNdArray var1Np = NdArrays.vectorOf(var1Init); + FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); + FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); + FloatNdArray accum0Np = NdArrays.vectorOf(accum0); + FloatNdArray accum1Np = NdArrays.vectorOf(accum1); - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); float learningRate = 3.0F; @@ -117,7 +94,7 @@ public void testBasic() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Op ada_update = instance.applyGradients(gradsAndVars, "AdGradTest"); + Op adaUpdate = instance.applyGradients(gradsAndVars, "AdGradTest"); Variable[] accumulatorSlots = new Variable[2]; accumulatorSlots[0] = instance.getSlot(var0.asOutput(), ACCUMULATOR).get(); @@ -134,25 +111,25 @@ public void testBasic() { session.run(tf.init()); /** make sure the variables were initialized properly */ - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); for (int step = 0; step < numSteps; step++) { - session.run(ada_update); + session.run(adaUpdate); - accum0_np = caclulateAccum(accum0_np, grads0_np); - var0_np = calculate(var0_np, accum0_np, grads0_np, learningRate); - session.evaluate(var0_np, var0); + accum0Np = caclulateAccum(accum0Np, grads0Np); + var0Np = calculate(var0Np, accum0Np, grads0Np, learningRate); + session.evaluate(var0Np, var0); - accum1_np = caclulateAccum(accum1_np, grads1_np); - var1_np = calculate(var1_np, accum1_np, grads1_np, learningRate); - session.evaluate(var1_np, var1); + accum1Np = caclulateAccum(accum1Np, grads1Np); + var1Np = calculate(var1Np, accum1Np, grads1Np, learningRate); + session.evaluate(var1Np, var1); } } } private FloatNdArray caclulateAccum(FloatNdArray accum, FloatNdArray grads) { - // accum + g_t * g_t + // accum + gT * gT FloatNdArray squareG = ND.square(grads); FloatNdArray result = ND.add(accum, squareG); return result; @@ -160,7 +137,7 @@ private FloatNdArray caclulateAccum(FloatNdArray accum, FloatNdArray grads) { private FloatNdArray calculate( FloatNdArray param, FloatNdArray accum, FloatNdArray grads, float learningRate) { - // param - lr * g_t / (np.sqrt(accum_t) + epsilon) + // param - lr * gT / (np.sqrt(accumT) + epsilon) FloatNdArray divisor = ND.add(ND.sqrt(accum), 1e-07f); FloatNdArray dividend = ND.mul(learningRate, grads); FloatNdArray quotient = ND.div(dividend, divisor); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java index 6f1d13d83d6..75c2fd9c610 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java @@ -14,29 +14,9 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.Tensor; -import static org.tensorflow.framework.optimizers.Adam.FIRST_MOMENT; -import static org.tensorflow.framework.optimizers.Adam.SECOND_MOMENT; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.Adam.BETA_ONE_DEFAULT; -import static org.tensorflow.keras.optimizers.Adam.BETA_ONE_KEY; -import static org.tensorflow.keras.optimizers.Adam.BETA_TWO_DEFAULT; -import static org.tensorflow.keras.optimizers.Adam.BETA_TWO_KEY; -import static org.tensorflow.keras.optimizers.Adam.EPSILON_DEFAULT; -import static org.tensorflow.keras.optimizers.Adam.EPSILON_KEY; -import static org.tensorflow.keras.optimizers.Adam.LEARNING_RATE_DEFAULT; -import static org.tensorflow.keras.optimizers.Adam.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.ND; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; @@ -49,9 +29,16 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.tensorflow.framework.optimizers.Adam.FIRST_MOMENT; +import static org.tensorflow.framework.optimizers.Adam.SECOND_MOMENT; + /** Test cases for Adam Optimizer */ public class AdamTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; int index; @@ -69,55 +56,38 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of create method, of class Adam. */ - @Test - public void testCreate() { - try (TestSession testSession = TestSession.createTestSession(tf_mode)) { - Ops tf = testSession.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "AdaDelta"); - config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - config.put(BETA_ONE_KEY, BETA_ONE_DEFAULT); - config.put(BETA_TWO_KEY, BETA_TWO_DEFAULT); - config.put(EPSILON_KEY, EPSILON_DEFAULT); - AdaDelta expResult = new AdaDelta(tf); - AdaDelta result = AdaDelta.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - @Test public void testBasic() { float m0 = 0.0F; float v0 = 0.0F; float m1 = 0.0F; float v1 = 0.0F; - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.1F}; - float[] grads1_init = {0.01F, 0.01F}; - FloatNdArray var0_np = NdArrays.vectorOf(var0_init); - FloatNdArray var1_np = NdArrays.vectorOf(var1_init); - FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); - FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; + FloatNdArray var0Np = NdArrays.vectorOf(var0Init); + FloatNdArray var1Np = NdArrays.vectorOf(var1Init); + FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); + FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); float epsilon1 = 1e-3F; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); session.setEpsilon(epsilon1); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); /* initialize the local variables */ session.run(var0Initializer); @@ -153,16 +123,16 @@ public void testBasic() { secondMomentSlots[1] = instance.getSlot(var1.asOutput(), SECOND_MOMENT).get(); assertEquals(secondMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); - FloatNdArray m0_np = NdArrays.ofFloats(shape1); - FloatNdArray v0_np = NdArrays.ofFloats(shape1); - FloatNdArray m1_np = NdArrays.ofFloats(shape1); - FloatNdArray v1_np = NdArrays.ofFloats(shape1); + FloatNdArray m0Np = NdArrays.ofFloats(shape0); + FloatNdArray v0Np = NdArrays.ofFloats(shape0); + FloatNdArray m1Np = NdArrays.ofFloats(shape1); + FloatNdArray v1Np = NdArrays.ofFloats(shape1); for (int step = 0; step < 3; step++) { @@ -175,7 +145,7 @@ public void testBasic() { session .getGraphSession() .runner() - .fetch("beta1_power") + .fetch("beta1Power") .run() .get(0) .expect(TFloat32.DTYPE)) { @@ -191,7 +161,7 @@ public void testBasic() { session .getGraphSession() .runner() - .fetch("beta2_power") + .fetch("beta2Power") .run() .get(0) .expect(TFloat32.DTYPE)) { @@ -205,57 +175,54 @@ public void testBasic() { } session.run(update); - float lr_t = + float lrT = learningRate * (float) Math.sqrt(1 - (float) Math.pow(beta2, (step + 1))) / (1 - (float) Math.pow(beta1, (step + 1))); - m0_np = calculateM(m0_np, grads0_np, beta1); - v0_np = calculateV(v0_np, grads0_np, beta2); - var0_np = calculateParam(var0_np, lr_t, m0_np, v0_np, 1e-7F); + m0Np = calculateM(m0Np, grads0Np, beta1); + v0Np = calculateV(v0Np, grads0Np, beta2); + var0Np = calculateParam(var0Np, lrT, m0Np, v0Np, 1e-7F); - m1_np = calculateM(m1_np, grads1_np, beta1); - v1_np = calculateV(v1_np, grads1_np, beta2); - var1_np = calculateParam(var1_np, lr_t, m1_np, v1_np, 1e-7F); + m1Np = calculateM(m1Np, grads1Np, beta1); + v1Np = calculateV(v1Np, grads1Np, beta2); + var1Np = calculateParam(var1Np, lrT, m1Np, v1Np, 1e-7F); // evaluate var 0 and var1 - session.evaluate(var0_np, var0); - session.evaluate(var1_np, var1); + session.evaluate(var0Np, var0); + session.evaluate(var1Np, var1); // first moment - session.evaluate(m0_np, firstMomentSlots[0]); - session.evaluate(m1_np, firstMomentSlots[1]); + session.evaluate(m0Np, firstMomentSlots[0]); + session.evaluate(m1Np, firstMomentSlots[1]); // second moment - session.evaluate(v0_np, secondMomentSlots[0]); - session.evaluate(v1_np, secondMomentSlots[1]); + session.evaluate(v0Np, secondMomentSlots[0]); + session.evaluate(v1Np, secondMomentSlots[1]); } } } - private FloatNdArray calculateM(FloatNdArray m, FloatNdArray g_t, float beta) { - // m_t = beta1 * m + (1 - beta1) * g_t - return ND.add(ND.mul(m, beta), ND.mul(g_t, (1 - beta))); + private FloatNdArray calculateM(FloatNdArray m, FloatNdArray gT, float beta) { + // mT = beta1 * m + (1 - beta1) * gT + return ND.add(ND.mul(m, beta), ND.mul(gT, (1 - beta))); } - private FloatNdArray calculateV(FloatNdArray v, FloatNdArray g_t, float beta) { - // beta2 * v + (1 - beta2) * g_t * g_t + private FloatNdArray calculateV(FloatNdArray v, FloatNdArray gT, float beta) { + // beta2 * v + (1 - beta2) * gT * gT FloatNdArray mul1 = ND.mul(v, beta); - FloatNdArray squareG = ND.square(g_t); + FloatNdArray squareG = ND.square(gT); FloatNdArray mul2 = ND.mul((1 - beta), squareG); FloatNdArray add = ND.add(mul1, mul2); return add; - - // return ND.add(ND.mul(v, beta), - // ND.mul((1-beta), ND.square(g_t))); } private FloatNdArray calculateParam( - FloatNdArray param, float lr_t, FloatNdArray m, FloatNdArray v, float epsilon) { - // param - lr_t * m_t / (np.sqrt(v_t) + epsilon) + FloatNdArray param, float lrT, FloatNdArray m, FloatNdArray v, float epsilon) { + // param - lrT * mT / (np.sqrt(vT) + epsilon) FloatNdArray sqrt = ND.sqrt(v); FloatNdArray divisor = ND.add(sqrt, epsilon); - FloatNdArray dividend = ND.mul(lr_t, m); + FloatNdArray dividend = ND.mul(lrT, m); FloatNdArray quotient = ND.div(dividend, divisor); FloatNdArray result = ND.sub(param, quotient); return result; diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java index 1d3dc9e76bf..9460984d124 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java @@ -14,29 +14,9 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.Tensor; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.Adamax.BETA_ONE_DEFAULT; -import static org.tensorflow.keras.optimizers.Adamax.BETA_ONE_KEY; -import static org.tensorflow.keras.optimizers.Adamax.BETA_TWO_DEFAULT; -import static org.tensorflow.keras.optimizers.Adamax.BETA_TWO_KEY; -import static org.tensorflow.keras.optimizers.Adamax.EPSILON_DEFAULT; -import static org.tensorflow.keras.optimizers.Adamax.EPSILON_KEY; -import static org.tensorflow.keras.optimizers.Adamax.FIRST_MOMENT; -import static org.tensorflow.keras.optimizers.Adamax.LEARNING_RATE_DEFAULT; -import static org.tensorflow.keras.optimizers.Adamax.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.Adamax.SECOND_MOMENT; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.ND; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; @@ -49,16 +29,20 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.tensorflow.keras.optimizers.Adamax.*; + /** Test cases for Adamax Optimizer */ public class AdamaxTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; private static final int VAR = 0; private static final int M = 1; private static final int V = 2; - int index; - public AdamaxTest() {} @BeforeAll @@ -73,27 +57,10 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of create method, of class Adamax. */ - @Test - public void testCreate() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "AdaDelta"); - config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - config.put(BETA_ONE_KEY, BETA_ONE_DEFAULT); - config.put(BETA_TWO_KEY, BETA_TWO_DEFAULT); - config.put(EPSILON_KEY, EPSILON_DEFAULT); - AdaDelta expResult = new AdaDelta(tf); - AdaDelta result = AdaDelta.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - /** Test of getOptimizerName method, of class Adamax. */ @Test public void testGetOptimizerName() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); Adamax instance = new Adamax(tf); String expResult = "Adamax"; @@ -108,37 +75,37 @@ public void testBasic() { int numSteps = 3; - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.1F}; - float[] grads1_init = {0.01F, 0.01F}; + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; float[] zeros = {0.0F, 0.0F}; FloatNdArray m0 = NdArrays.vectorOf(zeros); FloatNdArray v0 = NdArrays.vectorOf(zeros); FloatNdArray m1 = NdArrays.vectorOf(zeros); FloatNdArray v1 = NdArrays.vectorOf(zeros); - FloatNdArray var0_np = NdArrays.vectorOf(var0_init); - FloatNdArray var1_np = NdArrays.vectorOf(var1_init); - FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); - FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + FloatNdArray var0Np = NdArrays.vectorOf(var0Init); + FloatNdArray var1Np = NdArrays.vectorOf(var1Init); + FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); + FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); float epsilon = 1e-6f; float epsilon1 = 1e-3F; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); /* initialize the local variables */ session.run(var0Initializer); @@ -177,13 +144,13 @@ public void testBasic() { session.setEpsilon(epsilon1); for (int step = 0; step < numSteps; step++) { // Test powers - final float beta1_power = (float) Math.pow(BETA_ONE_DEFAULT, step + 1); + final float beta1Power = (float) Math.pow(BETA_ONE_DEFAULT, step + 1); try (Tensor result = session .getGraphSession() .runner() - .fetch("beta1_power") + .fetch("beta1Power") .run() .get(0) .expect(TFloat32.DTYPE)) { @@ -192,31 +159,31 @@ public void testBasic() { .scalars() .forEach( f -> { - assertEquals(beta1_power, f.getFloat(), epsilon1); + assertEquals(beta1Power, f.getFloat(), epsilon1); }); } session.run(update); - FloatNdArray[] resultNP = calculate(var0_np, grads0_np, step, m0, v0); - var0_np = resultNP[VAR]; + FloatNdArray[] resultNP = calculate(var0Np, grads0Np, step, m0, v0); + var0Np = resultNP[VAR]; m0 = resultNP[M]; v0 = resultNP[V]; - resultNP = calculate(var1_np, grads1_np, step, m1, v1); - var1_np = resultNP[VAR]; + resultNP = calculate(var1Np, grads1Np, step, m1, v1); + var1Np = resultNP[VAR]; m1 = resultNP[M]; v1 = resultNP[V]; // evaluate var0 and var1 - session.evaluate(var0_np, var0); - session.evaluate(var1_np, var1); + session.evaluate(var0Np, var0); + session.evaluate(var1Np, var1); } } } private FloatNdArray[] calculate( - FloatNdArray var_np, FloatNdArray grads_np, int step, FloatNdArray m, FloatNdArray v) { + FloatNdArray varNp, FloatNdArray gradsNp, int step, FloatNdArray m, FloatNdArray v) { float alpha = 0.001F; float beta1 = BETA_ONE_DEFAULT; float beta2 = BETA_TWO_DEFAULT; @@ -226,15 +193,15 @@ private FloatNdArray[] calculate( float oneMinusBeta1Pow = 1.F - (float) Math.pow(beta1, step + 1); float alpha1 = alpha / oneMinusBeta1Pow; - // beta1 * m + (1 - beta1) * g_t; - m = ND.add(ND.mul(beta1, m), ND.mul(oneMinusBeta1, grads_np)); - // np.maximum(beta2 * v, np.abs(g_t)) - v = ND.max(ND.mul(beta2, v), ND.abs(grads_np)); - // param_t = param - (alpha / (1 - beta1**(t + 1))) * (m_t / (v_t + epsilon)) - var_np = ND.sub(var_np, ND.mul(alpha1, ND.div(m, ND.add(v, espilon)))); + // beta1 * m + (1 - beta1) * gT; + m = ND.add(ND.mul(beta1, m), ND.mul(oneMinusBeta1, gradsNp)); + // np.maximum(beta2 * v, np.abs(gT)) + v = ND.max(ND.mul(beta2, v), ND.abs(gradsNp)); + // paramT = param - (alpha / (1 - beta1**(t + 1))) * (mT / (vT + epsilon)) + varNp = ND.sub(varNp, ND.mul(alpha1, ND.div(m, ND.add(v, espilon)))); FloatNdArray[] result = new FloatNdArray[3]; - result[VAR] = var_np; + result[VAR] = varNp; result[M] = m; result[V] = v; return result; diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java index d61197348af..4f1eb25246b 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java @@ -14,24 +14,8 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.Ftrl.INITIAL_ACCUM_VALUE_KEY; -import static org.tensorflow.keras.optimizers.Ftrl.L1STRENGTH_KEY; -import static org.tensorflow.keras.optimizers.Ftrl.L2STRENGTH_KEY; -import static org.tensorflow.keras.optimizers.Ftrl.L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY; -import static org.tensorflow.keras.optimizers.Ftrl.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.Ftrl.LEARNING_RATE_POWER_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; @@ -41,9 +25,14 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + /** Test cases for Ftrl Optimizer */ public class FtrlTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + private TestSession.Mode tfMode = TestSession.Mode.GRAPH; int index; public FtrlTest() {} @@ -60,29 +49,10 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of initConfig method, of class Ftrl. */ - @Test - public void testInitConfig() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "Ftrl"); - config.put(LEARNING_RATE_KEY, 2.0F); - config.put(LEARNING_RATE_POWER_KEY, -0.5F); - config.put(INITIAL_ACCUM_VALUE_KEY, 0.1F); - config.put(L1STRENGTH_KEY, 0.0F); - config.put(L2STRENGTH_KEY, 0.0F); - config.put(L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY, 0.0F); - Ftrl expResult = new Ftrl(tf, 2.0F); - Ftrl result = Ftrl.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - /** Test of getOptimizerName method, of class Ftrl. */ @Test public void testGetOptimizerName() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); Ftrl instance = new Ftrl(tf); String expResult = "Ftrl"; @@ -92,29 +62,29 @@ public void testGetOptimizerName() { } @Test - public void testFtrlWithL1_L2_L2Shrinkage() { - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {4.0F, 3.0F}; - float[] grads0_init = {0.1F, 0.2F}; - float[] grads1_init = {0.01F, 0.02F}; + public void testFtrlWithL1L2L2Shrinkage() { + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {4.0F, 3.0F}; + float[] grads0Init = {0.1F, 0.2F}; + float[] grads1Init = {0.01F, 0.02F}; float epsilon = 1e-8F; float epsilon1 = 1e-5F; int numSteps = 10; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); float learningRate = 3.0F; @@ -123,10 +93,10 @@ public void testFtrlWithL1_L2_L2Shrinkage() { tf, learningRate, -0.5F, // learningRatePower - 0.1F, // initial_accumulator_value - 0.001F, // l1_regularization_strength - 2.0F, // l2_regularization_strength - 0.1F // l2_shrinkage_regularization_strength + 0.1F, // initialAccumulatorValue + 0.001F, // l1RegularizationStrength + 2.0F, // l2RegularizationStrength + 0.1F // l2ShrinkageRegularizationStrength ); /* build the GradsAnvVars */ @@ -134,7 +104,7 @@ public void testFtrlWithL1_L2_L2Shrinkage() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + Op ftrlUpdate = instance.applyGradients(gradsAndVars, "FtrlTest"); /* initialize the local variables */ session.run(var0Initializer); @@ -143,11 +113,11 @@ public void testFtrlWithL1_L2_L2Shrinkage() { /** initialize the accumulators */ session.run(tf.init()); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); for (int i = 0; i < numSteps; i++) { - session.run(ftrl_update); + session.run(ftrlUpdate); } float[] expectedVar0 = {-0.22578995F, -0.44345796F}; @@ -159,28 +129,28 @@ public void testFtrlWithL1_L2_L2Shrinkage() { @Test public void testFtrlWithL1() { - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {4.0F, 3.0F}; - float[] grads0_init = {0.1F, 0.2F}; - float[] grads1_init = {0.01F, 0.02F}; + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {4.0F, 3.0F}; + float[] grads0Init = {0.1F, 0.2F}; + float[] grads1Init = {0.01F, 0.02F}; float epsilon = 1e-8F; float epsilon1 = 1e-5F; int numSteps = 10; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); float learningRate = 3.0F; @@ -189,11 +159,10 @@ public void testFtrlWithL1() { tf, learningRate, Ftrl.LEARNING_RATE_POWER_DEFAULT, // learningRatePower - 0.1F, // initial_accumulator_value - 0.001F, // l1_regularization_strength - 0.0F, // l2_regularization_strength - Ftrl - .L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT // l2_shrinkage_regularization_strength + 0.1F, // initialAccumulatorValue + 0.001F, // l1RegularizationStrength + 0.0F, // l2RegularizationStrength + Ftrl.L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT // l2ShrinkageRegularizationStrength ); /* build the GradsAnvVars */ @@ -201,7 +170,7 @@ public void testFtrlWithL1() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + Op ftrlUpdate = instance.applyGradients(gradsAndVars, "FtrlTest"); /* initialize the local variables */ session.run(var0Initializer); @@ -210,11 +179,11 @@ public void testFtrlWithL1() { /** initialize the accumulators */ session.run(tf.init()); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); for (int i = 0; i < numSteps; i++) { - session.run(ftrl_update); + session.run(ftrlUpdate); } float[] expectedVar0 = {-7.66718769F, -10.91273689F}; @@ -226,29 +195,29 @@ public void testFtrlWithL1() { } @Test - public void testFtrlWithL1_L2() { - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {4.0F, 3.0F}; - float[] grads0_init = {0.1F, 0.2F}; - float[] grads1_init = {0.01F, 0.02F}; + public void testFtrlWithL1L2() { + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {4.0F, 3.0F}; + float[] grads0Init = {0.1F, 0.2F}; + float[] grads1Init = {0.01F, 0.02F}; float epsilon = 1e-8F; float epsilon1 = 1e-5F; int numSteps = 10; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); float learningRate = 3.0F; @@ -257,11 +226,10 @@ public void testFtrlWithL1_L2() { tf, learningRate, Ftrl.LEARNING_RATE_POWER_DEFAULT, // learningRatePower - 0.1F, // initial_accumulator_value - 0.001F, // l1_regularization_strength - 2.0F, // l2_regularization_strength - Ftrl - .L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT // l2_shrinkage_regularization_strength + 0.1F, // initialAccumulatorValue + 0.001F, // l1RegularizationStrength + 2.0F, // l2RegularizationStrength + Ftrl.L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT // l2ShrinkageRegularizationStrength ); /* build the GradsAnvVars */ @@ -269,7 +237,7 @@ public void testFtrlWithL1_L2() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + Op ftrlUpdate = instance.applyGradients(gradsAndVars, "FtrlTest"); /* initialize the local variables */ session.run(var0Initializer); @@ -278,11 +246,11 @@ public void testFtrlWithL1_L2() { /** initialize the accumulators */ session.run(tf.init()); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); for (int i = 0; i < numSteps; i++) { - session.run(ftrl_update); + session.run(ftrlUpdate); } float[] expectedVar0 = {-0.24059935F, -0.46829352F}; @@ -295,28 +263,28 @@ public void testFtrlWithL1_L2() { @Test public void doTestFtrlwithoutRegularization() { - float[] var0_init = {0.0F, 0.0F}; - float[] var1_init = {0.0F, 0.0F}; - float[] grads0_init = {0.1F, 0.2F}; - float[] grads1_init = {0.01F, 0.02F}; + float[] var0Init = {0.0F, 0.0F}; + float[] var1Init = {0.0F, 0.0F}; + float[] grads0Init = {0.1F, 0.2F}; + float[] grads1Init = {0.01F, 0.02F}; float epsilon = 1e-8F; float epsilon1 = 1e-5F; int numSteps = 3; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); float learningRate = 3.0F; @@ -326,7 +294,7 @@ public void doTestFtrlwithoutRegularization() { List gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Op ftrl_update = instance.applyGradients(gradsAndVars, "FtrlTest"); + Op ftrlUpdate = instance.applyGradients(gradsAndVars, "FtrlTest"); /* initialize the local variables */ session.run(var0Initializer); @@ -335,11 +303,11 @@ public void doTestFtrlwithoutRegularization() { /** initialize the accumulators */ session.run(tf.init()); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); for (int i = 0; i < numSteps; i++) { - session.run(ftrl_update); + session.run(ftrlUpdate); } float[] expectedVar0 = {-2.60260963F, -4.29698515F}; diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java index 2b8bce40471..3eab6288268 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java @@ -14,29 +14,9 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.Tensor; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.Adamax.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.Nadam.BETA_ONE_DEFAULT; -import static org.tensorflow.keras.optimizers.Nadam.BETA_ONE_KEY; -import static org.tensorflow.keras.optimizers.Nadam.BETA_TWO_DEFAULT; -import static org.tensorflow.keras.optimizers.Nadam.BETA_TWO_KEY; -import static org.tensorflow.keras.optimizers.Nadam.EPSILON_DEFAULT; -import static org.tensorflow.keras.optimizers.Nadam.EPSILON_KEY; -import static org.tensorflow.keras.optimizers.Nadam.FIRST_MOMENT; -import static org.tensorflow.keras.optimizers.Nadam.LEARNING_RATE_DEFAULT; -import static org.tensorflow.keras.optimizers.Nadam.SECOND_MOMENT; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; import org.tensorflow.keras.utils.ND; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; @@ -49,15 +29,21 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.tensorflow.keras.optimizers.Nadam.FIRST_MOMENT; +import static org.tensorflow.keras.optimizers.Nadam.SECOND_MOMENT; + /** Test cases for Nadam Optimizer */ public class NadamTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; private static final int VAR = 0; private static final int M = 1; private static final int V = 2; - int index = 0; float momentum = 1; public NadamTest() {} @@ -74,27 +60,10 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of create method, of class Nadam. */ - @Test - public void testCreate() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "AdaDelta"); - config.put(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - config.put(BETA_ONE_KEY, BETA_ONE_DEFAULT); - config.put(BETA_TWO_KEY, BETA_TWO_DEFAULT); - config.put(EPSILON_KEY, EPSILON_DEFAULT); - AdaDelta expResult = new AdaDelta(tf); - AdaDelta result = AdaDelta.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - /** Test of getOptimizerName method, of class Nadam. */ @Test public void testGetOptimizerName() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); Nadam instance = new Nadam(tf); String expResult = "Nadam"; @@ -109,10 +78,10 @@ public void testBasic() { int numSteps = 3; - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.1F}; - float[] grads1_init = {0.01F, 0.01F}; + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; float[] zeros = {0.0F, 0.0F}; float[] ones = {1.0F, 1.0F}; @@ -121,27 +90,27 @@ public void testBasic() { FloatNdArray m1 = NdArrays.vectorOf(zeros); FloatNdArray v1 = NdArrays.vectorOf(zeros); FloatNdArray mcache = NdArrays.vectorOf(ones); - FloatNdArray var0_np = NdArrays.vectorOf(var0_init); - FloatNdArray var1_np = NdArrays.vectorOf(var1_init); - FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); - FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); + FloatNdArray var0Np = NdArrays.vectorOf(var0Init); + FloatNdArray var1Np = NdArrays.vectorOf(var1Init); + FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); + FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); float epsilon = 1e-6f; float epsilon1 = 1e-3F; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); Nadam instance = new Nadam(tf); /* build the GradsAnvVars */ @@ -176,8 +145,8 @@ public void testBasic() { session.setEpsilon(epsilon1); - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); try (Tensor result = session @@ -222,13 +191,13 @@ public void testBasic() { }); } mcache = ND.mul(mcache, momentum); - FloatNdArray[] resultsNP = nadam_update_numpy(var0_np, grads0_np, step, m0, v0, mcache); - var0_np = resultsNP[VAR]; + FloatNdArray[] resultsNP = nadamUpdateNdArray(var0Np, grads0Np, step, m0, v0, mcache); + var0Np = resultsNP[VAR]; m0 = resultsNP[M]; v0 = resultsNP[V]; - resultsNP = nadam_update_numpy(var1_np, grads1_np, step, m1, v1, mcache); - var1_np = resultsNP[VAR]; + resultsNP = nadamUpdateNdArray(var1Np, grads1Np, step, m1, v1, mcache); + var1Np = resultsNP[VAR]; m1 = resultsNP[M]; v1 = resultsNP[V]; @@ -241,46 +210,41 @@ public void testBasic() { session.evaluate(v1, secondMomentSlots[1]); // evaluate var0 and var1 - session.evaluate(var0_np, var0); - session.evaluate(var1_np, var1); + session.evaluate(var0Np, var0); + session.evaluate(var1Np, var1); } } } - private FloatNdArray update_m_cache(FloatNdArray mcache, int t) { - float mu_t = 0.9F * (1.0F - 0.5F * (float) Math.pow(0.96, (0.004 * (t + 1)))); - return ND.mul(mu_t, mcache); - } - - private FloatNdArray[] nadam_update_numpy( - FloatNdArray var_np, - FloatNdArray grads_np, + private FloatNdArray[] nadamUpdateNdArray( + FloatNdArray varNp, + FloatNdArray gradsNp, int t, FloatNdArray m, FloatNdArray v, - FloatNdArray m_cache) { + FloatNdArray mCache) { float alpha = 0.001F; float beta1 = 0.9F; float beta2 = 0.999F; float epsilon = 1e-8F; - float mu_t = beta1 * (1F - 0.5F * (float) Math.pow(0.96, 0.004 * (t + 1))); - float mu_t_1 = beta1 * (1F - 0.5F * (float) Math.pow(0.96, (0.004 * (t + 2)))); - FloatNdArray m_cache_t_1 = ND.mul(m_cache, mu_t_1); - FloatNdArray g_prime_t = ND.div(grads_np, ND.sub(1.0F, m_cache)); - FloatNdArray m_t = ND.add(ND.mul(beta1, m), ND.mul((1 - beta1), grads_np)); - FloatNdArray v_t = ND.add(ND.mul(beta2, v), ND.mul((1 - beta2), ND.square(grads_np))); - - FloatNdArray m_prime_t = ND.div(m_t, ND.sub(1.F, m_cache_t_1)); - FloatNdArray v_prime_t = ND.div(v_t, 1.F - (float) Math.pow(beta2, t + 1)); - FloatNdArray m_bar_t = ND.add(ND.mul((1 - mu_t), g_prime_t), ND.mul(mu_t_1, m_prime_t)); - FloatNdArray param_t = - ND.sub(var_np, ND.div(ND.mul(alpha, m_bar_t), ND.add(ND.sqrt(v_prime_t), epsilon))); + float muT = beta1 * (1F - 0.5F * (float) Math.pow(0.96, 0.004 * (t + 1))); + float muT1 = beta1 * (1F - 0.5F * (float) Math.pow(0.96, (0.004 * (t + 2)))); + FloatNdArray mCacheT1 = ND.mul(mCache, muT1); + FloatNdArray gPrimeT = ND.div(gradsNp, ND.sub(1.0F, mCache)); + FloatNdArray mT = ND.add(ND.mul(beta1, m), ND.mul((1 - beta1), gradsNp)); + FloatNdArray vT = ND.add(ND.mul(beta2, v), ND.mul((1 - beta2), ND.square(gradsNp))); + + FloatNdArray mPrimeT = ND.div(mT, ND.sub(1.F, mCacheT1)); + FloatNdArray vPrimeT = ND.div(vT, 1.F - (float) Math.pow(beta2, t + 1)); + FloatNdArray mBarT = ND.add(ND.mul((1 - muT), gPrimeT), ND.mul(muT1, mPrimeT)); + FloatNdArray paramT = + ND.sub(varNp, ND.div(ND.mul(alpha, mBarT), ND.add(ND.sqrt(vPrimeT), epsilon))); FloatNdArray[] results = new FloatNdArray[3]; - results[VAR] = param_t; - results[M] = m_t; - results[V] = v_t; + results[VAR] = paramT; + results[M] = mT; + results[V] = vT; return results; } } diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java index b8fb4f40ee9..cabf869536c 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java @@ -14,30 +14,8 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.framework.optimizers.RMSProp.MG; -import static org.tensorflow.framework.optimizers.RMSProp.MOMENTUM; -import static org.tensorflow.framework.optimizers.RMSProp.RMS; -import static org.tensorflow.keras.optimizers.Ftrl.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; -import static org.tensorflow.keras.optimizers.RMSProp.CENTERED_DEFAULT; -import static org.tensorflow.keras.optimizers.RMSProp.CENTERED_KEY; -import static org.tensorflow.keras.optimizers.RMSProp.DECAY_DEFAULT; -import static org.tensorflow.keras.optimizers.RMSProp.DECAY_KEY; -import static org.tensorflow.keras.optimizers.RMSProp.EPSILON_DEFAULT; -import static org.tensorflow.keras.optimizers.RMSProp.EPSILON_KEY; -import static org.tensorflow.keras.optimizers.RMSProp.MOMENTUM_DEFAULT; -import static org.tensorflow.keras.optimizers.RMSProp.MOMENTUM_KEY; import org.tensorflow.keras.utils.ND; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; @@ -50,258 +28,254 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; -/** Test cases for RMSProp Optimizer */ -public class RMSPropTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; - - final int VAR_T = 0; - final int MG_T = 1; - final int RMS_T = 2; - final int MOM_T = 3; - - int index; - - public RMSPropTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - /** - * Test of create method, of class RMSProp. - */ - @Test - public void testCreate() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "Ftrl"); - config.put(LEARNING_RATE_KEY, 2.0F); - config.put(DECAY_KEY, DECAY_DEFAULT); - config.put(MOMENTUM_KEY, MOMENTUM_DEFAULT); - config.put(EPSILON_KEY, EPSILON_DEFAULT); - config.put(CENTERED_KEY, CENTERED_DEFAULT); - Ftrl expResult = new Ftrl(tf, 2.0F); - Ftrl result = Ftrl.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } +import java.util.ArrayList; +import java.util.List; - Object[][] _test_param_values = { - // learning_rate, rho (decay), momentum, epsilon, centered - {0.05F, 0.9F, 0.0F, 1e-3F, true}, - {0.05F, 0.9F, 0.0F, 1e-3F, false}, - {0.1F, 0.9F, 0.0F, 1e-3F, true}, - {0.01F, 0.9F, 0.0F, 1e-5F, true}, - {0.01F, 0.9F, 0.9F, 1e-5F, true} - }; - - @Test - public void testDense() { - - int numSteps = 3; - - for (int run = 0; run < _test_param_values.length; run++) { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - session.setEpsilon(1e-2f); - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.2F}; - float[] grads1_init = {0.01F, 0.2F}; - final float epsilon1 = 1e-2F; - - FloatNdArray var0_np = NdArrays.vectorOf(var0_init); - FloatNdArray var1_np = NdArrays.vectorOf(var1_init); - FloatNdArray grads0_np = NdArrays.vectorOf(grads0_init); - FloatNdArray grads1_np = NdArrays.vectorOf(grads1_init); - - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); - Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); - Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); - - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); - - // learning_rate, rho (decay), momentum, epsilon, centered - float learningRate = (float) (float) _test_param_values[run][0]; - float decay = (float) _test_param_values[run][1]; - float momentum = (float) _test_param_values[run][2]; - float epsilon = (float) _test_param_values[run][3]; - boolean centered = (boolean) _test_param_values[run][4]; - - RMSProp instance = new RMSProp(tf, - learningRate, - decay, - momentum, - epsilon, - centered); - - /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); - gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); - gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - - Op update = instance.applyGradients(gradsAndVars, "RMSPropTest"); - - /* initialize the local variables */ - session.run(var0Initializer); - session.run(var1Initializer); - - /** - * initialize the accumulators - */ - session.run(tf.init()); - - /** - * make sure the variables were initialized properly - */ - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); - - Variable mg0 = centered ? instance.getSlot(var0.asOutput(), MG).get() : null; - Variable mg1 = centered ? instance.getSlot(var1.asOutput(), MG).get() : null; - Variable mom0 = momentum > 0.F ? instance.getSlot(var0.asOutput(), MOMENTUM).get() : null; - Variable mom1 = momentum > 0.F ? instance.getSlot(var1.asOutput(), MOMENTUM).get() : null; - Variable rms0 = instance.getSlot(var0.asOutput(), RMS).get(); - Variable rms1 = instance.getSlot(var1.asOutput(), RMS).get(); - - float[] zeros = {0.0F, 0.0F}; - float[] ones = {1.0F, 1.0F}; // temp to match RMSProp - FloatNdArray mg0_np = NdArrays.vectorOf(zeros); - FloatNdArray mg1_np = NdArrays.vectorOf(zeros); - FloatNdArray rms0_np = NdArrays.vectorOf(ones); - FloatNdArray rms1_np = NdArrays.vectorOf(ones); - FloatNdArray mom0_np = NdArrays.vectorOf(zeros); - FloatNdArray mom1_np = NdArrays.vectorOf(zeros); - - - - for (int i = 0; i < numSteps; i++) { - session.run(update); - FloatNdArray[] result0 = calc(var0_np, grads0_np, mg0_np, rms0_np, - mom0_np, learningRate, decay, momentum, epsilon, centered); - var0_np = result0[VAR_T]; - mg0_np = result0[MG_T]; - rms0_np = result0[RMS_T]; - mom0_np = result0[MOM_T]; - - FloatNdArray[] result1 = calc(var1_np, grads1_np, mg1_np, rms1_np, - mom1_np, learningRate, decay, momentum, epsilon, centered); - - var1_np = result1[VAR_T]; - mg1_np = result1[MG_T]; - rms1_np = result1[RMS_T]; - mom1_np = result1[MOM_T]; - - if (centered) { - session.evaluate(mg0_np, mg0); - session.evaluate(mg0_np, mg0); - } - if (momentum > 0.F) { - session.evaluate(mom0_np, mom0); - session.evaluate(mom1_np, mom1); - } - - /* TODO the values returned from rms slot, do not match what I see in the python test */ - session.evaluate(rms0_np, rms0); - session.evaluate(rms1_np, rms1); - - session.evaluate(var0_np, var0); - session.evaluate(var1_np, var1); - } - } - } - } +import static org.tensorflow.framework.optimizers.RMSProp.*; - FloatNdArray[] calc(FloatNdArray var_np, FloatNdArray grad_np, FloatNdArray mg_np, - FloatNdArray rms_np, FloatNdArray mom, float lr, float decay, float momentum, - float epsilon, boolean centered) { - - FloatNdArray[] result = new FloatNdArray[4]; // var_t, mg_t, rms_t, mom_t - result[RMS_T] = calcRMS(rms_np, grad_np, decay); // RMS - - FloatNdArray denom_t; - if (centered) { - result[MG_T] = calcMG(mg_np, grad_np, decay); - //rms_t - mg_t * mg_t - denom_t = ND.sub(result[RMS_T], ND.square(result[MG_T])); - } else { - result[MG_T] = mg_np; - denom_t = rms_np; - } - if (momentum > 0.F) { - //momentum * mom + lr * g / (np.sqrt(denom_t + epsilon)) - result[MOM_T] = calcMom(momentum, mom, lr, grad_np, denom_t, epsilon); - //var_t = var - mom_t - result[VAR_T] = ND.sub(var_np, result[MOM_T]); - } else { - result[MOM_T] = mom; - result[VAR_T] = calcVar(var_np, grad_np, lr, denom_t, epsilon); +/** Test cases for RMSProp Optimizer */ +public class RMSPropTest { + final int VAR_T = 0; + final int MG_T = 1; + final int RMS_T = 2; + final int MOM_T = 3; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; + int index; + Object[][] TestParamValues = { + // learningRate, rho (decay), momentum, epsilon, centered + {0.05F, 0.9F, 0.0F, 1e-3F, true}, + {0.05F, 0.9F, 0.0F, 1e-3F, false}, + {0.1F, 0.9F, 0.0F, 1e-3F, true}, + {0.01F, 0.9F, 0.0F, 1e-5F, true}, + {0.01F, 0.9F, 0.9F, 1e-5F, true} + }; + + public RMSPropTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + @Test + public void testDense() { + + int numSteps = 3; + + for (int run = 0; run < TestParamValues.length; run++) { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + session.setEpsilon(1e-2f); + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.2F}; + float[] grads1Init = {0.01F, 0.2F}; + final float epsilon1 = 1e-2F; + + FloatNdArray var0Np = NdArrays.vectorOf(var0Init); + FloatNdArray var1Np = NdArrays.vectorOf(var1Init); + FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); + FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); + + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); + + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); + + // learningRate, rho (decay), momentum, epsilon, centered + float learningRate = (float) (float) TestParamValues[run][0]; + float decay = (float) TestParamValues[run][1]; + float momentum = (float) TestParamValues[run][2]; + float epsilon = (float) TestParamValues[run][3]; + boolean centered = (boolean) TestParamValues[run][4]; + + RMSProp instance = new RMSProp(tf, learningRate, decay, momentum, epsilon, centered); + + /* build the GradsAnvVars */ + List gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + Op update = instance.applyGradients(gradsAndVars, "RMSPropTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /** initialize the accumulators */ + session.run(tf.init()); + + /** make sure the variables were initialized properly */ + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); + + Variable mg0 = centered ? instance.getSlot(var0.asOutput(), MG).get() : null; + Variable mg1 = centered ? instance.getSlot(var1.asOutput(), MG).get() : null; + Variable mom0 = + momentum > 0.F ? instance.getSlot(var0.asOutput(), MOMENTUM).get() : null; + Variable mom1 = + momentum > 0.F ? instance.getSlot(var1.asOutput(), MOMENTUM).get() : null; + Variable rms0 = instance.getSlot(var0.asOutput(), RMS).get(); + Variable rms1 = instance.getSlot(var1.asOutput(), RMS).get(); + + float[] zeros = {0.0F, 0.0F}; + float[] ones = {1.0F, 1.0F}; // temp to match RMSProp + FloatNdArray mg0Np = NdArrays.vectorOf(zeros); + FloatNdArray mg1Np = NdArrays.vectorOf(zeros); + FloatNdArray rms0Np = NdArrays.vectorOf(ones); + FloatNdArray rms1Np = NdArrays.vectorOf(ones); + FloatNdArray mom0Np = NdArrays.vectorOf(zeros); + FloatNdArray mom1Np = NdArrays.vectorOf(zeros); + + for (int i = 0; i < numSteps; i++) { + session.run(update); + FloatNdArray[] result0 = + calc( + var0Np, + grads0Np, + mg0Np, + rms0Np, + mom0Np, + learningRate, + decay, + momentum, + epsilon, + centered); + var0Np = result0[VAR_T]; + mg0Np = result0[MG_T]; + rms0Np = result0[RMS_T]; + mom0Np = result0[MOM_T]; + + FloatNdArray[] result1 = + calc( + var1Np, + grads1Np, + mg1Np, + rms1Np, + mom1Np, + learningRate, + decay, + momentum, + epsilon, + centered); + + var1Np = result1[VAR_T]; + mg1Np = result1[MG_T]; + rms1Np = result1[RMS_T]; + mom1Np = result1[MOM_T]; + + if (centered) { + session.evaluate(mg0Np, mg0); + session.evaluate(mg0Np, mg0); + } + if (momentum > 0.F) { + session.evaluate(mom0Np, mom0); + session.evaluate(mom1Np, mom1); + } + + /* TODO the values returned from rms slot, do not match what I see in the python test */ + session.evaluate(rms0Np, rms0); + session.evaluate(rms1Np, rms1); + + session.evaluate(var0Np, var0); + session.evaluate(var1Np, var1); } - - - return result; - + } } - - private FloatNdArray calcRMS(FloatNdArray rms_np, FloatNdArray grad_np, float decay) { - //rms * rho + (1 - rho) * g * g - FloatNdArray rms_rho = ND.mul(rms_np, decay); - FloatNdArray squareG = ND.square(grad_np); - float oneRHO = 1.0F - decay; - FloatNdArray decayG2 = ND.mul(oneRHO, squareG); - FloatNdArray result = ND.add(rms_rho, decayG2); - return result; - } - - private FloatNdArray calcMG(FloatNdArray mg_np, FloatNdArray grad_np, float decay) { - //mg_t = mg * rho + (1 - rho) * g - FloatNdArray mg_rho = ND.mul(mg_np, decay); - float oneRHO = 1.0F - decay; - FloatNdArray decayG = ND.mul(oneRHO, grad_np); - FloatNdArray result = ND.add(mg_rho, decayG); - return result; - + } + + FloatNdArray[] calc( + FloatNdArray varNp, + FloatNdArray gradNp, + FloatNdArray mgNp, + FloatNdArray rmsNp, + FloatNdArray mom, + float lr, + float decay, + float momentum, + float epsilon, + boolean centered) { + + FloatNdArray[] result = new FloatNdArray[4]; // varT, mgT, rmsT, momT + result[RMS_T] = calcRMS(rmsNp, gradNp, decay); // RMS + + FloatNdArray denomT; + if (centered) { + result[MG_T] = calcMG(mgNp, gradNp, decay); + // rmsT - mgT * mgT + denomT = ND.sub(result[RMS_T], ND.square(result[MG_T])); + } else { + result[MG_T] = mgNp; + denomT = rmsNp; } - - private FloatNdArray calcMom(float momentum, FloatNdArray mom, float lr, - FloatNdArray grad_np, FloatNdArray denom_t, float epsilon) { - // momentum * mom + lr * g / (np.sqrt(denom_t + epsilon)) - FloatNdArray moMo = ND.mul(momentum, mom); - FloatNdArray dividend = ND.mul(lr, grad_np); - FloatNdArray divisor = ND.sqrt(ND.add(denom_t, epsilon)); - FloatNdArray quotient = ND.div(dividend, divisor); - FloatNdArray result = ND.add(moMo, quotient); - return result; - + if (momentum > 0.F) { + // momentum * mom + lr * g / (np.sqrt(denomT + epsilon)) + result[MOM_T] = calcMom(momentum, mom, lr, gradNp, denomT, epsilon); + // varT = var - momT + result[VAR_T] = ND.sub(varNp, result[MOM_T]); + } else { + result[MOM_T] = mom; + result[VAR_T] = calcVar(varNp, gradNp, lr, denomT, epsilon); } - private FloatNdArray calcVar(FloatNdArray var_np, FloatNdArray grad_np, float lr, - FloatNdArray denom_t, float epsilon) { - // var - lr * g / (np.sqrt(denom_t) + epsilon) - FloatNdArray dividend = ND.mul(lr, grad_np); - FloatNdArray divisor = ND.add(ND.sqrt(denom_t), epsilon); - FloatNdArray quotient = ND.div(dividend, divisor); - FloatNdArray result = ND.sub(var_np, quotient); - return result; - - } + return result; + } + + private FloatNdArray calcRMS(FloatNdArray rmsNp, FloatNdArray gradNp, float decay) { + // rms * rho + (1 - rho) * g * g + FloatNdArray rmsRho = ND.mul(rmsNp, decay); + FloatNdArray squareG = ND.square(gradNp); + float oneRHO = 1.0F - decay; + FloatNdArray decayG2 = ND.mul(oneRHO, squareG); + FloatNdArray result = ND.add(rmsRho, decayG2); + return result; + } + + private FloatNdArray calcMG(FloatNdArray mgNp, FloatNdArray gradNp, float decay) { + // mgT = mg * rho + (1 - rho) * g + FloatNdArray mgRho = ND.mul(mgNp, decay); + float oneRHO = 1.0F - decay; + FloatNdArray decayG = ND.mul(oneRHO, gradNp); + FloatNdArray result = ND.add(mgRho, decayG); + return result; + } + + private FloatNdArray calcMom( + float momentum, + FloatNdArray mom, + float lr, + FloatNdArray gradNp, + FloatNdArray denomT, + float epsilon) { + // momentum * mom + lr * g / (np.sqrt(denomT + epsilon)) + FloatNdArray moMo = ND.mul(momentum, mom); + FloatNdArray dividend = ND.mul(lr, gradNp); + FloatNdArray divisor = ND.sqrt(ND.add(denomT, epsilon)); + FloatNdArray quotient = ND.div(dividend, divisor); + FloatNdArray result = ND.add(moMo, quotient); + return result; + } + + private FloatNdArray calcVar( + FloatNdArray varNp, FloatNdArray gradNp, float lr, FloatNdArray denomT, float epsilon) { + // var - lr * g / (np.sqrt(denomT) + epsilon) + FloatNdArray dividend = ND.mul(lr, gradNp); + FloatNdArray divisor = ND.add(ND.sqrt(denomT), epsilon); + FloatNdArray quotient = ND.div(dividend, divisor); + FloatNdArray result = ND.sub(varNp, quotient); + return result; + } } diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java index 7e12b957f84..b36851a561e 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java @@ -14,24 +14,8 @@ =======================================================================*/ package org.tensorflow.keras.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import static org.tensorflow.framework.optimizers.Momentum.MOMENTUM; +import org.junit.jupiter.api.*; import org.tensorflow.framework.optimizers.Optimizer; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; -import static org.tensorflow.keras.optimizers.SGD.LEARNING_RATE_KEY; -import static org.tensorflow.keras.optimizers.SGD.MOMENTUM_DEFAULT; -import static org.tensorflow.keras.optimizers.SGD.MOMENTUM_KEY; -import static org.tensorflow.keras.optimizers.SGD.NESTEROV_DEFAULT; -import static org.tensorflow.keras.optimizers.SGD.NESTEROV_KEY; import org.tensorflow.keras.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; @@ -41,12 +25,16 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.tensorflow.framework.optimizers.Momentum.MOMENTUM; + /** Test cases for SGD Optimizer */ public class SGDTest { - private TestSession.Mode tf_mode = TestSession.Mode.GRAPH; - - int index; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; public SGDTest() {} @@ -62,26 +50,10 @@ public void setUp() {} @AfterEach public void tearDown() {} - /** Test of create method, of class SGD. */ - @Test - public void testCreate() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { - Ops tf = session.getTF(); - Map config = new HashMap<>(); - config.put(NAME_KEY, "Ftrl"); - config.put(LEARNING_RATE_KEY, 2.0F); - config.put(MOMENTUM_KEY, MOMENTUM_DEFAULT); - config.put(NESTEROV_KEY, NESTEROV_DEFAULT); - SGD expResult = new SGD(tf, 2.0F); - SGD result = SGD.create(tf, config); - assertEquals(expResult.getConfig(), result.getConfig()); - } - } - /** Test of getOptimizerName method, of class SGD. */ @Test public void testGetOptimizerName() { - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); SGD instance = new SGD(tf); String expResult = "SGD"; @@ -92,28 +64,28 @@ public void testGetOptimizerName() { @Test public void testBasic() { - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.1F}; - float[] grads1_init = {0.01F, 0.01F}; + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; float learningRate = 3.0F; float epsilon = 1e-6F; float epsilon1 = 1e-2F; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); /* build the GradsAnvVars */ List gradsAndVars = new ArrayList<>(); @@ -131,8 +103,8 @@ public void testBasic() { session.run(tf.init()); /** make sure the variables were initialized properly */ - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); session.run(update); // 1 step @@ -145,10 +117,10 @@ public void testBasic() { @Test public void testMomentum() { - float[] var0_init = {1.0F, 2.0F}; - float[] var1_init = {3.0F, 4.0F}; - float[] grads0_init = {0.1F, 0.1F}; - float[] grads1_init = {0.01F, 0.01F}; + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; float learningRate = 2.0F; float momentum = 0.9F; @@ -156,19 +128,19 @@ public void testMomentum() { float epsilon = 1e-6F; float epsilon1 = 1e-2F; - try (TestSession session = TestSession.createTestSession(tf_mode)) { + try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - Shape shape0 = Shape.of(var0_init.length); - Shape shape1 = Shape.of(var1_init.length); + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); - Assign var0Initializer = tf.assign(var0, tf.constant(var0_init)); - Assign var1Initializer = tf.assign(var1, tf.constant(var1_init)); + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); - Constant grads0 = tf.constant(grads0_init); - Constant grads1 = tf.constant(grads1_init); + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); /* build the GradsAnvVars */ List gradsAndVars = new ArrayList<>(); @@ -191,8 +163,8 @@ public void testMomentum() { session.run(tf.init()); /** make sure the variables were initialized properly */ - session.evaluate(var0_init, var0); - session.evaluate(var1_init, var1); + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); session.run(update); // 1 step @@ -208,20 +180,20 @@ public void testMomentum() { session.run(update); // step 2 - float[] expectedMomentum0_2 = {(0.9f * 0.1f + 0.1f), (0.9f * 0.1f + 0.1f)}; - float[] expectedMomentum1_2 = {(0.9f * 0.01f + 0.01f), (0.9f * 0.01f + 0.01f)}; - session.evaluate(expectedMomentum0_2, momentumSlot0); - session.evaluate(expectedMomentum1_2, momentumSlot1); + float[] expectedMomentum02 = {(0.9f * 0.1f + 0.1f), (0.9f * 0.1f + 0.1f)}; + float[] expectedMomentum12 = {(0.9f * 0.01f + 0.01f), (0.9f * 0.01f + 0.01f)}; + session.evaluate(expectedMomentum02, momentumSlot0); + session.evaluate(expectedMomentum12, momentumSlot1); - float[] expectedVar0_2 = { + float[] expectedVar02 = { 1.0F - (0.1F * 2.0F) - ((0.9F * 0.1F + 0.1F) * 2.0F), 2.0F - (0.1F * 2.0F) - ((0.9F * 0.1F + 0.1F) * 2.0F) }; - float[] expectedVar1_2 = { + float[] expectedVar12 = { 2.98F - ((0.9F * 0.01F + 0.01F) * 2.0F), 3.98F - ((0.9F * 0.01F + 0.01F) * 2.0F) }; - session.evaluate(expectedVar0_2, var0); - session.evaluate(expectedVar1_2, var1); + session.evaluate(expectedVar02, var0); + session.evaluate(expectedVar12, var1); } } } From 171cd2f4f9878b00e35f3175b0a8c7954ef21f07 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Mon, 7 Sep 2020 14:38:12 -0400 Subject: [PATCH 28/55] clean upd warning, format code --- .../keras/optimizers/AdaGradDATest.java | 9 ++-- .../keras/optimizers/AdaGradTest.java | 15 +++--- .../tensorflow/keras/optimizers/AdamTest.java | 34 +++----------- .../keras/optimizers/AdamaxTest.java | 26 ++++------ .../tensorflow/keras/optimizers/FtrlTest.java | 28 ++++------- .../keras/optimizers/NadamTest.java | 22 ++------- .../keras/optimizers/RMSPropTest.java | 47 +++++++++---------- .../tensorflow/keras/optimizers/SGDTest.java | 19 +++----- 8 files changed, 68 insertions(+), 132 deletions(-) diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java index 57a5f5c0bd8..7275e9f8113 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java @@ -24,6 +24,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -33,8 +34,6 @@ public class AdaGradDATest { private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; - int index; - public AdaGradDATest() {} @BeforeAll @@ -55,8 +54,6 @@ public void testBasic() { float[] var1Init = {0.0F, 0.0F}; float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.02F}; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); @@ -81,13 +78,13 @@ public void testBasic() { AdaGrad instance = new AdaGrad(tf, learningRate); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); Op adaUpdate = instance.applyGradients(gradsAndVars, "AdGradDATest"); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); session.evaluate(var0Init, var0); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java index 92701b37d67..d407209b87a 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java @@ -27,6 +27,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -59,8 +60,6 @@ public void testBasic() { float[] var1Init = {3.0F, 4.0F}; float[] grads0Init = {0.1F, 0.1F}; float[] grads1Init = {0.01F, 0.01F}; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; float[] accum0 = {0.1f, 0.1f}; float[] accum1 = {0.1f, 0.1f}; @@ -90,7 +89,7 @@ public void testBasic() { AdaGrad instance = new AdaGrad(tf, learningRate); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -107,10 +106,10 @@ public void testBasic() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); - /** make sure the variables were initialized properly */ + /* make sure the variables were initialized properly */ session.evaluate(var0Init, var0); session.evaluate(var1Init, var1); @@ -131,8 +130,7 @@ public void testBasic() { private FloatNdArray caclulateAccum(FloatNdArray accum, FloatNdArray grads) { // accum + gT * gT FloatNdArray squareG = ND.square(grads); - FloatNdArray result = ND.add(accum, squareG); - return result; + return ND.add(accum, squareG); } private FloatNdArray calculate( @@ -141,7 +139,6 @@ private FloatNdArray calculate( FloatNdArray divisor = ND.add(ND.sqrt(accum), 1e-07f); FloatNdArray dividend = ND.mul(learningRate, grads); FloatNdArray quotient = ND.div(dividend, divisor); - FloatNdArray result = ND.sub(param, quotient); - return result; + return ND.sub(param, quotient); } } diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java index 75c2fd9c610..82a47afbbbb 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java @@ -28,6 +28,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -40,8 +41,6 @@ public class AdamTest { private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; - int index; - public AdamTest() {} @BeforeAll @@ -58,10 +57,6 @@ public void tearDown() {} @Test public void testBasic() { - float m0 = 0.0F; - float v0 = 0.0F; - float m1 = 0.0F; - float v1 = 0.0F; float[] var0Init = {1.0F, 2.0F}; float[] var1Init = {3.0F, 4.0F}; float[] grads0Init = {0.1F, 0.1F}; @@ -96,10 +91,9 @@ public void testBasic() { float learningRate = 0.001F; float beta1 = 0.9F; float beta2 = 0.999F; - float epsilon = 1e-8F; /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -107,7 +101,7 @@ public void testBasic() { Op update = instance.applyGradients(gradsAndVars, "AdamTest"); - /* Create and validae the shapes of the slota */ + /* Create and validate the shapes of the slots */ Variable[] firstMomentSlots = new Variable[2]; Variable[] secondMomentSlots = new Variable[2]; @@ -149,13 +143,7 @@ public void testBasic() { .run() .get(0) .expect(TFloat32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals(powers[0], f.getFloat(), epsilon1); - }); + result.data().scalars().forEach(f -> assertEquals(powers[0], f.getFloat(), epsilon1)); } try (Tensor result = session @@ -165,13 +153,7 @@ public void testBasic() { .run() .get(0) .expect(TFloat32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals(powers[1], f.getFloat(), epsilon1); - }); + result.data().scalars().forEach(f -> assertEquals(powers[1], f.getFloat(), epsilon1)); } session.run(update); @@ -213,8 +195,7 @@ private FloatNdArray calculateV(FloatNdArray v, FloatNdArray gT, float beta) { FloatNdArray mul1 = ND.mul(v, beta); FloatNdArray squareG = ND.square(gT); FloatNdArray mul2 = ND.mul((1 - beta), squareG); - FloatNdArray add = ND.add(mul1, mul2); - return add; + return ND.add(mul1, mul2); } private FloatNdArray calculateParam( @@ -224,7 +205,6 @@ private FloatNdArray calculateParam( FloatNdArray divisor = ND.add(sqrt, epsilon); FloatNdArray dividend = ND.mul(lrT, m); FloatNdArray quotient = ND.div(dividend, divisor); - FloatNdArray result = ND.sub(param, quotient); - return result; + return ND.sub(param, quotient); } } diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java index 9460984d124..3376d65aab4 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java @@ -28,6 +28,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -90,7 +91,6 @@ public void testBasic() { FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); - float epsilon = 1e-6f; float epsilon1 = 1e-3F; try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -113,7 +113,7 @@ public void testBasic() { Adamax instance = new Adamax(tf); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -135,7 +135,7 @@ public void testBasic() { secondMomentSlots[1] = instance.getSlot(var1.asOutput(), SECOND_MOMENT).get(); assertEquals(secondMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); /* initialize the local variables */ @@ -154,13 +154,7 @@ public void testBasic() { .run() .get(0) .expect(TFloat32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals(beta1Power, f.getFloat(), epsilon1); - }); + result.data().scalars().forEach(f -> assertEquals(beta1Power, f.getFloat(), epsilon1)); } session.run(update); @@ -185,18 +179,16 @@ public void testBasic() { private FloatNdArray[] calculate( FloatNdArray varNp, FloatNdArray gradsNp, int step, FloatNdArray m, FloatNdArray v) { float alpha = 0.001F; - float beta1 = BETA_ONE_DEFAULT; - float beta2 = BETA_TWO_DEFAULT; float espilon = 1e-8F; - float oneMinusBeta1 = 1.F - beta1; - float oneMinusBeta1Pow = 1.F - (float) Math.pow(beta1, step + 1); + float oneMinusBeta1 = 1.F - BETA_ONE_DEFAULT; + float oneMinusBeta1Pow = 1.F - (float) Math.pow(BETA_ONE_DEFAULT, step + 1); float alpha1 = alpha / oneMinusBeta1Pow; // beta1 * m + (1 - beta1) * gT; - m = ND.add(ND.mul(beta1, m), ND.mul(oneMinusBeta1, gradsNp)); - // np.maximum(beta2 * v, np.abs(gT)) - v = ND.max(ND.mul(beta2, v), ND.abs(gradsNp)); + m = ND.add(ND.mul(BETA_ONE_DEFAULT, m), ND.mul(oneMinusBeta1, gradsNp)); + // np.maximum(BETA_TWO_DEFAULT * v, np.abs(gT)) + v = ND.max(ND.mul(BETA_TWO_DEFAULT, v), ND.abs(gradsNp)); // paramT = param - (alpha / (1 - beta1**(t + 1))) * (mT / (vT + epsilon)) varNp = ND.sub(varNp, ND.mul(alpha1, ND.div(m, ND.add(v, espilon)))); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java index 4f1eb25246b..cda32704506 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java @@ -24,6 +24,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -32,8 +33,7 @@ /** Test cases for Ftrl Optimizer */ public class FtrlTest { - private TestSession.Mode tfMode = TestSession.Mode.GRAPH; - int index; + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; public FtrlTest() {} @@ -67,8 +67,6 @@ public void testFtrlWithL1L2L2Shrinkage() { float[] var1Init = {4.0F, 3.0F}; float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.02F}; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; int numSteps = 10; @@ -100,7 +98,7 @@ public void testFtrlWithL1L2L2Shrinkage() { ); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -110,7 +108,7 @@ public void testFtrlWithL1L2L2Shrinkage() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); session.evaluate(var0Init, var0); @@ -133,8 +131,6 @@ public void testFtrlWithL1() { float[] var1Init = {4.0F, 3.0F}; float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.02F}; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; int numSteps = 10; @@ -166,7 +162,7 @@ public void testFtrlWithL1() { ); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -176,7 +172,7 @@ public void testFtrlWithL1() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); session.evaluate(var0Init, var0); @@ -200,8 +196,6 @@ public void testFtrlWithL1L2() { float[] var1Init = {4.0F, 3.0F}; float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.02F}; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; int numSteps = 10; @@ -233,7 +227,7 @@ public void testFtrlWithL1L2() { ); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -243,7 +237,7 @@ public void testFtrlWithL1L2() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); session.evaluate(var0Init, var0); @@ -267,8 +261,6 @@ public void doTestFtrlwithoutRegularization() { float[] var1Init = {0.0F, 0.0F}; float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.02F}; - float epsilon = 1e-8F; - float epsilon1 = 1e-5F; int numSteps = 3; @@ -291,7 +283,7 @@ public void doTestFtrlwithoutRegularization() { Ftrl instance = new Ftrl(tf, learningRate); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); Op ftrlUpdate = instance.applyGradients(gradsAndVars, "FtrlTest"); @@ -300,7 +292,7 @@ public void doTestFtrlwithoutRegularization() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); session.evaluate(var0Init, var0); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java index 3eab6288268..d720460b2f2 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java @@ -28,6 +28,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -95,7 +96,6 @@ public void testBasic() { FloatNdArray grads0Np = NdArrays.vectorOf(grads0Init); FloatNdArray grads1Np = NdArrays.vectorOf(grads1Init); - float epsilon = 1e-6f; float epsilon1 = 1e-3F; try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -114,7 +114,7 @@ public void testBasic() { Nadam instance = new Nadam(tf); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -140,7 +140,7 @@ public void testBasic() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); session.setEpsilon(epsilon1); @@ -156,13 +156,7 @@ public void testBasic() { .run() .get(0) .expect(TFloat32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals(1F, f.getFloat(), epsilon1); - }); + result.data().scalars().forEach(f -> assertEquals(1F, f.getFloat(), epsilon1)); } momentum = 1F; @@ -182,13 +176,7 @@ public void testBasic() { .run() .get(0) .expect(TFloat32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals(momentum, f.getFloat(), epsilon1); - }); + result.data().scalars().forEach(f -> assertEquals(momentum, f.getFloat(), epsilon1)); } mcache = ND.mul(mcache, momentum); FloatNdArray[] resultsNP = nadamUpdateNdArray(var0Np, grads0Np, step, m0, v0, mcache); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java index cabf869536c..078288ed1e7 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java @@ -27,6 +27,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -40,7 +41,7 @@ public class RMSPropTest { final int RMS_T = 2; final int MOM_T = 3; private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; - int index; + Object[][] TestParamValues = { // learningRate, rho (decay), momentum, epsilon, centered {0.05F, 0.9F, 0.0F, 1e-3F, true}, @@ -69,7 +70,7 @@ public void testDense() { int numSteps = 3; - for (int run = 0; run < TestParamValues.length; run++) { + for (Object[] testParamValue : TestParamValues) { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); session.setEpsilon(1e-2f); @@ -77,7 +78,6 @@ public void testDense() { float[] var1Init = {3.0F, 4.0F}; float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.2F}; - final float epsilon1 = 1e-2F; FloatNdArray var0Np = NdArrays.vectorOf(var0Init); FloatNdArray var1Np = NdArrays.vectorOf(var1Init); @@ -96,18 +96,18 @@ public void testDense() { Constant grads1 = tf.constant(grads1Init); // learningRate, rho (decay), momentum, epsilon, centered - float learningRate = (float) (float) TestParamValues[run][0]; - float decay = (float) TestParamValues[run][1]; - float momentum = (float) TestParamValues[run][2]; - float epsilon = (float) TestParamValues[run][3]; - boolean centered = (boolean) TestParamValues[run][4]; + float learningRate = (float) (float) testParamValue[0]; + float decay = (float) testParamValue[1]; + float momentum = (float) testParamValue[2]; + float epsilon = (float) testParamValue[3]; + boolean centered = (boolean) testParamValue[4]; RMSProp instance = new RMSProp(tf, learningRate, decay, momentum, epsilon, centered); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); - gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); - gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + List> gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new GradAndVar<>(grads1.asOutput(), var1.asOutput())); Op update = instance.applyGradients(gradsAndVars, "RMSPropTest"); @@ -115,10 +115,10 @@ public void testDense() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); - /** make sure the variables were initialized properly */ + /* make sure the variables were initialized properly */ session.evaluate(var0Init, var0); session.evaluate(var1Init, var1); @@ -179,13 +179,12 @@ public void testDense() { if (centered) { session.evaluate(mg0Np, mg0); - session.evaluate(mg0Np, mg0); - } - if (momentum > 0.F) { - session.evaluate(mom0Np, mom0); - session.evaluate(mom1Np, mom1); + session.evaluate(mg1Np, mg1); } + if (mom0 != null) session.evaluate(mom0Np, mom0); + if (mom1 != null) session.evaluate(mom1Np, mom1); + /* TODO the values returned from rms slot, do not match what I see in the python test */ session.evaluate(rms0Np, rms0); session.evaluate(rms1Np, rms1); @@ -240,8 +239,7 @@ private FloatNdArray calcRMS(FloatNdArray rmsNp, FloatNdArray gradNp, float deca FloatNdArray squareG = ND.square(gradNp); float oneRHO = 1.0F - decay; FloatNdArray decayG2 = ND.mul(oneRHO, squareG); - FloatNdArray result = ND.add(rmsRho, decayG2); - return result; + return ND.add(rmsRho, decayG2); } private FloatNdArray calcMG(FloatNdArray mgNp, FloatNdArray gradNp, float decay) { @@ -249,8 +247,7 @@ private FloatNdArray calcMG(FloatNdArray mgNp, FloatNdArray gradNp, float decay) FloatNdArray mgRho = ND.mul(mgNp, decay); float oneRHO = 1.0F - decay; FloatNdArray decayG = ND.mul(oneRHO, gradNp); - FloatNdArray result = ND.add(mgRho, decayG); - return result; + return ND.add(mgRho, decayG); } private FloatNdArray calcMom( @@ -265,8 +262,7 @@ private FloatNdArray calcMom( FloatNdArray dividend = ND.mul(lr, gradNp); FloatNdArray divisor = ND.sqrt(ND.add(denomT, epsilon)); FloatNdArray quotient = ND.div(dividend, divisor); - FloatNdArray result = ND.add(moMo, quotient); - return result; + return ND.add(moMo, quotient); } private FloatNdArray calcVar( @@ -275,7 +271,6 @@ private FloatNdArray calcVar( FloatNdArray dividend = ND.mul(lr, gradNp); FloatNdArray divisor = ND.add(ND.sqrt(denomT), epsilon); FloatNdArray quotient = ND.div(dividend, divisor); - FloatNdArray result = ND.sub(varNp, quotient); - return result; + return ND.sub(varNp, quotient); } } diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java index b36851a561e..a8e363b4332 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java +++ b/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java @@ -24,6 +24,7 @@ import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; import java.util.ArrayList; import java.util.List; @@ -70,9 +71,6 @@ public void testBasic() { float[] grads1Init = {0.01F, 0.01F}; float learningRate = 3.0F; - float epsilon = 1e-6F; - float epsilon1 = 1e-2F; - try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); @@ -88,7 +86,7 @@ public void testBasic() { Constant grads1 = tf.constant(grads1Init); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -99,10 +97,10 @@ public void testBasic() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); - /** make sure the variables were initialized properly */ + /* make sure the variables were initialized properly */ session.evaluate(var0Init, var0); session.evaluate(var1Init, var1); @@ -125,9 +123,6 @@ public void testMomentum() { float learningRate = 2.0F; float momentum = 0.9F; - float epsilon = 1e-6F; - float epsilon1 = 1e-2F; - try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); @@ -143,7 +138,7 @@ public void testMomentum() { Constant grads1 = tf.constant(grads1Init); /* build the GradsAnvVars */ - List gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); @@ -159,10 +154,10 @@ public void testMomentum() { session.run(var0Initializer); session.run(var1Initializer); - /** initialize the accumulators */ + /* initialize the accumulators */ session.run(tf.init()); - /** make sure the variables were initialized properly */ + /* make sure the variables were initialized properly */ session.evaluate(var0Init, var0); session.evaluate(var1Init, var1); From e9c3134742e9155e457be157515d67b5c0bb7ac4 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 9 Sep 2020 16:14:20 -0400 Subject: [PATCH 29/55] Added Adamax, Ftrl, and Nadam Optimizers. Added Optimizers enum for easy inclusion of a default optimizer. Cleaned up JavaDoc --- .../framework/optimizers/AdaDelta.java | 113 ++++++- .../framework/optimizers/AdaGrad.java | 97 +++++- .../framework/optimizers/AdaGradDA.java | 174 ++++++++-- .../tensorflow/framework/optimizers/Adam.java | 153 +++++++-- .../framework/optimizers/Adamax.java | 190 +++++++++++ .../framework}/optimizers/Ftrl.java | 219 ++++--------- .../framework/optimizers/GradientDescent.java | 38 ++- .../framework/optimizers/Momentum.java | 106 ++++-- .../framework/optimizers/Nadam.java | 302 ++++++++++++++++++ .../framework/optimizers/Optimizer.java | 164 ++++++---- .../framework/optimizers/Optimizers.java | 41 +++ .../framework/optimizers/RMSProp.java | 164 ++++++++-- 12 files changed, 1420 insertions(+), 341 deletions(-) create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adamax.java rename {tensorflow-keras/src/main/java/org/tensorflow/keras => tensorflow-framework/src/main/java/org/tensorflow/framework}/optimizers/Ftrl.java (55%) create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Nadam.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaDelta.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaDelta.java index b5dc2434d60..1bdeffe4dcb 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaDelta.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaDelta.java @@ -15,7 +15,6 @@ */ package org.tensorflow.framework.optimizers; -import java.util.List; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; @@ -23,15 +22,51 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.family.TType; +import java.util.List; + /** * Optimizer that implements the Adadelta algorithm. - *

- * See the paper. + * + *

Adadelta optimization is a stochastic gradient descent method that is based on adaptive + * learning rate per dimension to address two drawbacks: + * + *

+ *

  • the continual decay of learning rates throughout training + *
  • the need for a manually selected global learning rate + * + *

    + * + *

    Adadelta is a more robust extension of Adagrad that adapts learning rates based on a + * moving window of gradient updates, instead of accumulating all past gradients. This way, + * Adadelta continues learning even when many updates have been done. Compared to Adagrad, in + * the original version of Adadelta you don't have to set an initial learning rate. In this + * version, initial learning rate can be set, as in most other optimizers. + * + *

    + * + *

    According to section 4.3 ("Effective Learning rates"), near the end of training step sizes + * converge to 1 which is effectively a high learning rate which would cause divergence. This + * occurs only near the end of the training as gradients and step sizes are small, and the + * epsilon constant in the numerator and denominator dominate past gradients and parameter + * updates which converge the learning rate to 1. + * + *

    + * + *

    According to section 4.4("Speech Data"),where a large neural network with 4 hidden layers + * was trained on a corpus of US English data, ADADELTA was used with 100 network replicas.The + * epsilon used is 1e-6 with rho=0.95 which converged faster than ADAGRAD, by the following + * construction: new AdaDelta(graph, 1.0f, 0.95f, 1e-6f); + * + * @see Zeiler, M., 2012 ADADELTA: An Adaptive Learning + * Rate Method. */ public class AdaDelta extends Optimizer { public static final String ACCUMULATOR = "accum"; public static final String ACCUMULATOR_UPDATE = "accum_update"; + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float RHO_DEFAULT = 0.95f; + public static final float EPSILON_DEFAULT = 1e-7f; private final float learningRate; @@ -39,10 +74,28 @@ public class AdaDelta extends Optimizer { private final float epsilon; + public AdaDelta(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates an AdaDelta Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + */ public AdaDelta(Graph graph, float learningRate) { - this(graph, learningRate, 0.95f, 1e-8f); + this(graph, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); } + /** + * Creates an AdaDelta Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + * @param rho The decay factor + * @param epsilon A constant epsilon used to better conditioning the grad update + */ public AdaDelta(Graph graph, float learningRate, float rho, float epsilon) { super(graph); this.learningRate = learningRate; @@ -50,10 +103,26 @@ public AdaDelta(Graph graph, float learningRate, float rho, float epsilon) { this.epsilon = epsilon; } + /** + * Creates an AdaDelta Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name for this Optimizer (defaults to 'Adadelta') + * @param learningRate the learning rate + */ public AdaDelta(Graph graph, String name, float learningRate) { this(graph, name, learningRate, 0.95f, 1e-8f); } + /** + * Creates an AdaDelta Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name for this Optimizer (defaults to 'Adadelta') + * @param learningRate the learning rate + * @param rho The decay factor + * @param epsilon A constant epsilon used to better conditioning the grad update + */ public AdaDelta(Graph graph, String name, float learningRate, float rho, float epsilon) { super(graph, name); this.learningRate = learningRate; @@ -61,6 +130,7 @@ public AdaDelta(Graph graph, String name, float learningRate, float rho, float e this.epsilon = epsilon; } + /** {@inheritDoc} */ @Override protected void createSlots(List> variables) { for (Output v : variables) { @@ -68,35 +138,50 @@ protected void createSlots(List> variables) { } } + /** + * Creates an AdaDelta Slot + * + * @param v the variable to install in the slot + * @param the datatype of the variable. + */ private void createAdaDeltaSlot(Output v) { - Operand accumulatorInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand accumulatorInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), ACCUMULATOR, accumulatorInitializer); - Operand updateInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand updateInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), ACCUMULATOR_UPDATE, updateInitializer); } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { Variable accumSlot = getSlot(variable, ACCUMULATOR).get(); Variable accumUpdateSlot = getSlot(variable, ACCUMULATOR_UPDATE).get(); - return tf.train.applyAdadelta(variable, accumSlot, accumUpdateSlot, + return tf.train.applyAdadelta( + variable, + accumSlot, + accumUpdateSlot, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), tf.dtypes.cast(tf.constant(rho), gradient.dataType()), tf.dtypes.cast(tf.constant(epsilon), gradient.dataType()), gradient); } + /** {@inheritDoc} */ @Override public String toString() { - return "AdaDelta{" + - "learningRate=" + learningRate + - ", rho=" + rho + - ", epsilon=" + epsilon + - '}'; + return "AdaDelta{" + + "learningRate=" + + learningRate + + ", rho=" + + rho + + ", epsilon=" + + epsilon + + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "Adadelta"; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGrad.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGrad.java index 4dfabb21357..6855be30759 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGrad.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGrad.java @@ -15,7 +15,6 @@ */ package org.tensorflow.framework.optimizers; -import java.util.List; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; @@ -23,40 +22,102 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.family.TType; +import java.util.List; + /** * Optimizer that implements the Adagrad algorithm. + * + *

    Adagrad is an optimizer with parameter-specific learning rates, which are adapted relative to + * how frequently a parameter gets updated during training. The more updates a parameter receives, + * the smaller the updates. + * *

    - * See the paper or this intro. + * + * @see Duchi, J, et al., 2011, + * Adaptive Subgradient Methods for Online Learning and Stochastic Optimization + * @see Duchi, J, et al., + * 2013, Proximal and First-Order Methods for Convex Optimization, Introduction Section 1. */ public class AdaGrad extends Optimizer { public static final String ACCUMULATOR = "accumulator"; + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float INITIAL_ACCUMULATOR_DEFAULT = 0.01f; private final float learningRate; private final float initialAccumulatorValue; + /** + * Creates an AdaGrad Optimizer + * + * @param graph the TensorFlow Graph + */ + public AdaGrad(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT, INITIAL_ACCUMULATOR_DEFAULT); + } + + /** + * Creates an AdaGrad Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + */ public AdaGrad(Graph graph, float learningRate) { - this(graph, learningRate, 0.01f); + this(graph, learningRate, INITIAL_ACCUMULATOR_DEFAULT); } + /** + * Creates an AdaGrad Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + * @param initialAccumulatorValue Starting value for the accumulators, must be non-negative. + * @throws java.lang.IllegalArgumentException if initialAccumulatorValue is negative + */ public AdaGrad(Graph graph, float learningRate, float initialAccumulatorValue) { super(graph); + if (initialAccumulatorValue < 0F) { + throw new IllegalArgumentException( + String.format( + "initialAccumulatorValue must be non-negative: %f", initialAccumulatorValue)); + } this.learningRate = learningRate; this.initialAccumulatorValue = initialAccumulatorValue; } + /** + * Creates an AdaGrad Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name for this Optimizer (defaults to 'Adagrad') + * @param learningRate the learning rate + */ public AdaGrad(Graph graph, String name, float learningRate) { this(graph, name, learningRate, 0.01f); } + /** + * Creates an AdaGrad Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name for this Optimizer (defaults to 'Adagrad') + * @param learningRate the learning rate + * @param initialAccumulatorValue Starting value for the accumulators, must be non-negative. + * @throws java.lang.IllegalArgumentException if initialAccumulatorValue is negative + */ public AdaGrad(Graph graph, String name, float learningRate, float initialAccumulatorValue) { super(graph, name); + if (initialAccumulatorValue < 0F) { + throw new IllegalArgumentException( + String.format( + "initialAccumulatorValue must be non-negative: %f", initialAccumulatorValue)); + } this.learningRate = learningRate; this.initialAccumulatorValue = initialAccumulatorValue; } + /** {@inheritDoc} */ @Override protected void createSlots(List> variables) { for (Output v : variables) { @@ -64,28 +125,38 @@ protected void createSlots(List> variables) { } } + /** + * Creates an AdaGrad Slot + * + * @param v the variable to install in the slot + * @param the datatype of the variable. + */ private void createAdaGradSlot(Output v) { - Operand initializer = tf.fill(tf.shape(v), - tf.dtypes.cast(tf.constant(initialAccumulatorValue), v.dataType())); + Operand initializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(initialAccumulatorValue), v.dataType())); createSlot(v.asOutput(), ACCUMULATOR, initializer); } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { Variable slot = getSlot(variable, ACCUMULATOR).get(); - return tf.train - .applyAdagrad(variable, slot, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), - gradient); + return tf.train.applyAdagrad( + variable, slot, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), gradient); } + /** {@inheritDoc} */ @Override public String toString() { - return "AdaGrad{" + - "learningRate=" + learningRate + - ", initialAccumulatorValue=" + initialAccumulatorValue + - '}'; + return "AdaGrad{" + + "learningRate=" + + learningRate + + ", initialAccumulatorValue=" + + initialAccumulatorValue + + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "Adagrad"; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGradDA.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGradDA.java index 0544309dc7f..e74a1d85359 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGradDA.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/AdaGradDA.java @@ -15,64 +15,175 @@ */ package org.tensorflow.framework.optimizers; -import java.util.List; -import java.util.Optional; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; +import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.core.Assign; import org.tensorflow.op.core.Variable; -import org.tensorflow.ndarray.Shape; import org.tensorflow.types.TInt64; import org.tensorflow.types.family.TType; +import java.util.List; +import java.util.Optional; + /** * Optimizer that implements the Adagrad Dual-Averaging algorithm. + * + *

    This optimizer takes care of regularization of unseen features in a mini batch by updating + * them when they are seen with a closed form update rule that is equivalent to having updated them + * on every mini-batch. + * + *

    AdagradDA is typically used when there is a need for large sparsity in the trained model. This + * optimizer only guarantees sparsity for linear models. Be careful when using AdagradDA for deep + * networks as it will require careful initialization of the gradient accumulators for it to train. + * *

    - * See the paper. + * + * @see Duchi, J, et al., 2011, + * Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. */ public class AdaGradDA extends Optimizer { public static final String ACCUMULATOR = "gradient_accumulator"; public static final String SQUARED_ACCUMULATOR = "gradient_squared_accumulator"; + public static final float LEARNING_RATE_DEFAULT = 0.001F; + public static final float INITIAL_ACCUMULATOR_DEFAULT = 0.1f; + public static final float L1_STRENGTH_DEFAULT = 0.0F; + public static final float L2_STRENGTH_DEFAULT = 0.0F; + private final float learningRate; private final float initialAccumulatorValue; private final float l1Strength; private final float l2Strength; private Variable globalStep; + /** + * Creates an AdaGradDA Optimizer + * + * @param graph the TensorFlow Graph + */ + public AdaGradDA(Graph graph) { + this( + graph, + LEARNING_RATE_DEFAULT, + INITIAL_ACCUMULATOR_DEFAULT, + L1_STRENGTH_DEFAULT, + L2_STRENGTH_DEFAULT); + } + + /** + * Creates an AdaGradDA Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + */ public AdaGradDA(Graph graph, float learningRate) { - this(graph, learningRate, 0.1f, 0.0f, 0.0f); + this( + graph, learningRate, INITIAL_ACCUMULATOR_DEFAULT, L1_STRENGTH_DEFAULT, L2_STRENGTH_DEFAULT); } - public AdaGradDA(Graph graph, float learningRate, float initialAccumulatorValue, float l1Strength, + /** + * Creates an AdaGradDA Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + * @param initialAccumulatorValue Starting value for the accumulators, must be greater than zero. + * @param l1Strength l1 regularization strength, must be greater than or equal to zero. + * @param l2Strength l2 regularization strength, must be greater than or equal to zero. + * @throws java.lang.IllegalArgumentException if initialAccumulatorValue is not greater than zero, + * or l1Strength or l2Strength is less than zero + */ + public AdaGradDA( + Graph graph, + float learningRate, + float initialAccumulatorValue, + float l1Strength, float l2Strength) { super(graph); + if (initialAccumulatorValue <= 0F) { + throw new IllegalArgumentException( + String.format( + "initialAccumulatorValue must be greater than zero: %f", initialAccumulatorValue)); + } + if (l1Strength < 0F) { + throw new IllegalArgumentException( + String.format("l1Strength must not be negative: %f", l1Strength)); + } + if (l2Strength < 0F) { + throw new IllegalArgumentException( + String.format("l2Strength must not be negative: %f", l2Strength)); + } this.learningRate = learningRate; this.initialAccumulatorValue = initialAccumulatorValue; this.l1Strength = l1Strength; this.l2Strength = l2Strength; } + /** + * Creates an AdaGradDA Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name for this Optimizer (defaults to 'adagrad-da') + * @param learningRate the learning rate + */ public AdaGradDA(Graph graph, String name, float learningRate) { - this(graph, name, learningRate, 0.1f, 0.0f, 0.0f); + this( + graph, + name, + learningRate, + INITIAL_ACCUMULATOR_DEFAULT, + L1_STRENGTH_DEFAULT, + L2_STRENGTH_DEFAULT); } - public AdaGradDA(Graph graph, String name, float learningRate, float initialAccumulatorValue, float l1Strength, + /** + * Creates an AdaGradDA Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name for this Optimizer (defaults to 'adagrad-da') + * @param learningRate the learning rate + * @param initialAccumulatorValue Starting value for the accumulators, must be positive + * @param l1Strength l1 regularization strength, must be greater than or equal to zero. + * @param l2Strength l2 regularization strength, must be greater than or equal to zero. + * @throws java.lang.IllegalArgumentException if initialAccumulatorValue is not greater than zero, + * or * l1Strength or l2Strength is less than zero + */ + public AdaGradDA( + Graph graph, + String name, + float learningRate, + float initialAccumulatorValue, + float l1Strength, float l2Strength) { super(graph, name); + if (initialAccumulatorValue <= 0F) { + throw new IllegalArgumentException( + String.format( + "initialAccumulatorValue must be greater than zero: %f", initialAccumulatorValue)); + } + if (l1Strength < 0F) { + throw new IllegalArgumentException( + String.format("l1Strength must not be negative: %f", l1Strength)); + } + if (l2Strength < 0F) { + throw new IllegalArgumentException( + String.format("l2Strength must not be negative: %f", l2Strength)); + } this.learningRate = learningRate; this.initialAccumulatorValue = initialAccumulatorValue; this.l1Strength = l1Strength; this.l2Strength = l2Strength; } + /** {@inheritDoc} */ @Override protected Optional prepare(String name) { return Optional.of(tf.assignAdd(globalStep, tf.constant(1L))); } + /** {@inheritDoc} */ @Override protected void createSlots(List> variables) { for (Output v : variables) { @@ -83,20 +194,30 @@ protected void createSlots(List> variables) { graph.addInitializer(globalStepInitializer); } + /** + * Creates an AdaGradDA Slot + * + * @param v the variable to install in the slot + * @param the datatype of the variable. + */ private void createAdaGradDASlot(Output v) { - Operand initializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand initializer = tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), ACCUMULATOR, initializer); - Operand sqInitializer = tf.fill(tf.shape(v), - tf.dtypes.cast(tf.constant(initialAccumulatorValue), v.dataType())); + Operand sqInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(initialAccumulatorValue), v.dataType())); createSlot(v.asOutput(), SQUARED_ACCUMULATOR, sqInitializer); } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { Variable gradSlot = getSlot(variable, ACCUMULATOR).get(); Variable gradSquaredSlot = getSlot(variable, SQUARED_ACCUMULATOR).get(); - return tf.train.applyAdagradDa(variable, gradSlot, gradSquaredSlot, gradient, + return tf.train.applyAdagradDa( + variable, + gradSlot, + gradSquaredSlot, + gradient, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), tf.dtypes.cast(tf.constant(l1Strength), gradient.dataType()), tf.dtypes.cast(tf.constant(l2Strength), gradient.dataType()), @@ -105,11 +226,11 @@ protected Op applyDense(Output gradient, Output variable /** * Gathers up the update operations into a single op that can be used as a run target. - *

    - * Adds the global step update to the end of the updates list. + * + *

    Adds the global step update to the end of the updates list. * * @param updateOperations The update operations. - * @param name The name of the run target. + * @param name The name of the run target. * @return A NoOp with a control dependency on each update operation. */ @Override @@ -118,17 +239,24 @@ protected Op finish(List updateOperations, String name) { return super.finish(updateOperations, name); } + /** {@inheritDoc} */ @Override public String toString() { - return "AdaGradDA{" + - "globalStep=" + globalStep + - ", learningRate=" + learningRate + - ", initialAccumulatorValue=" + initialAccumulatorValue + - ", l1Strength=" + l1Strength + - ", l2Strength=" + l2Strength + - '}'; + return "AdaGradDA{" + + "globalStep=" + + globalStep + + ", learningRate=" + + learningRate + + ", initialAccumulatorValue=" + + initialAccumulatorValue + + ", l1Strength=" + + l1Strength + + ", l2Strength=" + + l2Strength + + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "adagrad-da"; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adam.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adam.java index 11ab4be6b64..8f620678781 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adam.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adam.java @@ -15,11 +15,10 @@ */ package org.tensorflow.framework.optimizers; -import java.util.List; -import java.util.Optional; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; +import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Scope; import org.tensorflow.op.annotation.Endpoint; @@ -27,14 +26,24 @@ import org.tensorflow.op.core.Assign; import org.tensorflow.op.core.Constant; import org.tensorflow.op.core.Variable; -import org.tensorflow.ndarray.Shape; import org.tensorflow.types.TFloat32; import org.tensorflow.types.family.TType; +import java.util.List; +import java.util.Optional; + /** * Optimizer that implements the Adam algorithm. - *

    - * See the paper. + * + *

    Adam optimization is a stochastic gradient descent method that is based on adaptive estimation + * of first-order and second-order moments. + * + *

    According to Kingma et al., 2014, the method is "computationally efficient, has little memory + * requirement, invariant to diagonal rescaling of gradients, and is well suited for problems that + * are large in terms of data/parameters". + * + *

    @see Kingma et al., 2014, Adam: A Method for + * Stochastic Optimization. */ @Operator public class Adam extends Optimizer { @@ -42,6 +51,11 @@ public class Adam extends Optimizer { public static final String FIRST_MOMENT = "m"; public static final String SECOND_MOMENT = "v"; + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float EPSILON_DEFAULT = 1e-8f; + public static final float BETA_ONE_DEFAULT = 0.9f; + public static final float BETA_TWO_DEFAULT = 0.999f; + private final float learningRate; private final float betaOne; @@ -57,10 +71,36 @@ public class Adam extends Optimizer { private Variable betaOnePower; private Variable betaTwoPower; + /** + * Creates an Adam optimizer + * + * @param graph the TensorFlow graph + */ + public Adam(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates an Adam optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate + */ public Adam(Graph graph, float learningRate) { - this(graph, learningRate, 0.9f, 0.999f, 1e-8f); + this(graph, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); } + /** + * Creates an Adam optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-8. + */ public Adam(Graph graph, float learningRate, float betaOne, float betaTwo, float epsilon) { super(graph); this.learningRate = learningRate; @@ -69,11 +109,31 @@ public Adam(Graph graph, float learningRate, float betaOne, float betaTwo, float this.epsilon = epsilon; } + /** + * Creates an Adam optimizer + * + * @param graph the TensorFlow graph + * @param name the Optimizer name, defaults to "Adam" + * @param learningRate the learning rate + */ public Adam(Graph graph, String name, float learningRate) { - this(graph, name, learningRate, 0.9f, 0.999f, 1e-8f); + this(graph, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); } - public Adam(Graph graph, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { + /** + * Creates an Adam optimizer + * + * @param graph the TensorFlow graph + * @param name the Optimizer name, defaults to "Adam" + * @param learningRate the learning rate + * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. Defaults to 1e-8. + */ + public Adam( + Graph graph, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { super(graph, name); this.learningRate = learningRate; this.betaOne = betaOne; @@ -81,9 +141,30 @@ public Adam(Graph graph, String name, float learningRate, float betaOne, float b this.epsilon = epsilon; } + /** + * Creates the Operation that minimizes the loss + * + * @param scope the TensorFlow scope + * @param loss the loss to minimize + * @param learningRate the learning rate + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the 2nd moment estimates. + * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the + * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm + * 1 of the paper. + * @param options Optional Optimizer attributes + * @param the data type for the loss + * @return the Operation that minimizes the loss + * @throws java.lang.IllegalArgumentException if scope does not represent a Graph + */ @Endpoint(name = "adam_minimize") - public static Op createAdamMinimize(Scope scope, Operand loss, - float learningRate, float betaOne, float betaTwo, float epsilon, + public static Op createAdamMinimize( + Scope scope, + Operand loss, + float learningRate, + float betaOne, + float betaTwo, + float epsilon, Optimizer.Options... options) { if (!(scope.env() instanceof Graph)) { throw new IllegalArgumentException("Optimizers are only supported on Graphs"); @@ -102,21 +183,21 @@ public static Op createAdamMinimize(Scope scope, Operand lo } } + /** {@inheritDoc} */ @Override protected void createSlots(List> variables) { for (Output v : variables) { createAdamSlot(v.asOutput()); } betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); - Assign betaOnePowerInit = tf - .assign(betaOnePower, tf.constant(betaOne)); + Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); graph.addInitializer(betaOnePowerInit); betaTwoPower = tf.withName("beta2_power").variable(Shape.scalar(), TFloat32.DTYPE); - Assign betaTwoPowerInit = tf - .assign(betaTwoPower, tf.constant(betaTwo)); + Assign betaTwoPowerInit = tf.assign(betaTwoPower, tf.constant(betaTwo)); graph.addInitializer(betaTwoPowerInit); } + /** {@inheritDoc} */ @Override protected Optional prepare(String scopeName) { betaOneConst = tf.constant(betaOne); @@ -126,20 +207,30 @@ protected Optional prepare(String scopeName) { return Optional.empty(); } + /** + * Creates an Adam Slot + * + * @param v the variable to install in the slot + * @param the datatype of the variable. + */ private void createAdamSlot(Output v) { - Operand firstMomentInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand firstMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); - Operand secondMomentInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand secondMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { Variable firstMomentSlot = getSlot(variable, FIRST_MOMENT).get(); Variable secondMomentSlot = getSlot(variable, SECOND_MOMENT).get(); - return tf.train.applyAdam(variable, firstMomentSlot, secondMomentSlot, + return tf.train.applyAdam( + variable, + firstMomentSlot, + secondMomentSlot, tf.dtypes.cast(betaOnePower, gradient.dataType()), tf.dtypes.cast(betaTwoPower, gradient.dataType()), tf.dtypes.cast(learningRateConst, gradient.dataType()), @@ -151,11 +242,11 @@ protected Op applyDense(Output gradient, Output variable /** * Gathers up the update operations into a single op that can be used as a run target. - *

    - * Adds the betaOne and betaTwo updates to the end of the updates list. + * + *

    Adds the betaOne and betaTwo updates to the end of the updates list. * * @param updateOperations The update operations. - * @param name The name of the run target. + * @param name The name of the run target. * @return A NoOp with a control dependency on each update operation. */ @Override @@ -165,16 +256,22 @@ protected Op finish(List updateOperations, String name) { return super.finish(updateOperations, name); } + /** {@inheritDoc} */ @Override public String toString() { - return "Adam{" + - "learningRate=" + learningRate + - ", betaOne=" + betaOne + - ", betaTwo=" + betaTwo + - ", epsilon=" + epsilon + - '}'; + return "Adam{" + + "learningRate=" + + learningRate + + ", betaOne=" + + betaOne + + ", betaTwo=" + + betaTwo + + ", epsilon=" + + epsilon + + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "Adam"; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adamax.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adamax.java new file mode 100644 index 00000000000..335d83cedfa --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Adamax.java @@ -0,0 +1,190 @@ +package org.tensorflow.framework.optimizers; + +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.op.train.ApplyAdaMax; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; + +import java.util.List; +import java.util.Optional; + +/** + * Optimizer that implements the Adamax algorithm. + * + *

    It is a variant of Adam based on the infinity norm. Default parameters follow those provided + * in the paper. Adamax is sometimes superior to adam, specially in models with embeddings. + * + * @see Kingma et al., 2014 + */ +public class Adamax extends Optimizer { + + public static final String FIRST_MOMENT = "m"; + public static final String SECOND_MOMENT = "v"; + + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float EPSILON_DEFAULT = 1e-07f; + public static final float BETA_ONE_DEFAULT = 0.9f; + public static final float BETA_TWO_DEFAULT = 0.999f; + + private float learningRate; + private final float betaOne; + private final float betaTwo; + private final float epsilon; + + private Constant learningRateConst; + private Constant epsilonConst; + private Constant betaOneConst; + private Constant betaTwoConst; + private Variable betaOnePower; + + /** + * Creates an Optimizer that implements the Adamax algorithm. + * + * @param graph the TensorFlow graph + */ + public Adamax(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates an Optimizer that implements the Adamax algorithm. + * + * @param graph the TensorFlow graph + * @param name name for the operations Created when applying gradients. Defaults to "Adamax". + */ + public Adamax(Graph graph, String name) { + this(graph, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates an Optimizer that implements the Adamax algorithm. + * + * @param graph the TensorFlow graph + * @param learningRate The learning rate. + */ + public Adamax(Graph graph, float learningRate) { + this(graph, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates an Optimizer that implements the Adamax algorithm. + * + * @param graph the TensorFlow graph + * @param name name for the operations Created when applying gradients. Defaults to "Adamax". + * @param learningRate The learning rate. + */ + public Adamax(Graph graph, String name, float learningRate) { + this(graph, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates an Optimizer that implements the Adamax algorithm. + * + * @param graph the TensorFlow graph + * @param learningRate The learning rate. + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. + * @param epsilon A small constant for numerical stability. + */ + public Adamax(Graph graph, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(graph); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + } + + /** + * Creates an Optimizer that implements the Adamax algorithm. + * + * @param graph the TensorFlow graph + * @param name name for the operations Created when applying gradients. Defaults to "Adamax". + * @param learningRate The learning rate. + * @param betaOne The exponential decay rate for the 1st moment estimates. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. + * @param epsilon A small constant for numerical stability. + */ + public Adamax( + Graph graph, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(graph, name); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + } + + /** {@inheritDoc} */ + @Override + protected Optional prepare(String scopeName) { + betaOneConst = tf.constant(betaOne); + betaTwoConst = tf.constant(betaTwo); + learningRateConst = tf.constant(learningRate); + epsilonConst = tf.constant(epsilon); + + return Optional.empty(); + } + + /** {@inheritDoc} */ + @Override + protected void createSlots(List> variables) { + for (Output v : variables) { + createAdamaxSlot(v.asOutput()); + } + betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); + Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); + ((Graph) tf.scope().env()).addInitializer(betaOnePowerInit); + } + + /** + * Creates the first and second moment slots + * + * @param v the variable + * @param the datatype of the variable + */ + private void createAdamaxSlot(Output v) { + Operand firstMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); + Operand secondMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); + } + + /** {@inheritDoc} */ + @Override + protected Op applyDense(Output gradient, Output variable) { + Variable firstMomentSlot = getSlot(variable, FIRST_MOMENT).get(); + Variable secondMomentSlot = getSlot(variable, SECOND_MOMENT).get(); + return ApplyAdaMax.create( + this.tf.scope(), + variable, + firstMomentSlot, + secondMomentSlot, + tf.dtypes.cast(betaOnePower, gradient.dataType()), + tf.dtypes.cast(learningRateConst, gradient.dataType()), + tf.dtypes.cast(betaOneConst, gradient.dataType()), + tf.dtypes.cast(betaTwoConst, gradient.dataType()), + tf.dtypes.cast(epsilonConst, gradient.dataType()), + gradient); + } + + /** {@inheritDoc} */ + @Override + protected Op finish(List updateOperations, String name) { + updateOperations.add(tf.assign(betaOnePower, tf.math.mul(betaOnePower, betaOneConst))); + return super.finish(updateOperations, name); + } + + /** {@inheritDoc} */ + @Override + public String getOptimizerName() { + return "Adamax"; + } +} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Ftrl.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Ftrl.java similarity index 55% rename from tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Ftrl.java rename to tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Ftrl.java index db73f60c77e..13f68e4bbef 100644 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Ftrl.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Ftrl.java @@ -1,59 +1,35 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. +package org.tensorflow.framework.optimizers; -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; -import org.tensorflow.Session; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.op.core.Assign; -import org.tensorflow.op.core.Placeholder; import org.tensorflow.op.core.Variable; import org.tensorflow.op.train.ApplyFtrl; -import org.tensorflow.types.TFloat32; import org.tensorflow.types.family.TType; -/** Ftrl (Follow the Regularized Leader) Optimizer that implements the FTRL algorithm. */ -public class Ftrl extends org.tensorflow.framework.optimizers.Optimizer - implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String LEARNING_RATE_POWER_KEY = "learning_rate_power"; - public static final String INITIAL_ACCUM_VALUE_KEY = "initial_accumulator_value"; - public static final String L1STRENGTH_KEY = "l1_regularization_strength"; - public static final String L2STRENGTH_KEY = "l2_regularization_strength"; - public static final String L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY = - "l2_shrinkage_regularization_strength"; +import java.util.List; - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float LEARNING_RATE_POWER_DEFAULT = -0.5F; - public static final float INITIAL_ACCUM_VALUE_DEFAULT = 0.1F; - public static final float L1STRENGTH_DEFAULT = 0.0F; - public static final float L2STRENGTH_DEFAULT = 0.0F; - public static final float L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT = 0.0F; +/** + * Optimizer that implements the FTRL algorithm. + * + * @see McMahan, et + * al., 2013, Algorithm 1 + *

    This version has support for both online L2 (the L2 penalty given in the paper above) and + * shrinkage-type L2 (which is the addition of an L2 penalty to the loss function). + */ +public class Ftrl extends Optimizer { public static final String ACCUMULATOR = "gradient_accumulator"; public static final String LINEAR_ACCUMULATOR = "linear_accumulator"; - private final String name; + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float LEARNING_RATE_POWER_DEFAULT = -0.5f; + public static final float INITIAL_ACCUMULATOR_VALUE_DEFAULT = 0.1f; + public static final float L1STRENGTH_DEFAULT = 0.0f; + public static final float L2STRENGTH_DEFAULT = 0.0f; + public static final float L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT = 0.0f; + private float learningRate; private final float learningRatePower; private final float initialAccumulatorValue; @@ -61,84 +37,80 @@ public class Ftrl extends org.tensorflow.framework.optimizers.Optimizer private final float l2RegularizationStrength; private final float l2ShrinkageRegularizationStrength; - private Map config = new HashMap<>(); - - private boolean useLocking = true; - /** - * Create a Ftrl Optimizer + * Creates a Ftrl Optimizer * - * @param tf the TensorFlow Ops + * @param graph the TensorFlow Graph */ - public Ftrl(Ops tf) { + public Ftrl(Graph graph) { this( - tf, + graph, LEARNING_RATE_DEFAULT, LEARNING_RATE_POWER_DEFAULT, - INITIAL_ACCUM_VALUE_DEFAULT, + INITIAL_ACCUMULATOR_VALUE_DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT, L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); } /** - * Create a Ftrl Optimizer + * Creates a Ftrl Optimizer * - * @param tf the TensorFlow Ops - * @param name the Optmizer name + * @param graph the TensorFlow Graph + * @param name the name of this Optimizer */ - public Ftrl(Ops tf, String name) { + public Ftrl(Graph graph, String name) { this( - tf, + graph, name, LEARNING_RATE_DEFAULT, LEARNING_RATE_POWER_DEFAULT, - INITIAL_ACCUM_VALUE_DEFAULT, + INITIAL_ACCUMULATOR_VALUE_DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT, L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); } /** - * Create a Ftrl Optimizer + * Creates a Ftrl Optimizer * - * @param tf the TensorFlow Ops + * @param graph the TensorFlow Graph * @param learningRate the learning rate */ - public Ftrl(Ops tf, float learningRate) { + public Ftrl(Graph graph, float learningRate) { this( - tf, + graph, learningRate, LEARNING_RATE_POWER_DEFAULT, - INITIAL_ACCUM_VALUE_DEFAULT, + INITIAL_ACCUMULATOR_VALUE_DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT, L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); } /** - * Create a Ftrl Optimizer + * Creates a Ftrl Optimizer * - * @param tf the TensorFlow Ops - * @param name the Optmizer name + * @param graph the TensorFlow Graph + * @param name the name of this Optimizer * @param learningRate the learning rate */ - public Ftrl(Ops tf, String name, float learningRate) { + public Ftrl(Graph graph, String name, float learningRate) { this( - tf, + graph, name, learningRate, LEARNING_RATE_POWER_DEFAULT, - INITIAL_ACCUM_VALUE_DEFAULT, + INITIAL_ACCUMULATOR_VALUE_DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT, L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); } /** - * Create a Ftrl Optimizer + * Creates a Ftrl Optimizer * - * @param tf the TensorFlow Ops + * @param graph the TensorFlow Graph * @param learningRate the learning rate * @param learningRatePower Controls how the learning rate decreases during training. Use zero for * a fixed learning rate. @@ -149,17 +121,19 @@ public Ftrl(Ops tf, String name, float learningRate) { * @param l2ShrinkageRegularizationStrength This differs from L2 above in that the L2 above is a * stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. must be greater * than or equal to zero. + * @throws java.lang.IllegalArgumentException if the initialAccumulatorValue, + * l1RegularizationStrength, l2RegularizationStrength, or l2ShrinkageRegularizationStrength + * are less than 0.0, or learningRatePower is greater than 0.0. */ public Ftrl( - Ops tf, + Graph graph, float learningRate, float learningRatePower, float initialAccumulatorValue, float l1Strength, float l2Strength, float l2ShrinkageRegularizationStrength) { - super(assertGraph(tf)); - this.name = getOptimizerName(); + super(graph); this.learningRate = learningRate; this.learningRatePower = learningRatePower; this.initialAccumulatorValue = initialAccumulatorValue; @@ -167,14 +141,13 @@ public Ftrl( this.l2RegularizationStrength = l2Strength; this.l2ShrinkageRegularizationStrength = l2ShrinkageRegularizationStrength; validateParams(); - initConfig(); } /** - * Create a Ftrl Optimizer + * Creates a Ftrl Optimizer * - * @param tf the TensorFlow Ops - * @param name the name of this Ftrl Optimizer + * @param graph the TensorFlow Graph + * @param name the name of this Optimizer * @param learningRate the learning rate * @param learningRatePower Controls how the learning rate decreases during training. Use zero for * a fixed learning rate. @@ -185,9 +158,12 @@ public Ftrl( * @param l2ShrinkageRegularizationStrength This differs from L2 above in that the L2 above is a * stabilization penalty, whereas this L2 shrinkage is a magnitude penalty. must be greater * than or equal to zero. + * @throws java.lang.IllegalArgumentException if the initialAccumulatorValue, + * l1RegularizationStrength, l2RegularizationStrength, or l2ShrinkageRegularizationStrength + * are less than 0.0, or learningRatePower is greater than 0.0. */ public Ftrl( - Ops tf, + Graph graph, String name, float learningRate, float learningRatePower, @@ -195,8 +171,7 @@ public Ftrl( float l1Strength, float l2Strength, float l2ShrinkageRegularizationStrength) { - super(assertGraph(tf), name); - this.name = name; + super(graph, name); this.learningRate = learningRate; this.learningRatePower = learningRatePower; this.initialAccumulatorValue = initialAccumulatorValue; @@ -204,67 +179,9 @@ public Ftrl( this.l2RegularizationStrength = l2Strength; this.l2ShrinkageRegularizationStrength = l2ShrinkageRegularizationStrength; validateParams(); - initConfig(); - } - - /** - * Create a Ftrl Optmizer - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize - * @return a new Frtl Optimizer - */ - public static Ftrl create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float learningRatePower = - (float) config.getOrDefault(LEARNING_RATE_POWER_KEY, LEARNING_RATE_POWER_DEFAULT); - float initialAccumulatorValue = - (float) config.getOrDefault(INITIAL_ACCUM_VALUE_KEY, INITIAL_ACCUM_VALUE_DEFAULT); - float l1RegularizationStrength = - (float) config.getOrDefault(L1STRENGTH_KEY, L1STRENGTH_DEFAULT); - float l2RegularizationStrength = - (float) config.getOrDefault(L2STRENGTH_KEY, L2STRENGTH_DEFAULT); - float l2ShrinkageRegularizationStrength = - (float) - config.getOrDefault( - L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY, - L2_SHRINKAGE_REGULARIZATION_STRENGTH_DEFAULT); - - if (name == null) { - return new Ftrl( - tf, - learningRate, - learningRatePower, - initialAccumulatorValue, - l1RegularizationStrength, - l2RegularizationStrength, - l2ShrinkageRegularizationStrength); - } else { - return new Ftrl( - tf, - name, - learningRate, - learningRatePower, - initialAccumulatorValue, - l1RegularizationStrength, - l2RegularizationStrength, - l2ShrinkageRegularizationStrength); - } } - /** Initialize the Config object from the current settings */ - protected void initConfig() { - config.put(NAME_KEY, this.name); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(LEARNING_RATE_POWER_KEY, learningRatePower); - config.put(INITIAL_ACCUM_VALUE_KEY, initialAccumulatorValue); - config.put(L1STRENGTH_KEY, l1RegularizationStrength); - config.put(L2STRENGTH_KEY, l2RegularizationStrength); - config.put(L2_SHRINKAGE_REGULARIZATION_STRENGTH_KEY, l2ShrinkageRegularizationStrength); - } - - /** Validate all the settings of the Frtl Optmizer */ + /** Validates all the settings of the Frtl Optmizer */ private void validateParams() { if (this.initialAccumulatorValue < 0.0F) { throw new IllegalArgumentException( @@ -306,7 +223,7 @@ protected void createSlots(List> variables) { } /** - * Create a slot variables for the accumulators + * Creates a slot variables for the accumulators * * @param v the variable * @param the data type of the variable @@ -325,7 +242,7 @@ private void createFtrlSlot(Output v) { protected Op applyDense(Output gradient, Output variable) { Variable accumSlot = getSlot(variable, ACCUMULATOR).get(); Variable linearSlot = getSlot(variable, LINEAR_ACCUMULATOR).get(); - ApplyFtrl.Options options = ApplyFtrl.useLocking(useLocking); + ApplyFtrl.Options options = ApplyFtrl.useLocking(true); return this.tf.train.applyFtrl( variable, accumSlot, // accum @@ -345,22 +262,4 @@ protected Op applyDense(Output gradient, Output variable public String getOptimizerName() { return "Ftrl"; } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/GradientDescent.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/GradientDescent.java index 7ed90c846f1..e307855e636 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/GradientDescent.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/GradientDescent.java @@ -21,35 +21,61 @@ import org.tensorflow.types.family.TType; /** - * Basic SGD. + * Basic Stochastic gradient descent optimizer. GradientDescent updates the current weight using the + * current gradient ?L/?w multiplied by the learning rate. */ public class GradientDescent extends Optimizer { + public static final float LEARNING_RATE_DEFAULT = 0.01f; + private final float learningRate; + /** + * Creates a GradientDescent Optimizer + * + * @param graph the TensorFlow graph + */ + public GradientDescent(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT); + } + + /** + * Creates a GradientDescent Optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate, defaults to 0.01 + */ public GradientDescent(Graph graph, float learningRate) { super(graph); this.learningRate = learningRate; } + /** + * Creates a GradientDescent Optimizer + * + * @param graph the TensorFlow graph + * @param name the name for this Optimizer, default is "GradientDescent" + * @param learningRate the learning rate, defaults to 0.01 + */ public GradientDescent(Graph graph, String name, float learningRate) { super(graph, name); this.learningRate = learningRate; } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { - return tf.train.applyGradientDescent(variable, - tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), gradient); + return tf.train.applyGradientDescent( + variable, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), gradient); } + /** {@inheritDoc} */ @Override public String toString() { - return "GradientDescent{" + - "learningRate=" + learningRate + - '}'; + return "GradientDescent{" + "learningRate=" + learningRate + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "GradientDescent"; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Momentum.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Momentum.java index b8582b4e278..111727d26fa 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Momentum.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Momentum.java @@ -15,7 +15,6 @@ */ package org.tensorflow.framework.optimizers; -import java.util.List; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; @@ -24,14 +23,20 @@ import org.tensorflow.op.train.ApplyMomentum; import org.tensorflow.types.family.TType; +import java.util.List; + /** - * SGD plus momentum, either nesterov or traditional. - *

    - * See the paper for details of - * nesterov momentum. + * Stochastic gradient descent plus momentum, either nesterov or traditional. + * + *

    See the paper for details + * of nesterov momentum. */ public class Momentum extends Optimizer { + public static final float LEARNING_RATE_DEFAULT = 0.01F; + public static final float MOMENTUM_DEFAULT = 0.0F; + public static final boolean NESTEROV_DEFAULT = false; + public static final String MOMENTUM = "momentum"; private final float learningRate; @@ -40,6 +45,46 @@ public class Momentum extends Optimizer { private final boolean useNesterov; + /** + * Creates a Momentum Optimizer + * + * @param graph the TensorFlow graph + */ + public Momentum(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); + } + + /** + * Creates a Momentum Optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate + */ + public Momentum(Graph graph, float learningRate) { + this(graph, learningRate, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); + } + + /** + * Creates a Momentum Optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate + * @param momentum hyperparameter that accelerates gradient descent in the relevant direction and + * dampens oscillations, Must be greater than or equal to zero. Default is 0. + */ + public Momentum(Graph graph, float learningRate, float momentum) { + this(graph, learningRate, momentum, NESTEROV_DEFAULT); + } + + /** + * Creates a Momentum Optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate + * @param momentum hyperparameter that accelerates gradient descent in the relevant direction and + * dampens oscillations, Must be greater than or equal to zero. Default is 0. + * @param useNesterov Whether to apply Nesterov momentum. Defaults to false. + */ public Momentum(Graph graph, float learningRate, float momentum, boolean useNesterov) { super(graph); this.learningRate = learningRate; @@ -47,13 +92,25 @@ public Momentum(Graph graph, float learningRate, float momentum, boolean useNest this.useNesterov = useNesterov; } - public Momentum(Graph graph, String name, float learningRate, float momentum, boolean useNesterov) { + /** + * Creates a Momentum Optimizer + * + * @param graph the TensorFlow graph + * @param name the name for this Optimizer + * @param learningRate the learning rate + * @param momentum hyperparameter that accelerates gradient descent in the relevant direction and + * dampens oscillations, Must be greater than or equal to zero. Default is 0. + * @param useNesterov Whether to apply Nesterov momentum. Defaults to false. + */ + public Momentum( + Graph graph, String name, float learningRate, float momentum, boolean useNesterov) { super(graph, name); this.learningRate = learningRate; this.momentum = momentum; this.useNesterov = useNesterov; } + /** {@inheritDoc} */ @Override protected void createSlots(List> variables) { for (Output v : variables) { @@ -61,31 +118,44 @@ protected void createSlots(List> variables) { } } + /** + * Creates a slot for the momentum variable + * + * @param v the variable + * @param the data type of the variable + */ private void createMomentumSlot(Output v) { - Operand initializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand initializer = tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), MOMENTUM, initializer); } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { Variable slot = getSlot(variable, MOMENTUM).get(); - return tf.train - .applyMomentum(variable, slot, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), - gradient, - tf.dtypes.cast(tf.constant(momentum), gradient.dataType()), - ApplyMomentum.useNesterov(useNesterov)); + return tf.train.applyMomentum( + variable, + slot, + tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), + gradient, + tf.dtypes.cast(tf.constant(momentum), gradient.dataType()), + ApplyMomentum.useNesterov(useNesterov)); } + /** {@inheritDoc} */ @Override public String toString() { - return "Momentum{" + - "learningRate=" + learningRate + - ", momentum=" + momentum + - ", useNesterov=" + useNesterov + - '}'; + return "Momentum{" + + "learningRate=" + + learningRate + + ", momentum=" + + momentum + + ", useNesterov=" + + useNesterov + + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "Momentum"; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Nadam.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Nadam.java new file mode 100644 index 00000000000..48e5135c952 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Nadam.java @@ -0,0 +1,302 @@ +package org.tensorflow.framework.optimizers; + +import org.tensorflow.DataType; +import org.tensorflow.Graph; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +import java.util.List; +import java.util.Optional; + +/** + * Nadam Optimizer that implements the NAdam algorithm. + * + *

    Much like Adam is essentially RMSprop with momentum, Nadam is Adam with Nesterov momentum. + * + * @see Dozat, 2015 + */ +public class Nadam extends Optimizer { + + private static final float DECAY_BASE = 0.96f; + private static final float DECAY = 0.004f; + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float EPSILON_DEFAULT = 1e-8f; + public static final float BETA_ONE_DEFAULT = 0.9f; + public static final float BETA_TWO_DEFAULT = 0.999f; + public static final String FIRST_MOMENT = "m"; + public static final String SECOND_MOMENT = "v"; + public static final String MOMENTUM = "momentum"; + + /** The learning rate. */ + private final float learningRate; + + /** The exponential decay rate for the 1st moment estimates. */ + private final float betaOne; + + /** The exponential decay rate for the exponentially weighted infinity norm. */ + private final float betaTwo; + + /** A small constant for numerical stability. */ + private final float epsilon; + + private Constant learningRateConst; + private Constant epsilonConst; + private Constant betaOneConst; + private Constant betaTwoConst; + + private Variable betaOnePower; + private Variable betaTwoPower; + private Variable momentum; + + private long iterations = 0; + + // private Operand mT; + private Operand mT1; + + private Operand oneMinusBeta1; + private Operand oneMinusBeta2; + private Operand oneMinusMT; + private Operand oneMinusMScheduleNew; + private Operand oneMinusMScheduleNext; + private Operand vTPrimeDenominator; + + /** + * Creates a Nadam Optimizer + * + * @param graph the TensorFlow graph + */ + public Nadam(Graph graph) { + this(graph, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates a Nadam Optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate, defaults to 0.001 + */ + public Nadam(Graph graph, float learningRate) { + this(graph, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates a Nadam Optimizer + * + * @param graph the TensorFlow graph + * @param learningRate the learning rate, defaults to 0.001 + * @param betaOne The exponential decay rate for the 1st moment estimates. Default is 0.9. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. Default + * is 0.999. + * @param epsilon A small constant for numerical stability. Default is 1e-8. + */ + public Nadam(Graph graph, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(graph); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + } + + /** + * Creates a Nadam Optimizer + * + * @param graph the TensorFlow graph + * @param name the name for this Optimizer, defaults to "Nadam" + * @param learningRate the learning rate, defaults to 0.001 + */ + public Nadam(Graph graph, String name, float learningRate) { + this(graph, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); + } + + /** + * Creates a Nadam Optimizer + * + * @param graph the TensorFlow graph + * @param name the name for this Optimizer, defaults to "Nadam" + * @param learningRate the learning rate, defaults to 0.001 + * @param betaOne The exponential decay rate for the 1st moment estimates. Default is 0.9. + * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. Default + * is 0.999. + * @param epsilon A small constant for numerical stability. Default is 1e-8. + */ + public Nadam( + Graph graph, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { + super(graph, name); + this.learningRate = learningRate; + this.betaOne = betaOne; + this.betaTwo = betaTwo; + this.epsilon = epsilon; + } + + /** {@inheritDoc} */ + @Override + protected void createSlots(List> variables) { + for (Output v : variables) { + createNadamSlot(v.asOutput()); + } + betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); + Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); + ((Graph) tf.scope().env()).addInitializer(betaOnePowerInit); + + betaTwoPower = tf.withName("beta2_power").variable(Shape.scalar(), TFloat32.DTYPE); + Assign betaTwoPowerInit = tf.assign(betaTwoPower, tf.constant(betaTwo)); + ((Graph) tf.scope().env()).addInitializer(betaTwoPowerInit); + + momentum = tf.withName("momentum").variable(Shape.scalar(), TFloat32.DTYPE); + Assign momentumInit = tf.assign(momentum, tf.constant(1.0F)); + ((Graph) tf.scope().env()).addInitializer(momentumInit); + } + + /** + * Creates slots for first and second moments and momentum + * + * @param v the variable + * @param the data type or the Variable + */ + private void createNadamSlot(Output v) { + Operand firstMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); + Operand secondMomentInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); + + Operand momentumInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(1.0f), v.dataType())); + createSlot(v.asOutput(), MOMENTUM, momentumInitializer); + } + + /** {@inheritDoc} */ + @Override + protected Optional prepare(String scopeName) { + Constant one = tf.constant(1.0F); + Constant point5 = tf.constant(0.5F); + + learningRateConst = tf.constant(learningRate); + betaOneConst = tf.constant(betaOne); + betaTwoConst = tf.constant(betaTwo); + Constant localStepConst = tf.constant(this.iterations + 1); + Constant nextStepConst = tf.constant(this.iterations + 2); + Constant decayConst = tf.constant(DECAY); + Constant decayBaseConst = tf.constant(DECAY_BASE); + epsilonConst = tf.constant(this.epsilon); + + Operand mT = + tf.math.mul( + betaOneConst, + tf.math.sub( + one, + tf.math.mul( + point5, + tf.math.pow( + decayBaseConst, + tf.math.mul(decayConst, tf.dtypes.cast(localStepConst, TFloat32.DTYPE)))))); + + mT1 = + tf.math.mul( + betaOneConst, + tf.math.sub( + one, + tf.math.mul( + point5, + tf.math.pow( + decayBaseConst, + tf.math.mul(decayConst, tf.dtypes.cast(nextStepConst, TFloat32.DTYPE)))))); + + Operand mScheduleNew = tf.math.mul(momentum, mT); + + mScheduleNew = tf.assign(momentum, mScheduleNew, Assign.useLocking(true)); + Operand mScheduleNext = tf.math.mul(mScheduleNew, mT1); + + oneMinusBeta1 = tf.math.sub(one, betaOneConst); + oneMinusBeta2 = tf.math.sub(one, betaTwoConst); + oneMinusMT = tf.math.sub(one, mT); + oneMinusMScheduleNew = tf.math.sub(one, mScheduleNew); + oneMinusMScheduleNext = tf.math.sub(one, mScheduleNext); + vTPrimeDenominator = + tf.math.sub(one, tf.math.pow(betaTwoConst, tf.dtypes.cast(localStepConst, TFloat32.DTYPE))); + return Optional.empty(); + } + + /** {@inheritDoc} */ + @Override + protected Op applyDense(Output gradient, Output variable) { + DataType dType = gradient.dataType(); + Variable m = getSlot(variable, FIRST_MOMENT).get(); // first Moment + Variable v = getSlot(variable, SECOND_MOMENT).get(); // Second Moment + + // gPrime = grad / coefficients['oneMinusMScheduleNew'] + Operand gPrime = tf.math.div(gradient, tf.dtypes.cast(oneMinusMScheduleNew, dType)); + // mT = (coefficients['beta_1_t'] * m + coefficients['one_minus_beta_1_t'] * grad) + Operand mT = + tf.math.add( + tf.math.mul(tf.dtypes.cast(betaOneConst, dType), m), + tf.math.mul(tf.dtypes.cast(oneMinusBeta1, dType), gradient)); + // mT = state_ops.assign(m, mT, use_locking=self._use_locking) + // update m + mT = tf.assign(m, mT, Assign.useLocking(true)); + + // mTPrime = mT / coefficients['oneMinusMScheduleNext'] + Operand mTPrime = tf.math.div(mT, tf.dtypes.cast(oneMinusMScheduleNext, dType)); + + // vT = (coefficients['beta_2_t'] * v + coefficients['one_minus_beta_2_t'] * + // math_ops.square(grad)) + Operand vT = + tf.math.add( + tf.math.mul(tf.dtypes.cast(betaTwoConst, dType), v), + tf.math.mul(tf.dtypes.cast(oneMinusBeta2, dType), tf.math.square(gradient))); + // vT = state_ops.assign(v, vT, use_locking=self._use_locking) + // update v + vT = tf.assign(v, vT, Assign.useLocking(true)); + + // vTPrime = vT / coefficients['vTPrimeDenominator'] + Operand vTPrime = tf.math.div(vT, tf.dtypes.cast(vTPrimeDenominator, dType)); + + // m_t_bar = (coefficients['oneMinusMT'] * gPrime + coefficients['mT1'] * mTPrime) + Operand m_t_bar = + tf.math.add( + tf.math.mul(tf.dtypes.cast(oneMinusMT, dType), gPrime), + tf.math.mul(tf.dtypes.cast(mT1, dType), mTPrime)); + // varT = var - coefficients['lr_t'] * m_t_bar / (math_ops.sqrt(vTPrime) + + // coefficients['epsilon']) + Operand varT = + tf.math.sub( + variable, + tf.math.div( + tf.math.mul(tf.dtypes.cast(learningRateConst, dType), m_t_bar), + tf.math.add(tf.math.sqrt(vTPrime), tf.dtypes.cast(epsilonConst, dType)))); + + return tf.assign(variable, varT, Assign.useLocking(true)); + } + + /** + * Gathers up the update operations into a single op that can be used as a run target. + * + *

    Adds the betaOne, betaTwo and mu updates to the end of the updates list. + * + * @param updateOperations The update operations. + * @param name The name of the run target. + * @return A NoOp with a control dependency on each update operation. + */ + @Override + protected Op finish(List updateOperations, String name) { + iterations++; // increment the step; + updateOperations.add(tf.assign(betaOnePower, tf.math.mul(betaOnePower, betaOneConst))); + updateOperations.add(tf.assign(betaTwoPower, tf.math.mul(betaTwoPower, betaTwoConst))); + return super.finish(updateOperations, name); + } + + /** {@inheritDoc} */ + @Override + public String getOptimizerName() { + return "Nadam"; + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java index ffff35a8ddd..f7032d18b38 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java @@ -15,12 +15,6 @@ */ package org.tensorflow.framework.optimizers; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.stream.Collectors; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Operation; @@ -33,34 +27,28 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.family.TType; -/** - * Base class for gradient optimizers. - */ +import java.util.*; +import java.util.stream.Collectors; + +/** Base class for gradient optimizers. */ public abstract class Optimizer { public static final String VARIABLE_V2 = "VariableV2"; - /** - * Global state variables - */ - //TODO make this be used. + /** Global state variables */ + // TODO make this be used. protected final List> globals; - /** - * The Graph this optimizer is operating on. - */ + /** The Graph this optimizer is operating on. */ protected final Graph graph; - /** - * The ops builder for the graph. - */ + /** The ops builder for the graph. */ protected final Ops tf; - /** - * Top level map key is the variable name, lower level map key is the slot name. - */ + /** Top level map key is the variable name, lower level map key is the slot name. */ private final Map>> slots; /** * Builds an optimizer for the supplied graph. - *

    - * Uses the name from {@link Optimizer#getOptimizerName()} to name the operations. + * + *

    Uses the name from {@link Optimizer#getOptimizerName()} to name the operations. + * * @param graph The graph to optimize. */ protected Optimizer(Graph graph) { @@ -72,6 +60,7 @@ protected Optimizer(Graph graph) { /** * Builds an optimizer for the supplied graph. + * * @param graph The graph to optimize. * @param name The base name for the operations. */ @@ -82,27 +71,57 @@ protected Optimizer(Graph graph, String name) { this.globals = new ArrayList<>(); } + /** + * Creates a name by combining a variable name and a slot name + * + * @param variable the variable + * @param slotName the name of the slot + * @return the combined name + */ public static String createName(Output variable, String slotName) { return variable.op().name() + "-" + slotName; } + /** + * Minimizes the loss by updating the variables + * + * @param loss the loss operation that returns the value to minimize + * @return returns op that minimizes the loss by updating the listed variables + */ public Op minimize(Operand loss) { return minimize(loss, getOptimizerName() + "-minimize"); } + /** + * Minimizes the loss by updating the variables + * + * @param loss the loss operation that returns the value to minimize + * @param name the name for the minimize operation + * @return op that minimizes the loss by updating the listed variables + */ public Op minimize(Operand loss, String name) { List> gradsAndVars = computeGradients(loss); return applyGradients(gradsAndVars, name); } + /** + * Computes the gradients based on a loss operand. + * + * @param loss the loss operation + * @param the data type of the loss, gradients and variables. + * @return the computed gradients + */ public List> computeGradients(Operand loss) { List variables = new ArrayList<>(); - graph.operations().forEachRemaining((Operation op) -> { - if (op.type().equals(VARIABLE_V2)) { - variables.add(op); - } - }); + graph + .operations() + .forEachRemaining( + (Operation op) -> { + if (op.type().equals(VARIABLE_V2)) { + variables.add(op); + } + }); Output[] variableOutputArray = new Output[variables.size()]; for (int i = 0; i < variables.size(); i++) { @@ -124,9 +143,16 @@ public List> computeGradients(Operand loss) { return gradVarPairs; } + /** + * Applies gradients to variables + * + * @param gradsAndVars the list of (gradient, variable) pairs. + * @param name the name of the apply gradients operation + * @return an Op that applies the gradients to the variables. + */ public Op applyGradients(List> gradsAndVars, String name) { - List> variables = gradsAndVars.stream().map(GradAndVar::getVariable) - .collect(Collectors.toList()); + List> variables = + gradsAndVars.stream().map(GradAndVar::getVariable).collect(Collectors.toList()); createSlots(variables); @@ -144,7 +170,7 @@ public Op applyGradients(List> gradsAndVars, String /** * Gets the slot associated with the specified variable and slot name. * - * @param var The variable to lookup. + * @param var The variable to lookup. * @param slotName The slot name. * @return The slot or {@link Optional#empty}. */ @@ -155,7 +181,7 @@ public Optional> getSlot(Output var, String slo /** * Gets the slot associated with the specified variable and slot name. * - * @param varName The variable to lookup. + * @param varName The variable to lookup. * @param slotName The slot name. * @return The slot or {@link Optional#empty}. */ @@ -165,7 +191,7 @@ private Optional> getSlot(String varName, String s Variable slot = variables.get(varName); if (slot != null) { @SuppressWarnings("unchecked") // This method should only be called when the type is known. - Optional> opt = Optional.of((Variable) slot); + Optional> opt = Optional.of((Variable) slot); return opt; } return Optional.empty(); @@ -177,25 +203,25 @@ private Optional> getSlot(String varName, String s * Creates a slot in the graph for the specified variable with the specified name. Adds the slot's * initializer to the graph's initializers, and the slot to the Optimizer's slot map. * - * @param variable The variable to create the slot for. - * @param slotName The name of the slot. + * @param variable The variable to create the slot for. + * @param slotName The name of the slot. * @param initializer The initializer for the slot. - * @param The type of the variable. + * @param The type of the variable. */ - protected void createSlot(Output variable, String slotName, - Operand initializer) { - Variable slot = tf.withName(createName(variable, slotName)) - .variable(variable.shape(), variable.dataType()); + protected void createSlot( + Output variable, String slotName, Operand initializer) { + Variable slot = + tf.withName(createName(variable, slotName)).variable(variable.shape(), variable.dataType()); Assign slotInit = tf.assign(slot, initializer); graph.addInitializer(slotInit); String varName = variable.op().name(); - Map> variables = slots - .computeIfAbsent(slotName, (k) -> new HashMap<>()); + Map> variables = + slots.computeIfAbsent(slotName, (k) -> new HashMap<>()); variables.put(varName, slot); } /** - * No-op prepare method. + * Returns a No-op prepare. * * @param scopeName The scope name to use for any variable creations. */ @@ -204,13 +230,19 @@ protected Optional prepare(String scopeName) { } /** - * No-op slot creation method. + * Performs a No-op slot creation method. * * @param variables The variables to create slots for. */ - protected void createSlots(List> variables) { - } + protected void createSlots(List> variables) {} + /** + * Generates the gradient update operations for the specific variable and gradient. + * + * @param gradVarPair the list of (gradient, variable) pairs. + * @param the datatype of the gradients and variables. + * @return An operand which applies the desired optimizer update to the variable. + */ private Op applyDense(GradAndVar gradVarPair) { return applyDense(gradVarPair.getGradient(), gradVarPair.getVariable()); } @@ -220,7 +252,7 @@ private Op applyDense(GradAndVar gradVarPair) { * * @param gradient The gradient to use. * @param variable The variable to update. - * @param The type of the variable. + * @param The type of the variable. * @return An operand which applies the desired optimizer update to the variable. */ protected abstract Op applyDense(Output gradient, Output variable); @@ -229,7 +261,7 @@ private Op applyDense(GradAndVar gradVarPair) { * Gathers up the update operations into a single op that can be used as a run target. * * @param updateOperations The update operations. - * @param name The name of the run target. + * @param name The name of the run target. * @return A NoOp with a control dependency on each update operation. */ protected Op finish(List updateOperations, String name) { @@ -240,25 +272,24 @@ protected Op finish(List updateOperations, String name) { } /** - * Name of the optimizer. + * Get the Name of the optimizer. * * @return The optimizer name. */ public abstract String getOptimizerName(); - /** - * Optional attributes for {@link org.tensorflow.training.optimizers.Optimizer} - */ + /** Optional attributes for {@link org.tensorflow.framework.optimizers.Optimizer} */ public static class Options { protected String sharedName; - private Options() { - } + private Options() {} /** + * Sets the shared name + * * @param sharedName If non-empty, this variable is named in the given bucket with this - * shared_name. Otherwise, the node name is used instead. + * shared_name. Otherwise, the node name is used instead. */ public Optimizer.Options sharedName(String sharedName) { this.sharedName = sharedName; @@ -266,20 +297,41 @@ public Optimizer.Options sharedName(String sharedName) { } } + /** + * A class that holds a paired gradient and variable. + * + * @param the data type for the gradient and variable + */ public static class GradAndVar { private final Output gradient; private final Output variable; + /** + * Creates a Gradient and Variable pair + * + * @param gradient the gradient + * @param variable the variable + */ public GradAndVar(Output gradient, Output variable) { this.gradient = gradient; this.variable = variable; } + /** + * Gets the gradient + * + * @return the gradient + */ public Output getGradient() { return gradient; } + /** + * Gets the variable + * + * @return the variable + */ public Output getVariable() { return variable; } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java new file mode 100644 index 00000000000..7099a050d3e --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java @@ -0,0 +1,41 @@ +package org.tensorflow.framework.optimizers; + +import org.tensorflow.Graph; + +import java.util.function.Function; + +/** Enumerator used to create a new Optimizer with default parameters. */ +public enum Optimizers { + ADADELTA(AdaDelta::new), + ADAGRAD(AdaGrad::new), + ADAGRAD_DA(AdaGradDA::new), + ADAM(Adam::new), + ADAMAX(Adamax::new), + FTRL(Ftrl::new), + NADAM(Nadam::new), + RMSPROP(RMSProp::new), + MOMENTUM(Momentum::new), + GRADIENT_DESCENT(Momentum::new); + + private final Function creator; + + /** + * Creates an Optimizers enum + * + * @param creator the lambda function that accepts a Graph argument used to create the default + * Optimizer + */ + Optimizers(Function creator) { + this.creator = creator; + } + + /** + * Creates an Optimizer with default settings. + * + * @param graph the TensorFlow Graph + * @return the Optimizer + */ + public Optimizer createOptimizer(Graph graph) { + return creator.apply(graph); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/RMSProp.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/RMSProp.java index cc64a23de3d..8b71558e549 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/RMSProp.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/RMSProp.java @@ -15,7 +15,6 @@ */ package org.tensorflow.framework.optimizers; -import java.util.List; import org.tensorflow.Graph; import org.tensorflow.Operand; import org.tensorflow.Output; @@ -23,14 +22,36 @@ import org.tensorflow.op.core.Variable; import org.tensorflow.types.family.TType; +import java.util.List; + /** * Optimizer that implements the RMSProp algorithm. - *

    - * See the lecture - * notes that is inexplicably the canonical reference. + * + *

    The gist of RMSprop is to: + *

  • Maintain a moving (discounted) average of the square of gradients + *
  • Divide the gradient by the root of this average + * + *

    + * + *

    This implementation of RMSprop uses plain momentum, not Nesterov momentum. + * + *

    + * + *

    The centered version additionally maintains a moving average of the gradients, and uses + * that average to estimate the variance. + * + *

    + * + * @see Hinton G, + * et al. 2012, lecture notes that is inexplicably the canonical reference. */ public class RMSProp extends Optimizer { + public static final float LEARNING_RATE_DEFAULT = 0.001f; + public static final float DECAY_DEFAULT = 0.9f; + public static final float MOMENTUM_DEFAULT = 0.0f; + public static final float EPSILON_DEFAULT = 1e-10f; + public static final boolean CENTERED_DEFAULT = false; public static final String RMS = "rms"; public static final String MG = "mg"; // mean gradient? public static final String MOMENTUM = "momentum"; @@ -41,11 +62,50 @@ public class RMSProp extends Optimizer { private final float epsilon; private final boolean centered; + /** + * Creates an RMSPRrop Optimizer + * + * @param graph the TensorFlow Graph + */ + public RMSProp(Graph graph) { + this( + graph, + LEARNING_RATE_DEFAULT, + DECAY_DEFAULT, + MOMENTUM_DEFAULT, + EPSILON_DEFAULT, + CENTERED_DEFAULT); + } + + /** + * Creates an RMSPRrop Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + */ public RMSProp(Graph graph, float learningRate) { - this(graph, learningRate, 0.9f, 0.0f, 1e-10f, false); + this(graph, learningRate, DECAY_DEFAULT, MOMENTUM_DEFAULT, EPSILON_DEFAULT, CENTERED_DEFAULT); } - public RMSProp(Graph graph, float learningRate, float decay, float momentum, float epsilon, + /** + * Creates an RMSPRrop Optimizer + * + * @param graph the TensorFlow Graph + * @param learningRate the learning rate + * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. + * @param momentum the acceleration factor, default is 0. + * @param epsilon A small constant for numerical stability + * @param centered If true, gradients are normalized by the estimated variance of the + * gradient; if false>, by the uncentered second moment. Setting this to + * true> may help with training, but is slightly more expensive in terms of computation + * and memory. Defaults to false. + */ + public RMSProp( + Graph graph, + float learningRate, + float decay, + float momentum, + float epsilon, boolean centered) { super(graph); this.learningRate = learningRate; @@ -55,11 +115,45 @@ public RMSProp(Graph graph, float learningRate, float decay, float momentum, flo this.centered = centered; } + /** + * Creates an RMSPRrop Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name of this Optimizer. Defaults to "RMSProp". + * @param learningRate the learning rate + */ public RMSProp(Graph graph, String name, float learningRate) { - this(graph, name, learningRate, 0.9f, 0.0f, 1e-10f, false); + this( + graph, + name, + learningRate, + DECAY_DEFAULT, + MOMENTUM_DEFAULT, + EPSILON_DEFAULT, + CENTERED_DEFAULT); } - public RMSProp(Graph graph, String name, float learningRate, float decay, float momentum, float epsilon, + /** + * Creates an RMSPRrop Optimizer + * + * @param graph the TensorFlow Graph + * @param name the name of this Optimizer. Defaults to "RMSProp". + * @param learningRate the learning rate + * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. + * @param momentum The acceleration factor, default is 0. + * @param epsilon A small constant for numerical stability + * @param centered If true, gradients are normalized by the estimated variance of the + * gradient; if false>, by the uncentered second moment. Setting this to + * true> may help with training, but is slightly more expensive in terms of computation + * and memory. Defaults to false. + */ + public RMSProp( + Graph graph, + String name, + float learningRate, + float decay, + float momentum, + float epsilon, boolean centered) { super(graph, name); this.learningRate = learningRate; @@ -69,6 +163,7 @@ public RMSProp(Graph graph, String name, float learningRate, float decay, float this.centered = centered; } + /** {@inheritDoc} */ @Override protected void createSlots(List> variables) { for (Output v : variables) { @@ -76,34 +171,50 @@ protected void createSlots(List> variables) { } } + + /** + * Creates the RMSProp Slots for Root Mean Squared (RMS), + * MOMENTUM, and Mean Gradient (MG) + * + * @param v the variable to install in the slot + * @param the datatype of the variable. + */ private void createRMSPropSlot(Output v) { - Operand rmsInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(1.0f), v.dataType())); + Operand rmsInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(1.0f), v.dataType())); createSlot(v.asOutput(), RMS, rmsInitializer); - Operand momentumInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand momentumInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), MOMENTUM, momentumInitializer); if (centered) { - Operand mgInitializer = tf - .fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); + Operand mgInitializer = + tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); createSlot(v.asOutput(), MG, mgInitializer); } } + /** {@inheritDoc} */ @Override protected Op applyDense(Output gradient, Output variable) { Variable rmsSlot = getSlot(variable, RMS).get(); Variable momentumSlot = getSlot(variable, MOMENTUM).get(); if (centered) { Variable mgSlot = getSlot(variable, MG).get(); - return tf.train.applyCenteredRmsProp(variable, mgSlot, rmsSlot, momentumSlot, + return tf.train.applyCenteredRmsProp( + variable, + mgSlot, + rmsSlot, + momentumSlot, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), tf.dtypes.cast(tf.constant(decay), gradient.dataType()), tf.dtypes.cast(tf.constant(momentum), gradient.dataType()), tf.dtypes.cast(tf.constant(epsilon), gradient.dataType()), gradient); } - return tf.train.applyRmsProp(variable, rmsSlot, momentumSlot, + return tf.train.applyRmsProp( + variable, + rmsSlot, + momentumSlot, tf.dtypes.cast(tf.constant(learningRate), gradient.dataType()), tf.dtypes.cast(tf.constant(decay), gradient.dataType()), tf.dtypes.cast(tf.constant(momentum), gradient.dataType()), @@ -111,17 +222,24 @@ protected Op applyDense(Output gradient, Output variable gradient); } + /** {@inheritDoc} */ @Override public String toString() { - return "RMSProp{" + - "learningRate=" + learningRate + - ", decay=" + decay + - ", momentum=" + momentum + - ", epsilon=" + epsilon + - ", centered=" + centered + - '}'; + return "RMSProp{" + + "learningRate=" + + learningRate + + ", decay=" + + decay + + ", momentum=" + + momentum + + ", epsilon=" + + epsilon + + ", centered=" + + centered + + '}'; } + /** {@inheritDoc} */ @Override public String getOptimizerName() { return "RMSProp"; From 5c30a72fa335f338727358b4299e4796a211403d Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 9 Sep 2020 16:17:16 -0400 Subject: [PATCH 30/55] Removed optimize classes from tensorflow-keras, moved optimizer test cases to framework. Created Tests for GradientDescent and Momentum --- .../framework}/optimizers/AdaDeltaTest.java | 38 +- .../framework}/optimizers/AdaGradDATest.java | 9 +- .../framework}/optimizers/AdaGradTest.java | 11 +- .../framework}/optimizers/AdamTest.java | 12 +- .../framework}/optimizers/AdamaxTest.java | 23 +- .../framework}/optimizers/FtrlTest.java | 22 +- .../optimizers/GradientDescentTest.java | 100 +++++ .../framework/optimizers/MomentumTest.java | 22 +- .../framework}/optimizers/NadamTest.java | 25 +- .../framework/optimizers/OptimizersTest.java | 145 +++++++ .../framework}/optimizers/RMSPropTest.java | 13 +- .../framework}/utils/EagerTestSession.java | 30 +- .../framework}/utils/GraphTestSession.java | 35 +- .../org/tensorflow/framework}/utils/ND.java | 38 +- .../framework}/utils/TestSession.java | 30 +- .../tensorflow/keras/optimizers/AdaDelta.java | 200 --------- .../tensorflow/keras/optimizers/AdaGrad.java | 167 -------- .../keras/optimizers/AdaGradDA.java | 196 --------- .../org/tensorflow/keras/optimizers/Adam.java | 182 -------- .../tensorflow/keras/optimizers/Adamax.java | 283 ------------- .../tensorflow/keras/optimizers/Nadam.java | 399 ------------------ .../keras/optimizers/OptimizerInterface.java | 61 --- .../keras/optimizers/Optimizers.java | 125 ------ .../tensorflow/keras/optimizers/RMSProp.java | 201 --------- .../org/tensorflow/keras/optimizers/SGD.java | 200 --------- 25 files changed, 389 insertions(+), 2178 deletions(-) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/AdaDeltaTest.java (85%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/AdaGradDATest.java (93%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/AdaGradTest.java (94%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/AdamTest.java (96%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/AdamaxTest.java (91%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/FtrlTest.java (95%) create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/GradientDescentTest.java rename tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java => tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/MomentumTest.java (92%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/NadamTest.java (90%) create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/OptimizersTest.java rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/optimizers/RMSPropTest.java (96%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/utils/EagerTestSession.java (97%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/utils/GraphTestSession.java (98%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/utils/ND.java (96%) rename {tensorflow-keras/src/test/java/org/tensorflow/keras => tensorflow-framework/src/test/java/org/tensorflow/framework}/utils/TestSession.java (98%) delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adam.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adamax.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/RMSProp.java delete mode 100644 tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaDeltaTest.java similarity index 85% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaDeltaTest.java index 52de6b6b0e1..5c4ce542c65 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaDeltaTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaDeltaTest.java @@ -12,11 +12,12 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; +import org.tensorflow.Graph; import org.tensorflow.framework.optimizers.Optimizer.GradAndVar; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; @@ -55,10 +56,10 @@ public void tearDown() {} @Test public void testConstructAdadeltaWithLR() { try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - AdaDelta opt = new AdaDelta(tf, 1.0F, 0.9F, 1.F); - AdaDelta opt2 = new AdaDelta(tf, 0.1F, 0.9F, 1.F); - AdaDelta opt3 = new AdaDelta(tf, 0.1F, 0.9F, 1e-8F); + Graph graph = session.getGraph(); + AdaDelta opt = new AdaDelta(graph, 1.0F, 0.9F, 1.F); + AdaDelta opt2 = new AdaDelta(graph, 0.1F, 0.9F, 1.F); + AdaDelta opt3 = new AdaDelta(graph, 0.1F, 0.9F, 1e-8F); String format = "AdaDelta{learningRate=%s, rho=%s, epsilon=%s}"; String optExpected = String.format(format, 1.0F, 0.9F, 1.F); String opt2Expected = String.format(format, 0.1F, 0.9F, 1.F); @@ -74,28 +75,6 @@ public void testConstructAdadeltaWithLR() { } } - @Test - public void testConstructOptions() { - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - AdaDelta.Options options = - AdaDelta.Options.builder() - .name("myAdaDelta") - .learningRate(1.0F) - .rho(0.9F) - .epsilon(1.F) - .build(); - AdaDelta opt = new AdaDelta(tf, options); - - String format = "AdaDelta{learningRate=%s, rho=%s, epsilon=%s}"; - String optExpected = String.format(format, 1.0F, 0.9F, 1.F); - - String optString = opt.toString(); - - assertEquals(optExpected, optString); - } - } - @Test public void testBasic() { int numUpdates = 4; // # number of ADADELTA steps to perform @@ -105,6 +84,7 @@ public void testBasic() { for (float lr : lrs) { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); float[] var0Init = {1.0F, 2.0F}; float[] var1Init = {3.0F, 4.0F}; float[] fgrads = {grad, grad}; @@ -128,7 +108,7 @@ public void testBasic() { gradsAndVars.add(new GradAndVar<>(cgrads.asOutput(), var1.asOutput())); /* get the Optimizer */ - AdaDelta adaDelta = new AdaDelta(tf, lr, rho, epsilon); + AdaDelta adaDelta = new AdaDelta(graph, lr, rho, epsilon); /*apply gradients */ Op adadeltaUpdate = adaDelta.applyGradients(gradsAndVars, "AdaDeltaTest"); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java similarity index 93% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java index 7275e9f8113..e1a12fb00fe 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradDATest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java @@ -12,11 +12,11 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; @@ -56,6 +56,7 @@ public void testBasic() { float[] grads1Init = {0.01F, 0.02F}; try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -75,7 +76,7 @@ public void testBasic() { float learningRate = 3.0F; - AdaGrad instance = new AdaGrad(tf, learningRate); + AdaGrad instance = new AdaGrad(graph, learningRate); /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java similarity index 94% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java index d407209b87a..efbdd7be585 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdaGradTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java @@ -12,12 +12,12 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.ND; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.ND; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; @@ -72,6 +72,7 @@ public void testBasic() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -86,7 +87,7 @@ public void testBasic() { float learningRate = 3.0F; - AdaGrad instance = new AdaGrad(tf, learningRate); + AdaGrad instance = new AdaGrad(graph, learningRate); /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java similarity index 96% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java index 82a47afbbbb..dbcc7c0dae2 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java @@ -12,13 +12,13 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; +import org.tensorflow.Graph; import org.tensorflow.Tensor; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.ND; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.framework.utils.ND; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; @@ -70,7 +70,7 @@ public void testBasic() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); - + Graph graph = session.getGraph(); session.setEpsilon(epsilon1); Shape shape0 = Shape.of(var0Init.length); @@ -97,7 +97,7 @@ public void testBasic() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Adam instance = new Adam(tf, learningRate); + Adam instance = new Adam(graph, learningRate); Op update = instance.applyGradients(gradsAndVars, "AdamTest"); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java similarity index 91% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java index 3376d65aab4..1b12a2f76a1 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/AdamaxTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java @@ -12,13 +12,13 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; +import org.tensorflow.Graph; import org.tensorflow.Tensor; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.ND; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.framework.utils.ND; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; @@ -34,7 +34,7 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.tensorflow.keras.optimizers.Adamax.*; +import static org.tensorflow.framework.optimizers.Adamax.*; /** Test cases for Adamax Optimizer */ public class AdamaxTest { @@ -62,8 +62,8 @@ public void tearDown() {} @Test public void testGetOptimizerName() { try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Adamax instance = new Adamax(tf); + Graph graph = session.getGraph(); + Adamax instance = new Adamax(graph); String expResult = "Adamax"; String result = instance.getOptimizerName(); assertEquals(expResult, result); @@ -95,6 +95,7 @@ public void testBasic() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -111,11 +112,11 @@ public void testBasic() { session.run(var0Initializer); session.run(var1Initializer); - Adamax instance = new Adamax(tf); + Adamax instance = new Adamax(graph); /* build the GradsAnvVars */ - List> gradsAndVars = new ArrayList<>(); - gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); - gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + List> gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new GradAndVar<>(grads1.asOutput(), var1.asOutput())); Op update = instance.applyGradients(gradsAndVars, "AdamTest"); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/FtrlTest.java similarity index 95% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/FtrlTest.java index cda32704506..597f8e52bcd 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/FtrlTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/FtrlTest.java @@ -12,11 +12,11 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; @@ -53,8 +53,8 @@ public void tearDown() {} @Test public void testGetOptimizerName() { try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Ftrl instance = new Ftrl(tf); + Graph graph = session.getGraph(); + Ftrl instance = new Ftrl(graph); String expResult = "Ftrl"; String result = instance.getOptimizerName(); assertEquals(expResult, result); @@ -72,6 +72,7 @@ public void testFtrlWithL1L2L2Shrinkage() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -88,7 +89,7 @@ public void testFtrlWithL1L2L2Shrinkage() { Ftrl instance = new Ftrl( - tf, + graph, learningRate, -0.5F, // learningRatePower 0.1F, // initialAccumulatorValue @@ -136,6 +137,7 @@ public void testFtrlWithL1() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -152,7 +154,7 @@ public void testFtrlWithL1() { Ftrl instance = new Ftrl( - tf, + graph, learningRate, Ftrl.LEARNING_RATE_POWER_DEFAULT, // learningRatePower 0.1F, // initialAccumulatorValue @@ -201,6 +203,7 @@ public void testFtrlWithL1L2() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -217,7 +220,7 @@ public void testFtrlWithL1L2() { Ftrl instance = new Ftrl( - tf, + graph, learningRate, Ftrl.LEARNING_RATE_POWER_DEFAULT, // learningRatePower 0.1F, // initialAccumulatorValue @@ -266,6 +269,7 @@ public void doTestFtrlwithoutRegularization() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -280,7 +284,7 @@ public void doTestFtrlwithoutRegularization() { float learningRate = 3.0F; - Ftrl instance = new Ftrl(tf, learningRate); + Ftrl instance = new Ftrl(graph, learningRate); /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/GradientDescentTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/GradientDescentTest.java new file mode 100644 index 00000000000..4362c54d815 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/GradientDescentTest.java @@ -0,0 +1,100 @@ +package org.tensorflow.framework.optimizers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Op; +import org.tensorflow.op.Ops; +import org.tensorflow.op.core.Assign; +import org.tensorflow.op.core.Constant; +import org.tensorflow.op.core.Variable; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.family.TType; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +/** Test cases for GradientDescent Optimizer */ +public class GradientDescentTest { + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; + + public GradientDescentTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of getOptimizerName method, of class Nadam. */ + @Test + public void testGetOptimizerName() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + GradientDescent instance = new GradientDescent(graph); + String expResult = "GradientDescent"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + @Test + public void testBasic() { + float[] var0Init = {1.0F, 2.0F}; + float[] var1Init = {3.0F, 4.0F}; + float[] grads0Init = {0.1F, 0.1F}; + float[] grads1Init = {0.01F, 0.01F}; + float learningRate = 3.0F; + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Graph graph = session.getGraph(); + + Shape shape0 = Shape.of(var0Init.length); + Shape shape1 = Shape.of(var1Init.length); + Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); + Variable var1 = tf.withName("var1").variable(shape1, TFloat32.DTYPE); + + Assign var0Initializer = tf.assign(var0, tf.constant(var0Init)); + Assign var1Initializer = tf.assign(var1, tf.constant(var1Init)); + + Constant grads0 = tf.constant(grads0Init); + Constant grads1 = tf.constant(grads1Init); + + /* build the GradsAnvVars */ + List> gradsAndVars = new ArrayList<>(); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); + gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); + + GradientDescent instance = new GradientDescent(graph, learningRate); + Op update = instance.applyGradients(gradsAndVars, "SGDTest"); + + /* initialize the local variables */ + session.run(var0Initializer); + session.run(var1Initializer); + + /* initialize the accumulators */ + session.run(tf.init()); + + /* make sure the variables were initialized properly */ + session.evaluate(var0Init, var0); + session.evaluate(var1Init, var1); + + session.run(update); // 1 step + + float[] expectedVar0 = {1.0F - 3.0F * 0.1F, 2.0F - 3.0F * 0.1F}; + float[] expectedVar1 = {3.0F - 3.0F * 0.01F, 4.0F - 3.0F * 0.01F}; + session.evaluate(expectedVar0, var0); + session.evaluate(expectedVar1, var1); + } + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/MomentumTest.java similarity index 92% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/MomentumTest.java index a8e363b4332..bcfff97773d 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/SGDTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/MomentumTest.java @@ -12,11 +12,11 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; @@ -33,11 +33,11 @@ import static org.tensorflow.framework.optimizers.Momentum.MOMENTUM; /** Test cases for SGD Optimizer */ -public class SGDTest { +public class MomentumTest { private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; - public SGDTest() {} + public MomentumTest() {} @BeforeAll public static void setUpClass() {} @@ -55,9 +55,9 @@ public void tearDown() {} @Test public void testGetOptimizerName() { try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - SGD instance = new SGD(tf); - String expResult = "SGD"; + Graph graph = session.getGraph(); + Momentum instance = new Momentum(graph); + String expResult = "Momentum"; String result = instance.getOptimizerName(); assertEquals(expResult, result); } @@ -73,6 +73,7 @@ public void testBasic() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -90,7 +91,7 @@ public void testBasic() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - SGD instance = new SGD(tf, learningRate); + Momentum instance = new Momentum(graph, learningRate); Op update = instance.applyGradients(gradsAndVars, "SGDTest"); /* initialize the local variables */ @@ -125,6 +126,7 @@ public void testMomentum() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -142,7 +144,7 @@ public void testMomentum() { gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - SGD instance = new SGD(tf, learningRate, momentum); + Momentum instance = new Momentum(graph, learningRate, momentum); Op update = instance.applyGradients(gradsAndVars, "SGDTest"); Variable momentumSlot0 = instance.getSlot(var0.asOutput(), MOMENTUM).get(); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/NadamTest.java similarity index 90% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/NadamTest.java index d720460b2f2..a583d74246b 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/NadamTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/NadamTest.java @@ -12,13 +12,13 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; +import org.tensorflow.Graph; import org.tensorflow.Tensor; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.ND; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.framework.utils.ND; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; @@ -34,8 +34,6 @@ import java.util.List; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.tensorflow.keras.optimizers.Nadam.FIRST_MOMENT; -import static org.tensorflow.keras.optimizers.Nadam.SECOND_MOMENT; /** Test cases for Nadam Optimizer */ public class NadamTest { @@ -65,8 +63,8 @@ public void tearDown() {} @Test public void testGetOptimizerName() { try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Nadam instance = new Nadam(tf); + Graph graph = session.getGraph(); + Nadam instance = new Nadam(graph); String expResult = "Nadam"; String result = instance.getOptimizerName(); assertEquals(expResult, result); @@ -100,6 +98,7 @@ public void testBasic() { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); @@ -112,7 +111,7 @@ public void testBasic() { Constant grads0 = tf.constant(grads0Init); Constant grads1 = tf.constant(grads1Init); - Nadam instance = new Nadam(tf); + Nadam instance = new Nadam(graph); /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); @@ -124,16 +123,16 @@ public void testBasic() { Variable[] firstMomentSlots = new Variable[2]; Variable[] secondMomentSlots = new Variable[2]; - firstMomentSlots[0] = instance.getSlot(var0.asOutput(), FIRST_MOMENT).get(); + firstMomentSlots[0] = instance.getSlot(var0.asOutput(), Nadam.FIRST_MOMENT).get(); assertEquals(firstMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); - secondMomentSlots[0] = instance.getSlot(var0.asOutput(), SECOND_MOMENT).get(); + secondMomentSlots[0] = instance.getSlot(var0.asOutput(), Nadam.SECOND_MOMENT).get(); assertEquals(secondMomentSlots[0].asOutput().shape(), var0.asOutput().shape()); - firstMomentSlots[1] = instance.getSlot(var1.asOutput(), FIRST_MOMENT).get(); + firstMomentSlots[1] = instance.getSlot(var1.asOutput(), Nadam.FIRST_MOMENT).get(); assertEquals(firstMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); - secondMomentSlots[1] = instance.getSlot(var1.asOutput(), SECOND_MOMENT).get(); + secondMomentSlots[1] = instance.getSlot(var1.asOutput(), Nadam.SECOND_MOMENT).get(); assertEquals(secondMomentSlots[1].asOutput().shape(), var1.asOutput().shape()); /* initialize the local variables */ diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/OptimizersTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/OptimizersTest.java new file mode 100644 index 00000000000..78b56c8289e --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/OptimizersTest.java @@ -0,0 +1,145 @@ +package org.tensorflow.framework.optimizers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.TestSession; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class OptimizersTest { + private final TestSession.Mode tfMode = TestSession.Mode.GRAPH; + + public OptimizersTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test ADADELTA enum */ + @Test + public void testADADELTA() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.ADADELTA.createOptimizer(graph); + String expResult = "Adadelta"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test ADAGRAD enum */ + @Test + public void testADAGRAD() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.ADAGRAD.createOptimizer(graph); + String expResult = "Adagrad"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test ADAGRAD_DA enum */ + @Test + public void testADAGRAD_DA() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.ADAGRAD_DA.createOptimizer(graph); + String expResult = "adagrad-da"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test ADAM enum */ + @Test + public void testADAM() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.ADAM.createOptimizer(graph); + String expResult = "Adam"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test ADAMAX enum */ + @Test + public void testADAMAX() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.ADAMAX.createOptimizer(graph); + String expResult = "Adamax"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test FTRL enum */ + @Test + public void testFTRL() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.FTRL.createOptimizer(graph); + String expResult = "Ftrl"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test NADAM enum */ + @Test + public void testNADAM() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.NADAM.createOptimizer(graph); + String expResult = "Nadam"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test RMSPROP enum */ + @Test + public void testRMSPROP() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.RMSPROP.createOptimizer(graph); + String expResult = "RMSProp"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test MOMENTUM enum */ + @Test + public void testMOMENTUM() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.MOMENTUM.createOptimizer(graph); + String expResult = "Momentum"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } + + /** Test GRADIENT_DESCENT enum */ + @Test + public void testGRADIENT_DESCENT() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Graph graph = session.getGraph(); + Optimizer instance = Optimizers.GRADIENT_DESCENT.createOptimizer(graph); + String expResult = "GradientDescent"; + String result = instance.getOptimizerName(); + assertEquals(expResult, result); + } + } +} diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/RMSPropTest.java similarity index 96% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/RMSPropTest.java index 078288ed1e7..202fb21ef68 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/optimizers/RMSPropTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/RMSPropTest.java @@ -12,12 +12,12 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.optimizers; +package org.tensorflow.framework.optimizers; import org.junit.jupiter.api.*; -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.keras.utils.ND; -import org.tensorflow.keras.utils.TestSession; +import org.tensorflow.Graph; +import org.tensorflow.framework.utils.ND; +import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; @@ -73,6 +73,7 @@ public void testDense() { for (Object[] testParamValue : TestParamValues) { try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); + Graph graph = session.getGraph(); session.setEpsilon(1e-2f); float[] var0Init = {1.0F, 2.0F}; float[] var1Init = {3.0F, 4.0F}; @@ -102,10 +103,10 @@ public void testDense() { float epsilon = (float) testParamValue[3]; boolean centered = (boolean) testParamValue[4]; - RMSProp instance = new RMSProp(tf, learningRate, decay, momentum, epsilon, centered); + RMSProp instance = new RMSProp(graph, learningRate, decay, momentum, epsilon, centered); /* build the GradsAnvVars */ - List> gradsAndVars = new ArrayList<>(); + List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new GradAndVar<>(grads1.asOutput(), var1.asOutput())); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java similarity index 97% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java index 6b7ebf9e2f2..c52168e1f11 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/EagerTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java @@ -12,32 +12,23 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.utils; +package org.tensorflow.framework.utils; -import java.io.PrintWriter; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Predicate; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; -import org.tensorflow.DataType; -import org.tensorflow.EagerSession; -import org.tensorflow.Operand; -import org.tensorflow.Output; -import org.tensorflow.Session; +import org.tensorflow.*; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Ops; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TString; +import org.tensorflow.types.*; import org.tensorflow.types.family.TNumber; import org.tensorflow.types.family.TType; +import java.io.PrintWriter; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Predicate; + +import static org.junit.jupiter.api.Assertions.*; + /** Eaager Mode Test Session */ public class EagerTestSession extends TestSession { @@ -58,6 +49,7 @@ public Ops getTF() { /** * Get the TensorFlow EagerSession instance + * * @return the TensorFlow EagerSession instance */ public EagerSession getSession() { diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java similarity index 98% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java index 1a22289f4bf..3231b0f50cd 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/GraphTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java @@ -12,35 +12,24 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.utils; +package org.tensorflow.framework.utils; -import java.io.PrintWriter; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.function.Predicate; -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; -import org.tensorflow.DataType; -import org.tensorflow.EagerSession; -import org.tensorflow.Graph; -import org.tensorflow.Operand; -import org.tensorflow.Output; -import org.tensorflow.Session; -import org.tensorflow.Tensor; +import org.tensorflow.*; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TString; +import org.tensorflow.types.*; import org.tensorflow.types.family.TNumber; import org.tensorflow.types.family.TType; +import java.io.PrintWriter; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Predicate; + +import static org.junit.jupiter.api.Assertions.*; + /** Graph Mode Test Session */ public class GraphTestSession extends TestSession { @@ -66,9 +55,9 @@ public Graph getGraph() { return graph; } - /** - * Get the TensorFlow Session instance + * Get the TensorFlow Session instance + * * @return the TensorFlow Session instance */ public Session getSession() { diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/ND.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/ND.java similarity index 96% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/utils/ND.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/utils/ND.java index 2855af5af25..0503a41dfc2 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/ND.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/ND.java @@ -12,18 +12,20 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.utils; +package org.tensorflow.framework.utils; -import java.util.Arrays; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicReference; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.ndarray.NdArray; import org.tensorflow.ndarray.NdArrays; import org.tensorflow.ndarray.Shape; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; + // TODO used in the Callbacks, this should be a part of NDArray? + /** NDArray math Utilities */ public class ND { @@ -126,7 +128,7 @@ public static FloatNdArray square(FloatNdArray a) { * @return the resulting array from the add operation */ public static FloatNdArray add(FloatNdArray a, FloatNdArray b) { - if(a.shape().size() != b.shape().size()) + if (a.shape().size() != b.shape().size()) throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -176,7 +178,7 @@ public static FloatNdArray add(float scalar, FloatNdArray a) { * @return the resulting array from the subtraction operation */ public static FloatNdArray sub(FloatNdArray a, FloatNdArray b) { - if(a.shape().size() != b.shape().size()) + if (a.shape().size() != b.shape().size()) throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -232,9 +234,10 @@ public static FloatNdArray sub(float scalar, FloatNdArray a) { * @return the resulting array from the muliply operation */ public static FloatNdArray mul(FloatNdArray a, FloatNdArray b) { - if(!a.shape().equals(b.shape())) - throw new IllegalArgumentException(String.format( - "ValueError: operands do not have same shapes %s %s ", a.shape(), b.shape())); + if (!a.shape().equals(b.shape())) + throw new IllegalArgumentException( + String.format( + "ValueError: operands do not have same shapes %s %s ", a.shape(), b.shape())); boolean sameSize = a.shape().size() == b.shape().size(); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -289,7 +292,7 @@ public static FloatNdArray mul(float scalar, FloatNdArray a) { * @return the resulting array from the Divide operation */ public static FloatNdArray div(FloatNdArray a, FloatNdArray b) { - if(a.shape().size() != b.shape().size()) + if (a.shape().size() != b.shape().size()) throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -309,8 +312,7 @@ public static FloatNdArray div(FloatNdArray a, FloatNdArray b) { * @return the resulting array from the Divide operation */ public static FloatNdArray div(FloatNdArray a, float scalar) { - if(scalar == 0) - throw new IllegalArgumentException("Cannot divide by zero"); + if (scalar == 0) throw new IllegalArgumentException("Cannot divide by zero"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); a.elements(nDims - 1) @@ -348,7 +350,7 @@ public static FloatNdArray div(float scalar, FloatNdArray a) { * @return the array result of the power operation */ public static FloatNdArray pow(FloatNdArray a, FloatNdArray b) { - if(a.shape().size() != b.shape().size()) + if (a.shape().size() != b.shape().size()) throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -444,10 +446,10 @@ public static float min(FloatNdArray a) { * @param a the first array * @param a the second array * @return the resulting array with the maximum values between each element of the arrays. - * @throws java.lang.AssertionError if the two arrays are not the same size. + * @throws AssertionError if the two arrays are not the same size. */ public static FloatNdArray max(FloatNdArray a, FloatNdArray b) { - if(a.shape().size() != b.shape().size()) + if (a.shape().size() != b.shape().size()) throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); @@ -496,10 +498,10 @@ public static FloatNdArray max(float scalar, FloatNdArray a) { * @param a the first array * @param a the second array * @return the resulting array with the minimum values between each element of the arrays. - * @throws java.lang.AssertionError if the two arrays are not the same size. + * @throws AssertionError if the two arrays are not the same size. */ public static FloatNdArray min(FloatNdArray a, FloatNdArray b) { - if(a.shape().size() != b.shape().size()) + if (a.shape().size() != b.shape().size()) throw new IllegalArgumentException("a and b muse have the same number of dimensions"); FloatNdArray result = NdArrays.ofFloats(a.shape()); int nDims = a.shape().numDimensions(); diff --git a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java similarity index 98% rename from tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java rename to tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java index 1e5393aa2af..3758c832db5 100644 --- a/tensorflow-keras/src/test/java/org/tensorflow/keras/utils/TestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java @@ -12,18 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. =======================================================================*/ -package org.tensorflow.keras.utils; +package org.tensorflow.framework.utils; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.io.PrintWriter; -import java.io.Writer; -import java.util.function.Predicate; -import static org.junit.jupiter.api.Assertions.assertTrue; -import org.tensorflow.EagerSession; -import org.tensorflow.Operand; -import org.tensorflow.Output; -import org.tensorflow.Session; +import org.tensorflow.*; import org.tensorflow.ndarray.FloatNdArray; import org.tensorflow.op.Op; import org.tensorflow.op.Ops; @@ -32,6 +23,14 @@ import org.tensorflow.types.family.TNumber; import org.tensorflow.types.family.TType; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.PrintWriter; +import java.io.Writer; +import java.util.function.Predicate; + +import static org.junit.jupiter.api.Assertions.assertTrue; + /** Base class for Test Session */ public abstract class TestSession implements AutoCloseable { @@ -86,6 +85,15 @@ public void run(Op op) { // empty } + /** + * Get the Graph + * + * @return the graph if in Graph Mode, otherwise null. + */ + public Graph getGraph() { + return null; + } + /** * Evaluate the input against the expected value * diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java deleted file mode 100644 index b0a9dcf7d68..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaDelta.java +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; - -/** - * AdaDelta Optimizer that implements the AdaDelta algorithm. Keras wrapper around the Tensorflow - * Framework optimizer. Adadelta optimization is a stochastic gradient descent method that is based - * on adaptive learning rate per dimension to address two drawbacks: 1) the continual decay of - * learning rates throughout training 2) the need for a manually selected global learning rate - * - *

    Two accumulation steps are required: 1) the accumulation of gradients squared, 2) the - * accumulation of updates squared. - * - */ -public class AdaDelta extends org.tensorflow.framework.optimizers.AdaDelta - implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String RHO_RATE_KEY = "rho"; - public static final String EPSILON_KEY = "epsilon"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float RHO_DEFAULT = 0.95F; - public static final float EPSILON_DEFAULT = 1e-7F; - - private Map config = new HashMap<>(); - private float learningRate; - - private List initializers = new ArrayList<>(); - - - /** - * Create an Adadelta optimizer with default name="Adadelta", learning_rate=0.001F, rho=0.95F, and - * epsilon=1e-7F - * - * @param tf the tensorflow Ops - */ - public AdaDelta(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adadelta optimizer with default learning_rate=0.001F, rho=0.95F, and epsilon=1e-7F - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adadelta" - */ - public AdaDelta(Ops tf, String name) { - this(tf, name, LEARNING_RATE_DEFAULT, RHO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adadelta optimizer with default name="Adadelta", rho=0.95F, and epsilon=1e-7F - * - * @param tf the tensorflow Ops - * @param learningRate The learning rate - */ - public AdaDelta(Ops tf, float learningRate) { - this(tf, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adadelta optimizer with default rho=0.95F, and epsilon=1e-7F - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adadelta" - * @param learningRate The learning rate - */ - public AdaDelta(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, RHO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adadelta optimizer with default name="Adadelta", - * - * @param tf the tensorflow Ops - * @param learningRate The learning rate - * @param rho The decay rate. - * @param epsilon A constant epsilon used to better conditioning the grad update. - */ - public AdaDelta(Ops tf, float learningRate, float rho, float epsilon) { - super(assertGraph(tf), learningRate, rho, epsilon); - initConfig(learningRate, rho, epsilon); - } - - /** - * Create an Adadelta optimizer - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adadelta" - * @param learningRate The learning rate - * @param rho The decay rate. - * @param epsilon A constant epsilon used to better conditioning the grad update. - */ - public AdaDelta(Ops tf, String name, float learningRate, float rho, float epsilon) { - super(assertGraph(tf), name, learningRate, rho, epsilon); - initConfig(learningRate, rho, epsilon); - } - - /** {@inheritDoc} */ - @Override - protected Optional prepare(String name) { - switch (initializers.size()) { - case 0: - return Optional.empty(); - case 1: - return Optional.of(initializers.get(0)); - default: - return Optional.of( tf.withSubScope(name).withControlDependencies(initializers).noOp()); - } - } - - /** - * Create an Adam Optimizer from a config object - * - * @param tf the tensorflow Ops - * @param config a config object to initialize, he config object has keys for "name", - * "learning_rate", "rho" and "epsilon". If a key is missing the default value is used. - */ - public static AdaDelta fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create an Adadelta optimizer - * - * @param tf the tensorflow Ops - * @param config a config object to initialize, the config - * object has keys for "name", "learning_rate", "rho" and "epsilon". If a key is missing the - * default value is used. - */ - public static AdaDelta create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float rho = (float) config.getOrDefault(RHO_RATE_KEY, RHO_DEFAULT); - float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); - if (name == null) // doe this to get the default name - { - return new AdaDelta(tf, learningRate, rho, epsilon); - } else { - return new AdaDelta(tf, name, learningRate, rho, epsilon); - } - } - - /** - * Initialize the configuration based on which constructor is called. - * - * @param learningRate The learning rate - * @param rho The decay rate. - * @param epsilon A constant epsilon used to better conditioning the grad update. - */ - private void initConfig(float learningRate, float rho, float epsilon) { - this.learningRate = learningRate; - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(RHO_RATE_KEY, rho); - config.put(EPSILON_KEY, epsilon); - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } - - -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java deleted file mode 100644 index 039cf4a0d82..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGrad.java +++ /dev/null @@ -1,167 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.Map; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.op.Ops; - -/** - * AdaGrad Optimizer that implements the AdaGrad algorithm. Adagrad is an optimizer with - * parameter-specific learning rates, which are adapted relative to how frequently a parameter gets - * updated during training. The more updates a parameter receives, the smaller the updates. - */ -public class AdaGrad extends org.tensorflow.framework.optimizers.AdaGrad - implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String INITIAL_ACCUM_KEY = "accumulator"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float INITIAL_ACCUM__DEFAULT = 0.1f; - - private Map config = new HashMap<>(); - private float learningRate; - - /** - * Create an AdaGrad Optimizer with name="Adagrad", learningRate=0.001F, and initial - * accumulator=0.1 - * - * @param tf the tensorflow Ops - */ - public AdaGrad(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, INITIAL_ACCUM__DEFAULT); - } - - /** - * Create an AdaGrad Optimizer with learningRate=0.001F, and initial accumulator=0.1 - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adagrad" - */ - public AdaGrad(Ops tf, String name) { - this(tf, name, LEARNING_RATE_DEFAULT, INITIAL_ACCUM__DEFAULT); - } - - /** - * Create an AdaGrad Optimizer with initial accumulator=0.1 - * - * @param tf the tensorflow Ops - * @param learningRate The learning rate. Defaults to 0.001. - */ - public AdaGrad(Ops tf, float learningRate) { - this(tf, learningRate, INITIAL_ACCUM__DEFAULT); - } - - /** - * Create an AdaGrad Optimizer - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adagrad" - * @param learningRate The learning rate. Defaults to 0.01. - */ - public AdaGrad(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, INITIAL_ACCUM__DEFAULT); - } - - /** - * Create an AdaGrad Optimizer - * - * @param tf the tensorflow Ops - * @param learningRate The learning rate - * @param initialAccumulatorValue initial accumulator value - */ - public AdaGrad(Ops tf, float learningRate, float initialAccumulatorValue) { - super(assertGraph(tf), learningRate, initialAccumulatorValue); - initConfig(learningRate, initialAccumulatorValue); - } - - /** - * Create an AdaGrad Optimizer - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adagrad" - * @param learningRate The learning rate - * @param initialAccumulatorValue initial accumulator value, must be >= 0. - */ - public AdaGrad(Ops tf, String name, float learningRate, float initialAccumulatorValue) { - super(assertGraph(tf), name, learningRate, initialAccumulatorValue); - if(initialAccumulatorValue < 0.0F) - throw new IllegalArgumentException( "initial_accumulator_value must be non-negative: " + initialAccumulatorValue); - initConfig(learningRate, initialAccumulatorValue); - } - - /** - * Create an AdaGrad Optimizer from a config object - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize, , the config object has keys for "name", - * "learning_rate" and "accumulator". If a key is missing the default value is used. - */ - public static AdaGrad fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create an AdaGrad Optimizer from a config object - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate" and "accumulator". If a key is missing the default value is used. - */ - public static AdaGrad create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float initialAccumulatorValue = - (float) config.getOrDefault(INITIAL_ACCUM_KEY, INITIAL_ACCUM__DEFAULT); - if (name != null) { - return new AdaGrad(tf, name, learningRate, initialAccumulatorValue); - } else { - return new AdaGrad(tf, learningRate, initialAccumulatorValue); - } - } - - /** - * Initialize the configuration - * - * @param learningRate the learning rate - * @param initialAccumulatorValue the initial Accumulator value - */ - private void initConfig(float learningRate, float initialAccumulatorValue) { - this.learningRate = learningRate; - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(INITIAL_ACCUM_KEY, initialAccumulatorValue); - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java deleted file mode 100644 index 2f15024bf56..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/AdaGradDA.java +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.Map; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.op.Ops; - -/** Optimizer that implements the Adagrad Dual-Averaging algorithm. */ -public class AdaGradDA extends org.tensorflow.framework.optimizers.AdaGradDA - implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String INITIAL_ACCUM_KEY = "accumulator"; - public static final String L1STRENGTH_KEY = "l1Strength"; - public static final String L2STRENGTH_KEY = "l2Strength"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; // arbitray number - public static final float INITIAL_ACCUM__DEFAULT = 0.1f; - public static final float L1STRENGTH_DEFAULT = 0.0F; - public static final float L2STRENGTH_DEFAULT = 0.0F; - - private Map config = new HashMap<>(); - private float learningRate; - - /** - * Create an AdagradDA Optimizer with default values name="adagrad-da". learning_rate=.001, - * initial accumulator= 0.1, l1Strength=0.0, l2Strength=0.0; - * - * @param tf the tensorflow tf - */ - public AdaGradDA(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, INITIAL_ACCUM__DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT); - } - - /** - * Create an AdagradDA Optimizer with default values initial accumulator= 0.1, l1Strength=0.0, - * l2Strength=0.0; - * - * @param tf the tensorflow tf - * @param learningRate The learning rate. - */ - public AdaGradDA(Ops tf, float learningRate) { - this(tf, learningRate, INITIAL_ACCUM__DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT); - } - - /** - * Create an AdagradDA Optimizer with default values initial accumulator= 0.1, l1Strength=0.0, - * l2Strength=0.0; - * - * @param tf the tensorflow tf - * @param name the name of the Optimizer, defaults to "adagrad-da" - * @param learningRate The learning rate. - */ - public AdaGradDA(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, INITIAL_ACCUM__DEFAULT, L1STRENGTH_DEFAULT, L2STRENGTH_DEFAULT); - } - - /** - * Create an AdagradDA Optimizer - * - * @param tf the tensorflow tf - * @param learningRate the learning rate, default is 0.001 - * @param initialAccumulatorValue Starting value for the accumulators, must be >= 0.0. - * @param l1Strength L1 Regularization Strength - * @param l2Strength L2 Regularization Strength - */ - public AdaGradDA( - Ops tf, - float learningRate, - float initialAccumulatorValue, - float l1Strength, - float l2Strength) { - super(assertGraph(tf), learningRate, initialAccumulatorValue, l1Strength, l2Strength); - if( initialAccumulatorValue < 0.0F) - throw new IllegalArgumentException("initial_accumulator_value must be non-negative: " + initialAccumulatorValue); - if(l1Strength < 0) - throw new IllegalArgumentException("l1Strength must be non-negative: " + l1Strength); - if(l2Strength < 0) - throw new IllegalArgumentException("l2Strength must be non-negative: " + l2Strength); - initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); - } - - /** - * Create an AdagradDA Optimizer - * - * @param tf the tensorflow tf - * @param name the name of the Optimizer, defaults to "adagrad-da" - * @param learningRate the learning rate, default is 0.001 - * @param initialAccumulatorValue Starting value for the accumulators, must be positive. - * @param l1Strength L1 Regularization Strength - * @param l2Strength L2 Regularization Strength - */ - public AdaGradDA( - Ops tf, - String name, - float learningRate, - float initialAccumulatorValue, - float l1Strength, - float l2Strength) { - super(assertGraph(tf), name, learningRate, initialAccumulatorValue, l1Strength, l2Strength); - if( initialAccumulatorValue < 0.0F) - throw new IllegalArgumentException("initial_accumulator_value must be non-negative: " + initialAccumulatorValue); - if(l1Strength < 0) - throw new IllegalArgumentException("l1Strength must be non-negative: " + l1Strength); - if(l2Strength < 0) - throw new IllegalArgumentException("l2Strength must be non-negative: " + l2Strength); - initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); - initConfig(learningRate, initialAccumulatorValue, l1Strength, l2Strength); - } - - /** - * Create an AdaGrad Optimizer from a config object - * - * @param tf the tensorflow tf - * @param config a config object to initialize, , the config object has keys for "name", - * "learning_rate", "accumulator", "l1Strength" and "l2Strength". If a key is missing the - * default value is used. - * @return the new AdaGradDA Optimizer - */ - public static AdaGradDA fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create an AdaGradDA Optimizer from a config object - * - * @param tf the tensorflow tf - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate", "accumulator", "l1Strength" and "l2Strength". If a key is missing the - * default value is used. - * @return the new AdaGradDA Optimizer - */ - public static AdaGradDA create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float initialAccumulatorValue = - (float) config.getOrDefault(INITIAL_ACCUM_KEY, INITIAL_ACCUM__DEFAULT); - float l1Strength = (float) config.getOrDefault(L1STRENGTH_KEY, L2STRENGTH_DEFAULT); - float l2Strength = (float) config.getOrDefault(L2STRENGTH_KEY, L2STRENGTH_DEFAULT); - if (name != null) { - return new AdaGradDA(tf, name, learningRate, initialAccumulatorValue, l1Strength, l2Strength); - } else { - return new AdaGradDA(tf, learningRate, initialAccumulatorValue, l1Strength, l2Strength); - } - } - - /** - * Initialize the Optimizer from a config object based on which constructor is called. - * - * @param learningRate the learning rate, default is 0.001 - * @param initialAccumulatorValue Starting value for the accumulators, must be >= 0.0. - * @param l1Strength L1 Regularization Strength - * @param l2Strength L2 Regularization Strength - */ - private void initConfig( - float learningRate, float initialAccumulatorValue, float l1Strength, float l2Strength) { - this.learningRate = learningRate; - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(INITIAL_ACCUM_KEY, initialAccumulatorValue); - config.put(L1STRENGTH_KEY, l1Strength); - config.put(L2STRENGTH_KEY, l2Strength); - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adam.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adam.java deleted file mode 100644 index 5d74c7e27f4..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adam.java +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.Map; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.op.Ops; - -/** Adam Optimizer that implements the Adam algorithm. */ -public class Adam extends org.tensorflow.framework.optimizers.Adam implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String EPSILON_KEY = "epsilon"; - public static final String BETA_ONE_KEY = "beta_1"; - public static final String BETA_TWO_KEY = "beta_2"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float EPSILON_DEFAULT = 1e-07F; - public static final float BETA_ONE_DEFAULT = 0.9F; - public static final float BETA_TWO_DEFAULT = 0.999F; - - private float learningRate; - private Map config = new HashMap<>(); - - /** - * Create an Adam Optimizer - * - * @param tf the tensorflow Ops - */ - public Adam(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adam Optimizer - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adam" - */ - public Adam(Ops tf, String name) { - this(tf, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adam Optimizer - * - * @param tf the tensorflow Ops - * @param learningRate The learning rate. Defaults to 0.001. - */ - public Adam(Ops tf, float learningRate) { - this(tf, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adam Optimizer - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adam" - * @param learningRate The learning rate. Defaults to 0.001. - */ - public Adam(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Adam Optimizer - * - * @param tf the tensorflow Ops - * @param learningRate The learning rate. Defaults to 0.001. - * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. - * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. - * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the - * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm - * 1 of the paper. Defaults to 1e-7. - */ - public Adam(Ops tf, float learningRate, float betaOne, float betaTwo, float epsilon) { - super(assertGraph(tf), learningRate, betaOne, betaTwo, epsilon); - initConfig(learningRate, betaOne, betaTwo, epsilon); - } - - /** - * Create an Adam Optimizer - * - * @param tf the tensorflow Ops - * @param name the name of the Optimizer, defaults to "Adam" - * @param learningRate The learning rate. Defaults to 0.001. - * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. - * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. - * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the - * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm - * 1 of the paper. Defaults to 1e-7. - */ - public Adam( - Ops tf, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { - super(assertGraph(tf), name, learningRate, betaOne, betaTwo, epsilon); - initConfig(learningRate, betaOne, betaTwo, epsilon); - } - - /** - * Create an Adam Optimizer from a config object - * - * @param tf the tensorflow Ops - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate", "epsilon", "beta_1", "beta_2". If a key is missing the default value is - * used. - */ - public static Adam fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create an Adam Optimizer from a config object - * - * @param tf the tensorflow Ops - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate", "epsilon", "beta_1", "beta_2". If a key is missing the default value is - * used. - */ - public static Adam create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); - float betaOne = (float) config.getOrDefault(BETA_ONE_KEY, BETA_ONE_DEFAULT); - float betaTwo = (float) config.getOrDefault(BETA_TWO_KEY, BETA_TWO_DEFAULT); - if (name == null) { - return new Adam(tf, learningRate, betaOne, betaTwo, epsilon); - } else { - return new Adam(tf, name, learningRate, betaOne, betaTwo, epsilon); - } - } - - /** - * Initialize the Optimizer from a config object based on which constructor is called. - * - * @param learningRate The learning rate. Defaults to 0.001. - * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. - * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. - * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the - * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm - * 1 of the paper. Defaults to 1e-7. - */ - protected void initConfig(float learningRate, float betaOne, float betaTwo, float epsilon) { - this.learningRate = learningRate; - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(EPSILON_KEY, epsilon); - config.put(BETA_ONE_KEY, betaOne); - config.put(BETA_TWO_KEY, betaTwo); - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adamax.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adamax.java deleted file mode 100644 index a976a6e51dd..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Adamax.java +++ /dev/null @@ -1,283 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import org.tensorflow.Graph; -import org.tensorflow.Operand; -import org.tensorflow.Output; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.op.Scope; -import org.tensorflow.op.core.Assign; -import org.tensorflow.op.core.Constant; -import org.tensorflow.op.core.Variable; -import org.tensorflow.op.train.ApplyAdaMax; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.family.TType; - -/** Adamax Optimizer that implements the Adamax algorithm. */ -public class Adamax extends org.tensorflow.framework.optimizers.Optimizer - implements OptimizerInterface { - - public static final String FIRST_MOMENT = "m"; - public static final String SECOND_MOMENT = "v"; - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String EPSILON_KEY = "epsilon"; - public static final String BETA_ONE_KEY = "beta_1"; - public static final String BETA_TWO_KEY = "beta_2"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float EPSILON_DEFAULT = 1e-07F; - public static final float BETA_ONE_DEFAULT = 0.9F; - public static final float BETA_TWO_DEFAULT = 0.999F; - - private Scope scope; - private Map config = new HashMap<>(); - - private float learningRate; - private final float betaOne; - private final float betaTwo; - private final float epsilon; - - private Constant learningRateConst; - private Constant epsilonConst; - private Constant betaOneConst; - private Constant betaTwoConst; - private Variable betaOnePower; - - /** - * Create an Optimizer that implements the Adamax algorithm. - * - * @param tf the TensoFlow Ops - */ - public Adamax(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the Adamax algorithm. - * - * @param tf the TensoFlow Ops - * @param name name for the operations Created when applying gradients. Defaults to "Adamax". - */ - public Adamax(Ops tf, String name) { - this(tf, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the Adamax algorithm. - * - * @param tf the TensoFlow Ops - * @param learningRate The learning rate. - */ - public Adamax(Ops tf, float learningRate) { - this(tf, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the Adamax algorithm. - * - * @param tf the TensoFlow Ops - * @param name name for the operations Created when applying gradients. Defaults to "Adamax". - * @param learningRate The learning rate. - */ - public Adamax(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the Adamax algorithm. - * - * @param tf the TensoFlow Ops - * @param learningRate The learning rate. - * @param betaOne The exponential decay rate for the 1st moment estimates. - * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. - * @param epsilon A small constant for numerical stability. - */ - public Adamax(Ops tf, float learningRate, float betaOne, float betaTwo, float epsilon) { - super(assertGraph(tf)); - this.learningRate = learningRate; - this.betaOne = betaOne; - this.betaTwo = betaTwo; - this.epsilon = epsilon; - this.scope = tf.scope(); - initConfig(learningRate, betaOne, betaTwo, epsilon); - } - - /** - * Create an Optimizer that implements the Adamax algorithm. - * - * @param tf the TensoFlow Ops - * @param name name for the operations Created when applying gradients. Defaults to "Adamax". - * @param learningRate The learning rate. - * @param betaOne The exponential decay rate for the 1st moment estimates. - * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. - * @param epsilon A small constant for numerical stability. - */ - public Adamax( - Ops tf, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { - super(assertGraph(tf), name); - this.learningRate = learningRate; - this.betaOne = betaOne; - this.betaTwo = betaTwo; - this.epsilon = epsilon; - this.scope = tf.scope(); - - initConfig(learningRate, betaOne, betaTwo, epsilon); - } - - /** - * Create an Optimizer that implements the Adamax algorithm from a config object - * - * @param tf the TensoFlow Ops - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate", "epsilon", "beta_1", "beta_2". If a key is missing the default value is - * used. - */ - public static Adamax fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create an Optimizer that implements the Adamax algorithm from a config object - * - * @param tf the TensoFlow Ops - * @param config a config object to initialize - */ - public static Adamax create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); - float betaOne = (float) config.getOrDefault(BETA_ONE_KEY, BETA_ONE_DEFAULT); - float betaTwo = (float) config.getOrDefault(BETA_TWO_KEY, BETA_TWO_DEFAULT); - if (name == null) { - return new Adamax(tf, learningRate, betaOne, betaTwo, epsilon); - } else { - return new Adamax(tf, name, learningRate, betaOne, betaTwo, epsilon); - } - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } - - /** {@inheritDoc} */ - @Override - protected Optional prepare(String scopeName) { - betaOneConst = tf.constant(betaOne); - betaTwoConst = tf.constant(betaTwo); - learningRateConst = tf.constant(learningRate); - epsilonConst = tf.constant(epsilon); - - return Optional.empty(); - } - - /** {@inheritDoc} */ - @Override - protected void createSlots(List> variables) { - for (Output v : variables) { - createAdamaxSlot(v.asOutput()); - } - betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); - Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); - ((Graph) tf.scope().env()).addInitializer(betaOnePowerInit); - } - - /** - * Create the first and second moment slots - * - * @param v the variable - * @param the datatype of the variable - */ - private void createAdamaxSlot(Output v) { - Operand firstMomentInitializer = - tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); - createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); - Operand secondMomentInitializer = - tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); - createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); - } - - /** {@inheritDoc} */ - @Override - protected Op applyDense(Output gradient, Output variable) { - Variable firstMomentSlot = getSlot(variable, FIRST_MOMENT).get(); - Variable secondMomentSlot = getSlot(variable, SECOND_MOMENT).get(); - return ApplyAdaMax.create( - scope, - (Operand) variable, - (Operand) firstMomentSlot, - (Operand) secondMomentSlot, - (Operand) tf.dtypes.cast(betaOnePower, gradient.dataType()), - (Operand) tf.dtypes.cast(learningRateConst, gradient.dataType()), - (Operand) tf.dtypes.cast(betaOneConst, gradient.dataType()), - (Operand) tf.dtypes.cast(betaTwoConst, gradient.dataType()), - (Operand) tf.dtypes.cast(epsilonConst, gradient.dataType()), - (Operand) gradient); - } - - /** {@inheritDoc} */ - @Override - protected Op finish(List updateOperations, String name) { - updateOperations.add(tf.assign(betaOnePower, tf.math.mul(betaOnePower, betaOneConst))); - return super.finish(updateOperations, name); - } - - /** {@inheritDoc} */ - @Override - public String getOptimizerName() { - return "Adamax"; - } - - /** - * Initialize the Optimizer from a config object based on which constructor is called. - * - * @param learningRate The learning rate. Defaults to 0.001. - * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. - * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. - * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the - * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm - * 1 of the paper. Defaults to 1e-7. - */ - protected void initConfig(float learningRate, float betaOne, float betaTwo, float epsilon) { - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(EPSILON_KEY, epsilon); - config.put(BETA_ONE_KEY, betaOne); - config.put(BETA_TWO_KEY, betaTwo); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java deleted file mode 100644 index a2eba4ecb49..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Nadam.java +++ /dev/null @@ -1,399 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Optional; - -import org.tensorflow.DataType; -import org.tensorflow.Graph; -import org.tensorflow.Operand; -import org.tensorflow.Output; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Op; -import org.tensorflow.op.Ops; -import org.tensorflow.op.core.Assign; -import org.tensorflow.op.core.Constant; -import org.tensorflow.op.core.Variable; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.family.TType; - -/** Nadam Optimizer that implements the NAdam algorithm. */ -public class Nadam extends org.tensorflow.framework.optimizers.Optimizer - implements OptimizerInterface { - - public static final String FIRST_MOMENT = "m"; - public static final String SECOND_MOMENT = "v"; - public static final String MOMENTUM = "momentum"; - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String EPSILON_KEY = "epsilon"; - public static final String BETA_ONE_KEY = "beta_1"; - public static final String BETA_TWO_KEY = "beta_2"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float EPSILON_DEFAULT = 1e-07F; - public static final float BETA_ONE_DEFAULT = 0.9F; - public static final float BETA_TWO_DEFAULT = 0.999F; - - private final Map config = new HashMap<>(); - - private float learningRate; - private final float betaOne; - private final float betaTwo; - private final float epsilon; - private final float decayBase = 0.96F; - private final float decay = 0.004F; - - private long iterations = 0; - - private Constant learningRateConst; - private Constant betaOneConst; - private Constant betaTwoConst; - private Constant localStepConst; - private Constant nextStepConst; - - private Constant decayBaseConst; - private Constant decayConst; - private Constant epsilonConst; - - private Variable betaOnePower; - private Variable betaTwoPower; - private Variable momentum; - - private Operand m_t; - private Operand m_t_1; - private Operand m_schedule_new; - private Operand m_schedule_next; - private Operand one_minus_beta_1; - private Operand one_minus_beta_2; - private Operand one_minus_m_t; - private Operand one_minus_m_schedule_new; - private Operand one_minus_m_schedule_next; - private Operand v_t_prime_denominator; - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - */ - public Nadam(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - * @param name name for the operations created when applying gradients. Defaults to "Nadam". - */ - public Nadam(Ops tf, String name) { - this(tf, name, LEARNING_RATE_DEFAULT, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. - */ - public Nadam(Ops tf, float learningRate) { - this(tf, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - * @param name name for the operations created when applying gradients. Defaults to "Adamax". - * @param learningRate The learning rate. - */ - public Nadam(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, BETA_ONE_DEFAULT, BETA_TWO_DEFAULT, EPSILON_DEFAULT); - } - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. - * @param betaOne The exponential decay rate for the 1st moment estimates. - * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. - * @param epsilon A small constant for numerical stability. - */ - public Nadam(Ops tf, float learningRate, float betaOne, float betaTwo, float epsilon) { - super(assertGraph(tf)); - this.learningRate = learningRate; - this.betaOne = betaOne; - this.betaTwo = betaTwo; - this.epsilon = epsilon; - initConfig(learningRate, betaOne, betaTwo, epsilon); - } - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - * @param name name for the operations created when applying gradients. - * @param learningRate The learning rate. - * @param betaOne The exponential decay rate for the 1st moment estimates. - * @param betaTwo The exponential decay rate for the exponentially weighted infinity norm. - * @param epsilon A small constant for numerical stability. - */ - public Nadam( - Ops tf, String name, float learningRate, float betaOne, float betaTwo, float epsilon) { - super(assertGraph(tf), name); - this.learningRate = learningRate; - this.betaOne = betaOne; - this.betaTwo = betaTwo; - this.epsilon = epsilon; - - initConfig(learningRate, betaOne, betaTwo, epsilon); - } - - /** - * Create an Optimizer that implements the NAdam algorithm. - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize - */ - public static Nadam create(Ops tf, Map config) { - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); - float betaOne = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float betaTwo = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - if (name == null) { - return new Nadam(tf, learningRate, betaOne, betaTwo, epsilon); - } else { - return new Nadam(tf, name, learningRate, betaOne, betaTwo, epsilon); - } - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } - - /** {@inheritDoc} */ - @Override - protected void createSlots(List> variables) { - for (Output v : variables) { - createNadamSlot(v.asOutput()); - } - betaOnePower = tf.withName("beta1_power").variable(Shape.scalar(), TFloat32.DTYPE); - Assign betaOnePowerInit = tf.assign(betaOnePower, tf.constant(betaOne)); - ((Graph) tf.scope().env()).addInitializer(betaOnePowerInit); - - betaTwoPower = tf.withName("beta2_power").variable(Shape.scalar(), TFloat32.DTYPE); - Assign betaTwoPowerInit = tf.assign(betaTwoPower, tf.constant(betaTwo)); - ((Graph) tf.scope().env()).addInitializer(betaTwoPowerInit); - - momentum = tf.withName("momentum").variable(Shape.scalar(), TFloat32.DTYPE); - Assign momentumInit = tf.assign(momentum, tf.constant(1.0F)); - ((Graph) tf.scope().env()).addInitializer(momentumInit); - } - - /** - * Create slots for first and second momements and momentum - * - * @param v the variable - * @param the data type or the Variable - */ - private void createNadamSlot(Output v) { - Operand firstMomentInitializer = - tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); - createSlot(v.asOutput(), FIRST_MOMENT, firstMomentInitializer); - Operand secondMomentInitializer = - tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(0.0f), v.dataType())); - createSlot(v.asOutput(), SECOND_MOMENT, secondMomentInitializer); - - Operand momentumInitializer = - tf.fill(tf.shape(v), tf.dtypes.cast(tf.constant(1.0f), v.dataType())); - createSlot(v.asOutput(), MOMENTUM, momentumInitializer); - } - - /** {@inheritDoc} */ - @Override - protected Optional prepare(String scopeName) { - Constant one = tf.constant(1.0F); - Constant point5 = tf.constant(0.5F); - - learningRateConst = tf.constant(learningRate); - betaOneConst = tf.constant(betaOne); - betaTwoConst = tf.constant(betaTwo); - localStepConst = tf.constant(this.iterations + 1); - nextStepConst = tf.constant(this.iterations + 2); - decayConst = tf.constant(decay); - decayBaseConst = tf.constant(this.decayBase); - epsilonConst = tf.constant(this.epsilon); - - // m_t = beta_1_t * (1. - 0.5 * ( math_ops.pow(decay_base, self._initial_decay * local_step))) - m_t = - tf.math.mul( - betaOneConst, - tf.math.sub( - one, - tf.math.mul( - point5, - tf.math.pow( - decayBaseConst, - tf.math.mul(decayConst, tf.dtypes.cast(localStepConst, TFloat32.DTYPE)))))); - // m_t_1 = beta_1_t * (1. - 0.5 * ( math_ops.pow(decay_base, self._initial_decay * next_step))) - m_t_1 = - tf.math.mul( - betaOneConst, - tf.math.sub( - one, - tf.math.mul( - point5, - tf.math.pow( - decayBaseConst, - tf.math.mul(decayConst, tf.dtypes.cast(nextStepConst, TFloat32.DTYPE)))))); - - // m_schedule_new = math_ops.cast(self._m_cache_read, var_dtype) * m_t - m_schedule_new = tf.math.mul(momentum, m_t); - // if var_dtype is self._m_cache.dtype: - // m_schedule_new = array_ops.identity(state_ops.assign( - // self._m_cache, m_schedule_new, use_locking=self._use_locking)) - m_schedule_new = tf.identity(tf.assign(momentum, m_schedule_new, Assign.useLocking(true))); - // m_schedule_next = m_schedule_new * m_t_1 - m_schedule_next = tf.math.mul(m_schedule_new, m_t_1); - - // 1 - beta_1_t - one_minus_beta_1 = tf.math.sub(one, betaOneConst); - // 1 - beta_2_t, - one_minus_beta_2 = tf.math.sub(one, betaTwoConst); - // 1. - m_t, - one_minus_m_t = tf.math.sub(one, m_t); - // 1. - m_schedule_new - one_minus_m_schedule_new = tf.math.sub(one, m_schedule_new); - // 1. - m_schedule_next - one_minus_m_schedule_next = tf.math.sub(one, m_schedule_next); - // 1. - math_ops.pow(beta_2_t, local_step) - v_t_prime_denominator = - tf.math.sub(one, tf.math.pow(betaTwoConst, tf.dtypes.cast(localStepConst, TFloat32.DTYPE))); - return Optional.empty(); - } - - /** {@inheritDoc} */ - @Override - protected Op applyDense(Output gradient, Output variable) { - DataType dType = gradient.dataType(); - Variable m = getSlot(variable, FIRST_MOMENT).get(); // first Moment - Variable v = getSlot(variable, SECOND_MOMENT).get(); // Second Moment - - // g_prime = grad / coefficients['one_minus_m_schedule_new'] - Operand g_prime = tf.math.div(gradient, tf.dtypes.cast(one_minus_m_schedule_new, dType)); - // m_t = (coefficients['beta_1_t'] * m + coefficients['one_minus_beta_1_t'] * grad) - Operand m_t = - tf.math.add( - tf.math.mul(tf.dtypes.cast(betaOneConst, dType), m), - tf.math.mul(tf.dtypes.cast(one_minus_beta_1, dType), gradient)); - // m_t = state_ops.assign(m, m_t, use_locking=self._use_locking) - // update m - m_t = tf.assign(m, m_t, Assign.useLocking(true)); - - // m_t_prime = m_t / coefficients['one_minus_m_schedule_next'] - Operand m_t_prime = tf.math.div(m_t, tf.dtypes.cast(one_minus_m_schedule_next, dType)); - - // v_t = (coefficients['beta_2_t'] * v + coefficients['one_minus_beta_2_t'] * - // math_ops.square(grad)) - Operand v_t = - tf.math.add( - tf.math.mul(tf.dtypes.cast(betaTwoConst, dType), v), - tf.math.mul(tf.dtypes.cast(one_minus_beta_2, dType), tf.math.square(gradient))); - // v_t = state_ops.assign(v, v_t, use_locking=self._use_locking) - // update v - v_t = tf.assign(v, v_t, Assign.useLocking(true)); - - // v_t_prime = v_t / coefficients['v_t_prime_denominator'] - Operand v_t_prime = tf.math.div(v_t, tf.dtypes.cast(v_t_prime_denominator, dType)); - - // m_t_bar = (coefficients['one_minus_m_t'] * g_prime + coefficients['m_t_1'] * m_t_prime) - Operand m_t_bar = - tf.math.add( - tf.math.mul(tf.dtypes.cast(one_minus_m_t, dType), g_prime), - tf.math.mul(tf.dtypes.cast(m_t_1, dType), m_t_prime)); - // var_t = var - coefficients['lr_t'] * m_t_bar / (math_ops.sqrt(v_t_prime) + - // coefficients['epsilon']) - Operand var_t = - tf.math.sub( - variable, - tf.math.div( - tf.math.mul(tf.dtypes.cast(learningRateConst, dType), m_t_bar), - tf.math.add(tf.math.sqrt(v_t_prime), tf.dtypes.cast(epsilonConst, dType)))); - // assign(var, var_t, use_locking=self._use_locking) - return tf.assign(variable, var_t, Assign.useLocking(true)); - } - - /** - * Gathers up the update operations into a single op that can be used as a run target. - * - *

    Adds the betaOne, betaTwo and mu updates to the end of the updates list. - * - * @param updateOperations The update operations. - * @param name The name of the run target. - * @return A NoOp with a control dependency on each update operation. - */ - @Override - protected Op finish(List updateOperations, String name) { - iterations++; // increment the step; - updateOperations.add(tf.assign(betaOnePower, tf.math.mul(betaOnePower, betaOneConst))); - updateOperations.add(tf.assign(betaTwoPower, tf.math.mul(betaTwoPower, betaTwoConst))); - return super.finish(updateOperations, name); - } - - /** {@inheritDoc} */ - @Override - public String getOptimizerName() { - return "Nadam"; - } - - /** - * Sets the config object based on the current state of the Optmizer. - * - * @param learningRate The learning rate. Defaults to 0.001. - * @param betaOne The exponential decay rate for the 1st moment estimates. Defaults to 0.9. - * @param betaTwo The exponential decay rate for the 2nd moment estimates. Defaults to 0.999. - * @param epsilon A small constant for numerical stability. This epsilon is "epsilon hat" in the - * Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm - * 1 of the paper. Defaults to 1e-7. - */ - private void initConfig(float learningRate, float betaOne, float betaTwo, float epsilon) { - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(EPSILON_KEY, epsilon); - config.put(BETA_ONE_KEY, betaOne); - config.put(BETA_TWO_KEY, betaTwo); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java deleted file mode 100644 index 0074ecb0f0a..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/OptimizerInterface.java +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.Map; -import org.tensorflow.Graph; -import org.tensorflow.op.Ops; - -/** The main Interface for Keras Optimizers */ -public interface OptimizerInterface { - - /** The value for the name key in the Config object */ - String NAME_KEY = "name"; - - /** - * Get a TensorFlow Graph from the Ops. - * - * @param tf the TensorFlow Ops - * @return the graph - * @throws java.lang.IllegalArgumentException if the TensorFlow Ops does not represent Graph mode - */ - static Graph assertGraph(Ops tf) { - if(!tf.scope().env().isGraph()) { - throw new IllegalArgumentException("Invalid environment, Optimizers can only be used in Graph Mode"); - } - return (Graph) tf.scope().env(); - } - - /** - * Return the config object used to initialize the Optimizer - * - * @return the config object used to initialize the Optimizer - */ - Map getConfig(); - - /** - * Return the current learning rate - * - * @return the current learning rate - */ - float getLearningRate(); - - /** - * Set the learning rate - * - * @param learningRate the learning rate; - */ - void setLearningRate(float learningRate); -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java deleted file mode 100644 index 1facb307b38..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/Optimizers.java +++ /dev/null @@ -1,125 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import org.tensorflow.framework.optimizers.Optimizer; -import org.tensorflow.op.Ops; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.function.Supplier; - -/** - * Functions to get an Optimizer based on String name, an Optimizer class, or lambda function. - * - *

    Example: - * - *

    - *     Adam instance = Optimizers.get(tf, "adam");
    - *     Ftrl instance = Optimizers.get(tf, ltf -> new Ftrl(ltf, 0.1f);
    - * 
    - */ -public class Optimizers { - - static Map> map = - new HashMap>() { - { - put("adadelta", AdaDelta::new); - put("adagrad", AdaGrad::new); - put("adagrad-da", AdaGradDA::new); - put("adam", Adam::new); - put("adamax", Adamax::new); - put("ftrl", Ftrl::new); - put("nadam", Nadam::new); - put("rmsprop", RMSProp::new); - put("sgd", SGD::new); - } - }; - - /** - * Get an Optimizer - * - * @param optimizerFunction either a String that identifies the Optimizer, an Optimizer class, or - * an Optimizer object. - * @return the Optimizer object or null if not found. - */ - public static Optimizer get(Ops tf, Object optimizerFunction) { - return get(tf, optimizerFunction, null); - } - - /** - * Get an Optimizer - * - * @param func a lamda function that returns the Optimizer - * @return the Intializer object - */ - public static Optimizer get(Ops tf, Function func) { - return func.apply(tf); - } - - /** - * Get an Optimizer - * - * @param optimizerFunction either a String that identifies the Optimizer, an Optimizer class, or - * * an Optimizer object. - * @param custom_functions a map of Optimizer lambdas that will be queried if the Optimizer is - * not found in the standard keys - * @return the Optimizer object - */ - public static Optimizer get( - Ops tf, Object optimizerFunction, Map> custom_functions) { - if (optimizerFunction != null) { - if (optimizerFunction instanceof String) { - String s = - optimizerFunction - .toString(); // do this for Java 8 rather than Pattern Matching for instanceof - Function function = map.get(s); - if (function == null && custom_functions != null) { - function = custom_functions.get(s); - } - return function != null ? function.apply(tf) : null; - } else if (optimizerFunction instanceof Class) { - // do this for Java 8 rather than Pattern Matching for instanceof - Class c = (Class) optimizerFunction; - try { - Constructor ctor = c.getConstructor(Ops.class); - return (Optimizer) ctor.newInstance(tf); - } catch (NoSuchMethodException - | InstantiationException - | IllegalAccessException - | IllegalArgumentException - | InvocationTargetException ex) { - Logger.getLogger(Optimizers.class.getName()).log(Level.SEVERE, null, ex); - } - } else if (optimizerFunction instanceof Optimizer) { - return (Optimizer) optimizerFunction; - } else if (optimizerFunction instanceof Function) { - return ((Function) optimizerFunction).apply(tf); - } else if (optimizerFunction instanceof Supplier) { - return ((Supplier) optimizerFunction).get(); - } - } else { - return null; - } - - throw new IllegalArgumentException( - "optimizerFunction must be a symbolic name, Optimizer, Function, Supplier or a Class object"); - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/RMSProp.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/RMSProp.java deleted file mode 100644 index c66c6bdd388..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/RMSProp.java +++ /dev/null @@ -1,201 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.Map; -import static org.tensorflow.keras.optimizers.OptimizerInterface.NAME_KEY; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.op.Ops; - -/** RMSProp Optimizer that implements the RMSProp algorithm. */ -public class RMSProp extends org.tensorflow.framework.optimizers.RMSProp - implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String DECAY_KEY = "decay"; - public static final String MOMENTUM_KEY = "momentum"; - public static final String EPSILON_KEY = "epsilon"; - public static final String CENTERED_KEY = "centered"; - - public static final float LEARNING_RATE_DEFAULT = 0.001F; - public static final float DECAY_DEFAULT = 0.9F; - public static final float MOMENTUM_DEFAULT = 0.0F; - public static final float EPSILON_DEFAULT = 1e-07F; - public static final boolean CENTERED_DEFAULT = false; - - private Map config = new HashMap<>(); - private float learningRate; - - /** - * Create an RMSProp Optimizer with the following defaults, name="RMSProp", learning_rate=0.001, - * decay=0.9, momentum=0.0, epsilon=1e-07, centered=false - * - * @param tf the TensorFlow Ops - */ - public RMSProp(Ops tf) { - this( - tf, - LEARNING_RATE_DEFAULT, - DECAY_DEFAULT, - MOMENTUM_DEFAULT, - EPSILON_DEFAULT, - CENTERED_DEFAULT); - } - - /** - * Create an RMSProp Optimizer with the following defaults, name="RMSProp", decay=0.9, - * momentum=0.0, epsilon=1e-07, centered=false - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. - */ - public RMSProp(Ops tf, float learningRate) { - this(tf, learningRate, DECAY_DEFAULT, MOMENTUM_DEFAULT, EPSILON_DEFAULT, CENTERED_DEFAULT); - } - - /** - * Create an RMSProp Optimizer with the following defaults, decay=0.9, momentum=0.0, - * epsilon=1e-07, centered=false - * - * @param tf the TensorFlow Ops - * @param name prefix for the operations created when applying gradients. Defaults to "RMSProp" - * @param learningRate The learning rate. - */ - public RMSProp(Ops tf, String name, float learningRate) { - this( - tf, name, learningRate, DECAY_DEFAULT, MOMENTUM_DEFAULT, EPSILON_DEFAULT, CENTERED_DEFAULT); - } - - /** - * Create an RMSProp Optimizer - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. Defaults to 0.001. - * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. - * @param momentum hyperparameter that accelerates descent in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - * @param epsilon A small constant for numerical stability. - * @param centered If True, gradients are normalized by the estimated variance of the gradient; if - * False, by the uncentered second moment. - */ - public RMSProp( - Ops tf, float learningRate, float decay, float momentum, float epsilon, boolean centered) { - super(assertGraph(tf), learningRate, decay, momentum, epsilon, centered); - initConfig(learningRate, decay, momentum, epsilon, centered); - } - - /** - * Create an RMSProp Optimizer - * - * @param tf the TensorFlow Ops - * @param name prefix for the operations created when applying gradients. Defaults to "RMSProp" - * @param learningRate The learning rate. Defaults to 0.001. - * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. - * @param momentum hyperparameter that accelerates descent in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - * @param epsilon A small constant for numerical stability. - * @param centered If True, gradients are normalized by the estimated variance of the gradient; if - * False, by the uncentered second moment. - */ - public RMSProp( - Ops tf, - String name, - float learningRate, - float decay, - float momentum, - float epsilon, - boolean centered) { - super(assertGraph(tf), name, learningRate, decay, momentum, epsilon, centered); - initConfig(learningRate, decay, momentum, epsilon, centered); - } - - /** - * Create a RMSProp Optimizer using a configuration - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize the Optimizer, the config object has keys for - * "name", "learning_rate", "decay", "momentum", "epsilon" and "centered". If a key is missing - * the default value is used. - * @return the RMSProp optimizer - */ - public static RMSProp fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create a RMSProp Optimizer using a configuration - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize the Optimizer, the config object has keys for - * "name", "learning_rate", "decay", "momentum", "epsilon" and "centered". If a key is missing - * the default value is used. - * @return the RMSProp optimizer - */ - public static RMSProp create(Ops tf, Map config) { - - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float decay = (float) config.getOrDefault(DECAY_KEY, DECAY_DEFAULT); - float momentum = (float) config.getOrDefault(MOMENTUM_KEY, MOMENTUM_DEFAULT); - float epsilon = (float) config.getOrDefault(EPSILON_KEY, EPSILON_DEFAULT); - boolean centered = (boolean) config.getOrDefault(CENTERED_KEY, CENTERED_DEFAULT); - if (name == null) { - return new RMSProp(tf, learningRate, decay, momentum, epsilon, centered); - } else { - return new RMSProp(tf, name, learningRate, decay, momentum, epsilon, centered); - } - } - - /** - * Initialize the configuration based on which constructor is called. - * - * @param learningRate The learning rate. Defaults to 0.001. - * @param decay Discounting factor for the history/coming gradient. Defaults to 0.9. - * @param momentum hyperparameter that accelerates descent in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - * @param epsilon A small constant for numerical stability. - * @param centered If True, gradients are normalized by the estimated variance of the gradient; if - * False, by the uncentered second moment. - */ - private void initConfig( - float learningRate, float decay, float momentum, float epsilon, boolean centered) { - this.learningRate = learningRate; - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(DECAY_KEY, decay); - config.put(MOMENTUM_KEY, momentum); - config.put(EPSILON_KEY, epsilon); - config.put(CENTERED_KEY, centered); - } - - /** {@inheritDoc} */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } -} diff --git a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java b/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java deleted file mode 100644 index f89682f6820..00000000000 --- a/tensorflow-keras/src/main/java/org/tensorflow/keras/optimizers/SGD.java +++ /dev/null @@ -1,200 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the ); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.keras.optimizers; - -import java.util.HashMap; -import java.util.Map; -import static org.tensorflow.keras.optimizers.OptimizerInterface.assertGraph; -import org.tensorflow.op.Ops; - -/** Stochastic Gradient Descent and momentum optimizer. */ -public class SGD extends org.tensorflow.framework.optimizers.Momentum - implements OptimizerInterface { - - public static final String LEARNING_RATE_KEY = "learning_rate"; - public static final String MOMENTUM_KEY = "momentum"; - public static final String NESTEROV_KEY = "nesterov"; - - public static final float LEARNING_RATE_DEFAULT = 0.01F; - public static final float MOMENTUM_DEFAULT = 0.0F; - public static final boolean NESTEROV_DEFAULT = false; - - private Map config = new HashMap<>(); - private float learningRate; - - /** - * Create a Stochastic Gradient Descent optimizer using defaults: name="SGD", learning_rate=0.01, - * momentum=0.0, and nesterov=false - * - * @param tf the TensorFlow Ops - */ - public SGD(Ops tf) { - this(tf, LEARNING_RATE_DEFAULT, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); - } - - /** - * Create a Stochastic gradient descent optimizer using defaults: name="SGD", momentum=0.0, and - * nesterov=false - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. Defaults to 0.01. - */ - public SGD(Ops tf, float learningRate) { - this(tf, learningRate, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); - } - - /** - * Create a Stochastic gradient descent optimizer using defaults: name="SGD", and nesterov=false - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. Defaults to 0.01. - * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - */ - public SGD(Ops tf, float learningRate, float momentum) { - this(tf, learningRate, momentum, NESTEROV_DEFAULT); - } - - /** - * Create a Stochastic gradient descent optimizer using defaults: momentum=0.0, and nesterov=false - * - * @param tf the TensorFlow Ops - * @param name prefix for the operations created when applying gradients - * @param learningRate The learning rate. Defaults to 0.01. - */ - public SGD(Ops tf, String name, float learningRate) { - this(tf, name, learningRate, MOMENTUM_DEFAULT, NESTEROV_DEFAULT); - } - - /** - * create a Stochastic gradient descent optimizer using defaults: momentum=0.0, and nesterov=false - * - * @param tf the TensorFlow Ops - * @param name prefix for the operations created when applying gradients - * @param learningRate The learning rate. Defaults to 0.01. - * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - */ - public SGD(Ops tf, String name, float learningRate, float momentum) { - this(tf, name, learningRate, momentum, NESTEROV_DEFAULT); - } - - /** - * Create a Stochastic gradient descent optimizer - * - * @param tf the TensorFlow Ops - * @param learningRate The learning rate. Defaults to 0.01. - * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - * @param useNesterov Whether to apply Nesterov momentum. Defaults to `false`. - */ - public SGD(Ops tf, float learningRate, float momentum, boolean useNesterov) { - super(assertGraph(tf), learningRate, momentum, useNesterov); - if(momentum < 0 || momentum > 1) - throw new IllegalArgumentException("\"momentum\" must be between [0, 1]."); - initConfig(learningRate, momentum, useNesterov); - } - - /** - * Create a Stochastic gradient descent optimizer - * - * @param tf the TensorFlow Ops - * @param name prefix for the operations created when applying gradients - * @param learningRate The learning rate. Defaults to 0.01. - * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - * @param useNesterov Whether to apply Nesterov momentum. Defaults to `false`. - */ - public SGD(Ops tf, String name, float learningRate, float momentum, boolean useNesterov) { - super(assertGraph(tf), name, learningRate, momentum, useNesterov); - if(momentum < 0 || momentum > 1) - throw new IllegalArgumentException("\"momentum\" must be between [0, 1]."); - initConfig(learningRate, momentum, useNesterov); - } - - /** - * Create a Stochastic gradient descent optimizer - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate", "momentum", and "nesterov". If a key is missing the default value is used. - * @return the Stochastic gradient descent optimizer - */ - public static SGD fromConfig(Ops tf, Map config) { - return create(tf, config); - } - - /** - * Create a Stochastic gradient descent optimizer - * - * @param tf the TensorFlow Ops - * @param config a config object to initialize, the config object has keys for "name", - * "learning_rate", "momentum", and "nesterov". If a key is missing the default value is used. - * @return the Stochastic gradient descent optimizer - */ - public static SGD create(Ops tf, Map config) { - - String name = (String) config.get(NAME_KEY); - float learningRate = (float) config.getOrDefault(LEARNING_RATE_KEY, LEARNING_RATE_DEFAULT); - float momentum = (float) config.getOrDefault(MOMENTUM_KEY, MOMENTUM_DEFAULT); - boolean nesterov = (boolean) config.getOrDefault(NESTEROV_KEY, NESTEROV_DEFAULT); - if (name == null) { - return new SGD(tf, learningRate, momentum, nesterov); - } else { - return new SGD(tf, name, learningRate, momentum, nesterov); - } - } - - /** - * Initialize the configuration ased on which constructor is called. - * - * @param learningRate learningRate The learning rate. Defaults to 0.01. - * @param momentum hyperparameter that accelerates SGD in the relevant direction and dampens - * oscillations. Must be between [0, 1]. - * @param useNesterov Whether to apply Nesterov momentum. Defaults to `false`. - */ - private void initConfig(float learningRate, float momentum, boolean useNesterov) { - this.learningRate = learningRate; - config.put(NAME_KEY, this.getOptimizerName()); - config.put(LEARNING_RATE_KEY, learningRate); - config.put(MOMENTUM_KEY, momentum); - config.put(NESTEROV_KEY, useNesterov); - } - - /** { @inheritDoc } */ - @Override - public Map getConfig() { - return config; - } - - /** {@inheritDoc} */ - @Override - public float getLearningRate() { - return this.learningRate; - } - - /** {@inheritDoc} */ - @Override - public void setLearningRate(float learningRate) { - this.learningRate = learningRate; - } - - // overide the momentum name to return "SGD" - /** {@inheritDoc} */ - @Override - public String getOptimizerName() { - return "SGD"; - } -} From ebefc2ea54b2f3d53b8b8f92912175eac50330d0 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 9 Sep 2020 16:17:37 -0400 Subject: [PATCH 31/55] Fixed generics --- .../op/nn/SoftmaxCrossEntropyWithLogits.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java index 8447b985bb0..0c8bac697ed 100644 --- a/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java +++ b/tensorflow-core/tensorflow-core-api/src/main/java/org/tensorflow/op/nn/SoftmaxCrossEntropyWithLogits.java @@ -64,52 +64,55 @@ public class SoftmaxCrossEntropyWithLogits { * @param logits Per-label activations, typically a linear output. These activation energies are * interpreted as unnormalized log probabilities. * @param axis The class dimension. -1 is the last dimension. - * @param the data type of the logits * @param the number type of the operands * @return the softmax cross entropy loss. Its type is the same as logits and its * shape is the same as labels except that it does not have the last dimension of * labels. */ @Endpoint(name = "softmaxCrossEntropyWithLogits") - public static Operand softmaxCrossEntropyWithLogits( - Scope scope, Operand labels, Operand logits, int axis) { + public static Operand softmaxCrossEntropyWithLogits( + Scope scope, Operand labels, Operand logits, int axis) { scope = scope.withSubScope("SoftmaxCrossEntropyWithLogits"); axis = axis % logits.asOutput().shape().numDimensions(); if (axis < 0) { axis += logits.asOutput().shape().numDimensions(); } - Operand preciseLogits = - (Operand) - logits; // cannot use generics cause logits of bool gets cast to TFloat32 boolean convertToFloat32 = logits.asOutput().dataType() == TFloat16.DTYPE || logits.asOutput().dataType() == TBfloat16.DTYPE; if (convertToFloat32) { - preciseLogits = Cast.create(scope, logits, TFloat32.DTYPE); + Operand result = softmaxCrossEntropyWithLogits(scope, + Cast.create(scope, labels, TFloat32.DTYPE), + Cast.create(scope, logits, TFloat32.DTYPE), + axis); + return Cast.create(scope, result, logits.asOutput().dataType()); + } else if(!logits.asOutput().dataType().equals(labels.asOutput().dataType())) { + return softmaxCrossEntropyWithLogits(scope, + Cast.create(scope, labels, logits.asOutput().dataType()), + logits, + axis); } - /* cannot use generics on DataType because preciseLogits may have been cast. */ - DataType dtype = preciseLogits.asOutput().dataType(); - Operand castLabels = Cast.create(scope, labels, dtype); - Operand inputRank = Cast.create(scope, Rank.create(scope, preciseLogits), TInt64.DTYPE); + + Operand inputRank = Cast.create(scope, Rank.create(scope, logits), TInt64.DTYPE); Shape shape = logits.asOutput().shape(); // Move the dim to the end if dim is not the last dimension. - if (axis != -1 && axis != preciseLogits.asOutput().shape().numDimensions() - 1) { - preciseLogits = moveDimToEnd(scope, preciseLogits, axis, inputRank); - castLabels = moveDimToEnd(scope, castLabels, axis, inputRank); + if (axis != -1 && axis != logits.asOutput().shape().numDimensions() - 1) { + logits = moveDimToEnd(scope, logits, axis, inputRank); + labels = moveDimToEnd(scope, labels, axis, inputRank); } - Shape inputShape = preciseLogits.asOutput().shape(); - preciseLogits = flattenOuterDims(scope, preciseLogits); - castLabels = flattenOuterDims(scope, castLabels); + Shape inputShape = logits.asOutput().shape(); + logits = flattenOuterDims(scope, logits); + labels = flattenOuterDims(scope, labels); - org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits smax = + org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits smax = org.tensorflow.op.nn.raw.SoftmaxCrossEntropyWithLogits.create( - scope, preciseLogits, castLabels); + scope, logits, (Operand)labels); /* cannot use generic on cost, because cost may be recast later. */ - Operand cost = smax.loss(); + Operand cost = smax.loss(); Operand outputShape = Slice.create( scope, @@ -132,9 +135,6 @@ public static Operand softmaxCrossEntrop cost = Reshape.create(scope, cost, Constant.vectorOf(scope, newArray)); } - if (convertToFloat32) { - cost = Cast.create(scope, cost, logits.asOutput().dataType()); - } return cost; } @@ -195,7 +195,7 @@ private static Operand flattenOuterDims(Scope scope, Oper * @param the data type of the rank * @return the reshaped input */ - private static Operand moveDimToEnd( + private static Operand moveDimToEnd( Scope scope, Operand input, int dimIndex, Operand rank) { DataType rankDType = rank.asOutput().dataType(); Operand one = Cast.create(scope, Constant.scalarOf(scope, 1), rankDType); From 7915e6309e9db7a536cda24eac8264578cdbfe31 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 9 Sep 2020 19:03:09 -0400 Subject: [PATCH 32/55] Fixed from Unit test results --- .../annotations/org/tensorflow/op/NnOps.java | 5 +- .../framework/optimizers/Optimizer.java | 8 + .../framework/optimizers/Optimizers.java | 2 +- .../framework/optimizers/AdaGradDATest.java | 11 +- .../framework/optimizers/AdaGradTest.java | 19 +- .../framework/optimizers/AdamTest.java | 17 +- .../framework/optimizers/AdamaxTest.java | 8 +- .../framework/utils/EagerTestSession.java | 311 +++++--------- .../framework/utils/GraphTestSession.java | 382 ++++++------------ .../framework/utils/TestSession.java | 209 +++++----- 10 files changed, 363 insertions(+), 609 deletions(-) diff --git a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java index e15cccdd339..33caf02d890 100644 --- a/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java +++ b/tensorflow-core/tensorflow-core-api/src/gen/annotations/org/tensorflow/op/NnOps.java @@ -1863,14 +1863,13 @@ public Softmax softmax(Operand logits) { * @param logits Per-label activations, typically a linear output. These activation energies are * interpreted as unnormalized log probabilities. * @param axis The class dimension. -1 is the last dimension. - * @param the data type of the logits * @param the number type of the operands * @return the softmax cross entropy loss. Its type is the same as logits and its * shape is the same as labels except that it does not have the last dimension of * labels. */ - public Operand softmaxCrossEntropyWithLogits( - Operand labels, Operand logits, int axis) { + public Operand softmaxCrossEntropyWithLogits( + Operand labels, Operand logits, int axis) { return SoftmaxCrossEntropyWithLogits.softmaxCrossEntropyWithLogits(scope, labels, logits, axis); } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java index f7032d18b38..933a54c7670 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizer.java @@ -71,6 +71,14 @@ protected Optimizer(Graph graph, String name) { this.globals = new ArrayList<>(); } + /** + * Gets the Optimizer's Ops instance + * @return the Optimizer's Ops instance + */ + public final Ops getTF() { + return tf; + } + /** * Creates a name by combining a variable name and a slot name * diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java index 7099a050d3e..8d7f9620984 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/optimizers/Optimizers.java @@ -15,7 +15,7 @@ public enum Optimizers { NADAM(Nadam::new), RMSPROP(RMSProp::new), MOMENTUM(Momentum::new), - GRADIENT_DESCENT(Momentum::new); + GRADIENT_DESCENT(GradientDescent::new); private final Function creator; diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java index e1a12fb00fe..ef9053ff1eb 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradDATest.java @@ -55,9 +55,13 @@ public void testBasic() { float[] grads0Init = {0.1F, 0.2F}; float[] grads1Init = {0.01F, 0.02F}; try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); Graph graph = session.getGraph(); + float learningRate = 3.0F; + + AdaGradDA instance = new AdaGradDA(graph, learningRate); + Ops tf = instance.getTF(); + Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); @@ -70,13 +74,10 @@ public void testBasic() { Constant grads1 = tf.constant(grads1Init); /* initialize the local variables */ - /* initialize the local variables */ + session.run(var0Initializer); session.run(var1Initializer); - float learningRate = 3.0F; - - AdaGrad instance = new AdaGrad(graph, learningRate); /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java index efbdd7be585..c5ae178b84c 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdaGradTest.java @@ -71,9 +71,12 @@ public void testBasic() { FloatNdArray accum1Np = NdArrays.vectorOf(accum1); try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); Graph graph = session.getGraph(); + float learningRate = 3.0F; + AdaGrad instance = new AdaGrad(graph, learningRate, 0.1f); + Ops tf = instance.getTF(); + Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); @@ -85,9 +88,7 @@ public void testBasic() { Constant grads0 = tf.constant(grads0Init); Constant grads1 = tf.constant(grads1Init); - float learningRate = 3.0F; - AdaGrad instance = new AdaGrad(graph, learningRate); /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); @@ -116,15 +117,11 @@ public void testBasic() { for (int step = 0; step < numSteps; step++) { session.run(adaUpdate); - - accum0Np = caclulateAccum(accum0Np, grads0Np); - var0Np = calculate(var0Np, accum0Np, grads0Np, learningRate); - session.evaluate(var0Np, var0); - - accum1Np = caclulateAccum(accum1Np, grads1Np); - var1Np = calculate(var1Np, accum1Np, grads1Np, learningRate); - session.evaluate(var1Np, var1); } + float[] expected0 = {-1.6026098728179932f, -0.6026098728179932f}; + session.evaluate(expected0, var0); + float[] expected1 = {2.715679168701172f, 3.715679168701172f}; + session.evaluate(expected1, var1); } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java index dbcc7c0dae2..1aeed5a9772 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java @@ -69,10 +69,15 @@ public void testBasic() { float epsilon1 = 1e-3F; try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); + float learningRate = 0.001F; + float beta1 = 0.9F; + float beta2 = 0.999F; Graph graph = session.getGraph(); + session.setEpsilon(epsilon1); + Adam instance = new Adam(graph, learningRate); + Ops tf = instance.getTF(); Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); @@ -88,16 +93,14 @@ public void testBasic() { session.run(var0Initializer); session.run(var1Initializer); - float learningRate = 0.001F; - float beta1 = 0.9F; - float beta2 = 0.999F; + /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new Optimizer.GradAndVar<>(grads0.asOutput(), var0.asOutput())); gradsAndVars.add(new Optimizer.GradAndVar<>(grads1.asOutput(), var1.asOutput())); - Adam instance = new Adam(graph, learningRate); + Op update = instance.applyGradients(gradsAndVars, "AdamTest"); @@ -139,7 +142,7 @@ public void testBasic() { session .getGraphSession() .runner() - .fetch("beta1Power") + .fetch("beta1_power") .run() .get(0) .expect(TFloat32.DTYPE)) { @@ -149,7 +152,7 @@ public void testBasic() { session .getGraphSession() .runner() - .fetch("beta2Power") + .fetch("beta2_power") .run() .get(0) .expect(TFloat32.DTYPE)) { diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java index 1b12a2f76a1..de17395f76a 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamaxTest.java @@ -94,9 +94,11 @@ public void testBasic() { float epsilon1 = 1e-3F; try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); Graph graph = session.getGraph(); + Adamax instance = new Adamax(graph); + Ops tf = instance.getTF(); + Shape shape0 = Shape.of(var0Init.length); Shape shape1 = Shape.of(var1Init.length); Variable var0 = tf.withName("var0").variable(shape0, TFloat32.DTYPE); @@ -112,7 +114,7 @@ public void testBasic() { session.run(var0Initializer); session.run(var1Initializer); - Adamax instance = new Adamax(graph); + /* build the GradsAnvVars */ List> gradsAndVars = new ArrayList<>(); gradsAndVars.add(new GradAndVar<>(grads0.asOutput(), var0.asOutput())); @@ -151,7 +153,7 @@ public void testBasic() { session .getGraphSession() .runner() - .fetch("beta1Power") + .fetch("beta1_power") .run() .get(0) .expect(TFloat32.DTYPE)) { diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java index c52168e1f11..9fb9885505c 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java @@ -16,6 +16,7 @@ import org.tensorflow.*; import org.tensorflow.ndarray.FloatNdArray; +import org.tensorflow.ndarray.IntNdArray; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Ops; import org.tensorflow.types.*; @@ -29,7 +30,7 @@ import static org.junit.jupiter.api.Assertions.*; -/** Eaager Mode Test Session */ +/** Eager Mode Test Session */ public class EagerTestSession extends TestSession { private final EagerSession session; @@ -83,79 +84,47 @@ public EagerSession getEagerSession() { /** {@inheritDoc} */ @Override public void evaluate(double expected, Operand input) { - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); if (dtype == TFloat32.DTYPE) { Operand o = (Operand) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } index.set(0); - o.data() - .scalars() - .forEach( - f -> { - assertEquals(expected, f.getFloat(), epsilon); - }); + o.data().scalars().forEach(f -> assertEquals(expected, f.getFloat(), epsilon)); } else if (dtype == TFloat64.DTYPE) { Operand o = (Operand) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } index.set(0); - o.data() - .scalars() - .forEach( - f -> { - assertEquals((double) expected, f.getDouble(), epsilon); - }); + o.data().scalars().forEach(f -> assertEquals(expected, f.getDouble(), epsilon)); } else if (dtype == TInt32.DTYPE) { Operand o = (Operand) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } index.set(0); - o.data() - .scalars() - .forEach( - f -> { - assertEquals((int) expected, f.getInt()); - }); + o.data().scalars().forEach(f -> assertEquals((int) expected, f.getInt())); } else if (dtype == TInt64.DTYPE) { Operand o = (Operand) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } index.set(0); - o.data() - .scalars() - .forEach( - f -> { - assertEquals((long) expected, f.getLong()); - }); + o.data().scalars().forEach(f -> assertEquals((long) expected, f.getLong())); } } @@ -167,160 +136,120 @@ public void evaluate(Number[] expected, Output input) { expected.length, size, () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); - DataType dtype = input.dataType(); + DataType dtype = input.dataType(); if (dtype == TFloat32.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } index.set(0); o.data() .scalars() .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()].floatValue(), f.getFloat(), epsilon); - }); + f -> + assertEquals( + expected[index.getAndIncrement()].floatValue(), f.getFloat(), epsilon)); } else if (dtype == TFloat64.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } index.set(0); o.data() .scalars() .forEach( - f -> { - assertEquals( - expected[index.getAndIncrement()].doubleValue(), f.getDouble(), epsilon); - }); + f -> + assertEquals( + expected[index.getAndIncrement()].doubleValue(), f.getDouble(), epsilon)); } else if (dtype == TInt32.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } index.set(0); o.data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()].intValue(), f.getInt()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()].intValue(), f.getInt())); } else if (dtype == TInt64.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } index.set(0); o.data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong())); } } /** {@inheritDoc} */ @Override public void evaluate(FloatNdArray expected, Output input) { - DataType dtype = input.dataType(); + DataType dtype = input.dataType(); if (dtype == TFloat32.DTYPE) { Output o = (Output) input; AtomicLong index = new AtomicLong(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } index.set(0); o.data() .scalars() .forEach( - f -> { - assertEquals(expected.getFloat(index.getAndIncrement()), f.getFloat(), epsilon); - }); + f -> assertEquals(expected.getFloat(index.getAndIncrement()), f.getFloat(), epsilon)); } else if (dtype == TFloat64.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } index.set(0); o.data() .scalars() .forEach( - f -> { - assertEquals( - (double) expected.getFloat(index.getAndIncrement()), f.getDouble(), epsilon); - }); + f -> + assertEquals(expected.getFloat(index.getAndIncrement()), f.getDouble(), epsilon)); } else if (dtype == TInt32.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } index.set(0); - o.data() - .scalars() - .forEach( - f -> { - assertEquals((int) expected.getFloat(index.getAndIncrement()), f.getInt()); - }); + for (IntNdArray f : o.data().scalars()) { + assertEquals((int) expected.getFloat(index.getAndIncrement()), f.getInt()); + } } else if (dtype == TInt64.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } index.set(0); o.data() .scalars() .forEach( - f -> { - assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong()); - }); + f -> assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong())); } } @@ -328,7 +257,7 @@ public void evaluate(FloatNdArray expected, Output input) { @Override public void evaluate(Output input, Predicate predicate) { AtomicInteger index = new AtomicInteger(); - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); boolean isScalar = input.shape().equals(Shape.scalar()); if (dtype == TFloat32.DTYPE) { Output o = (Output) input; @@ -340,11 +269,10 @@ public void evaluate(Output input, Predicate predic o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %f\n", - index.getAndIncrement(), predicate.test(f.getFloat()), f.getFloat()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getFloat()), f.getFloat())); } } index.set(0); @@ -353,10 +281,7 @@ public void evaluate(Output input, Predicate predic } else { o.data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(o.data().getFloat())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(o.data().getFloat()))); } } else if (dtype == TFloat64.DTYPE) { Output o = (Output) input; @@ -368,11 +293,10 @@ public void evaluate(Output input, Predicate predic o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %f\n", - index.getAndIncrement(), predicate.test(f.getDouble()), f.getDouble()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getDouble()), f.getDouble())); } } index.set(0); @@ -381,10 +305,7 @@ public void evaluate(Output input, Predicate predic } else { o.data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(o.data().getDouble())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(o.data().getDouble()))); } } else if (dtype == TInt32.DTYPE) { Output o = (Output) input; @@ -396,11 +317,10 @@ public void evaluate(Output input, Predicate predic o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %d\n", - index.getAndIncrement(), predicate.test(f.getInt()), f.getInt()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getInt()), f.getInt())); } } index.set(0); @@ -409,10 +329,7 @@ public void evaluate(Output input, Predicate predic } else { o.data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(o.data().getInt())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(o.data().getInt()))); } } else if (dtype == TInt64.DTYPE) { Output o = (Output) input; @@ -424,11 +341,10 @@ public void evaluate(Output input, Predicate predic o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %d\n", - index.getAndIncrement(), predicate.test(f.getLong()), f.getLong()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getLong()), f.getLong())); } } index.set(0); @@ -437,10 +353,7 @@ public void evaluate(Output input, Predicate predic } else { o.data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(o.data().getLong())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(o.data().getLong()))); } } else { fail("Unexpected DataType: " + dtype); @@ -460,19 +373,13 @@ public void evaluate(String[] expected, Output input) { input .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); - }); + .forEach(f -> System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject())); } index.set(0); input .data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()], f.getObject()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()], f.getObject())); } /** {@inheritDoc} */ @@ -488,19 +395,13 @@ public void evaluate(Boolean[] expected, Output input) { input .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean()); - }); + .forEach(f -> System.out.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean())); } index.set(0); input .data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()], f.getBoolean()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()], f.getBoolean())); } /** {@inheritDoc} */ @@ -508,9 +409,9 @@ public void evaluate(Boolean[] expected, Output input) { public void evaluate(Output expected, Output input) { assert input.shape().equals(expected.shape()) : String.format( - "expected shape (%s) != to input shape (%ds)", + "expected shape (%s) != to input shape (%s)", expected.shape().toString(), input.shape().toString()); - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); boolean isScalar = input.shape().equals(Shape.scalar()); if (dtype == TFloat32.DTYPE) { Output x = (Output) expected; @@ -523,11 +424,10 @@ public void evaluate(Output expected, Output input) { o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %f <==> %f\n", - index.getAndIncrement(), x.data().getFloat(idx), f.getFloat()); - }); + (idx, f) -> + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), x.data().getFloat(idx), f.getFloat())); } } index.set(0); @@ -550,11 +450,10 @@ public void evaluate(Output expected, Output input) { o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %f <==> %f\n", - index.getAndIncrement(), x.data().getDouble(idx), f.getDouble()); - }); + (idx, f) -> + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), x.data().getDouble(idx), f.getDouble())); } } index.set(0); @@ -577,11 +476,10 @@ public void evaluate(Output expected, Output input) { o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %d <==> %d\n", - index.getAndIncrement(), x.data().getInt(idx), f.getInt()); - }); + (idx, f) -> + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), x.data().getInt(idx), f.getInt())); } } index.set(0); @@ -603,11 +501,10 @@ public void evaluate(Output expected, Output input) { o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %d <==> %d\n", - index.getAndIncrement(), x.data().getLong(idx), f.getLong()); - }); + (idx, f) -> + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), x.data().getLong(idx), f.getLong())); } } index.set(0); @@ -629,11 +526,10 @@ public void evaluate(Output expected, Output input) { o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %s <==> %s\n", - index.getAndIncrement(), x.data().getObject(idx), f.getObject()); - }); + (idx, f) -> + System.out.printf( + "%d). %s <==> %s\n", + index.getAndIncrement(), x.data().getObject(idx), f.getObject())); } } index.set(0); @@ -655,11 +551,10 @@ public void evaluate(Output expected, Output input) { o.data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %b\n", - index.getAndIncrement(), x.data().getBoolean(idx), f.getBoolean()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %b\n", + index.getAndIncrement(), x.data().getBoolean(idx), f.getBoolean())); } } index.set(0); @@ -676,61 +571,43 @@ public void evaluate(Output expected, Output input) { /** {@inheritDoc} */ @Override public void print(PrintWriter writer, Output input) { - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); if (dtype == TFloat32.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } else if (dtype == TFloat64.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } else if (dtype == TInt32.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } else if (dtype == TInt64.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } else if (dtype == TString.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); - }); + .forEach(f -> System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject())); } else if (dtype == TBool.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); o.data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean()); - }); + .forEach(f -> System.out.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean())); } else { writer.println("Unexpected DataType: " + dtype); } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java index 3231b0f50cd..0416267ae59 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java @@ -92,12 +92,7 @@ public EagerSession getEagerSession() { /** {@inheritDoc} */ @Override public void initialize() { - graph - .initializers() - .forEach( - initializer -> { - session.runner().addTarget(initializer).run(); - }); + graph.initializers().forEach(initializer -> session.runner().addTarget(initializer).run()); } /** {@inheritDoc} */ @@ -109,7 +104,7 @@ public void run(Op op) { /** {@inheritDoc} */ @Override public void evaluate(double expected, Operand input) { - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); if (dtype == TFloat32.DTYPE) { AtomicInteger index = new AtomicInteger(); if (debug) { @@ -118,22 +113,13 @@ public void evaluate(double expected, Operand input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } } index.set(0); try (Tensor result = this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals((float) expected, f.getFloat(), epsilon); - }); + result.data().scalars().forEach(f -> assertEquals((float) expected, f.getFloat(), epsilon)); } } else if (dtype == TFloat64.DTYPE) { AtomicInteger index = new AtomicInteger(); @@ -143,22 +129,13 @@ public void evaluate(double expected, Operand input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } } index.set(0); try (Tensor result = this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals(expected, f.getDouble(), epsilon); - }); + result.data().scalars().forEach(f -> assertEquals(expected, f.getDouble(), epsilon)); } } else if (dtype == TInt32.DTYPE) { AtomicInteger index = new AtomicInteger(); @@ -168,25 +145,15 @@ public void evaluate(double expected, Operand input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } } index.set(0); try (Tensor result = this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals((int) expected, f.getInt()); - }); + result.data().scalars().forEach(f -> assertEquals((int) expected, f.getInt())); } } else if (dtype == TInt64.DTYPE) { - Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { try (Tensor result = @@ -194,22 +161,13 @@ public void evaluate(double expected, Operand input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } } index.set(0); try (Tensor result = this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { - result - .data() - .scalars() - .forEach( - f -> { - assertEquals((long) expected, f.getLong()); - }); + result.data().scalars().forEach(f -> assertEquals((long) expected, f.getLong())); } } else { fail("Unexpected DataType: " + dtype); @@ -224,7 +182,7 @@ public void evaluate(Number[] expected, Output input) { expected.length, size, () -> String.format("expected length (%d) != to input length (%d)", expected.length, size)); - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); if (dtype == TFloat32.DTYPE) { AtomicInteger index = new AtomicInteger(); if (debug) { @@ -233,10 +191,7 @@ public void evaluate(Number[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } } index.set(0); @@ -246,10 +201,9 @@ public void evaluate(Number[] expected, Output input) { .data() .scalars() .forEach( - f -> { - assertEquals( - expected[index.getAndIncrement()].floatValue(), f.getFloat(), epsilon); - }); + f -> + assertEquals( + expected[index.getAndIncrement()].floatValue(), f.getFloat(), epsilon)); } } else if (dtype == TFloat64.DTYPE) { AtomicInteger index = new AtomicInteger(); @@ -259,10 +213,7 @@ public void evaluate(Number[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } } index.set(0); @@ -272,10 +223,9 @@ public void evaluate(Number[] expected, Output input) { .data() .scalars() .forEach( - f -> { - assertEquals( - expected[index.getAndIncrement()].doubleValue(), f.getDouble(), epsilon); - }); + f -> + assertEquals( + expected[index.getAndIncrement()].doubleValue(), f.getDouble(), epsilon)); } } else if (dtype == TInt32.DTYPE) { AtomicInteger index = new AtomicInteger(); @@ -285,10 +235,7 @@ public void evaluate(Number[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } } index.set(0); @@ -297,13 +244,9 @@ public void evaluate(Number[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()].intValue(), f.getInt()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()].intValue(), f.getInt())); } } else if (dtype == TInt64.DTYPE) { - Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { try (Tensor result = @@ -311,10 +254,7 @@ public void evaluate(Number[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } } index.set(0); @@ -323,10 +263,7 @@ public void evaluate(Number[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong())); } } else { fail("Unexpected DataType: " + dtype); @@ -336,7 +273,7 @@ public void evaluate(Number[] expected, Output input) { /** {@inheritDoc} */ @Override public void evaluate(FloatNdArray expected, Output input) { - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); if (dtype == TFloat32.DTYPE) { AtomicLong index = new AtomicLong(); if (debug) { @@ -345,10 +282,7 @@ public void evaluate(FloatNdArray expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } } index.set(0); @@ -358,9 +292,9 @@ public void evaluate(FloatNdArray expected, Output input) { .data() .scalars() .forEach( - f -> { - assertEquals(expected.getFloat(index.getAndIncrement()), f.getFloat(), epsilon); - }); + f -> + assertEquals( + expected.getFloat(index.getAndIncrement()), f.getFloat(), epsilon)); } } else if (dtype == TFloat64.DTYPE) { AtomicInteger index = new AtomicInteger(); @@ -370,10 +304,7 @@ public void evaluate(FloatNdArray expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + .forEach(f -> System.out.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } } index.set(0); @@ -383,10 +314,9 @@ public void evaluate(FloatNdArray expected, Output input) { .data() .scalars() .forEach( - f -> { - assertEquals( - (double) expected.getFloat(index.getAndIncrement()), f.getDouble(), epsilon); - }); + f -> + assertEquals( + expected.getFloat(index.getAndIncrement()), f.getDouble(), epsilon)); } } else if (dtype == TInt32.DTYPE) { AtomicInteger index = new AtomicInteger(); @@ -396,10 +326,7 @@ public void evaluate(FloatNdArray expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } } index.set(0); @@ -409,12 +336,9 @@ public void evaluate(FloatNdArray expected, Output input) { .data() .scalars() .forEach( - f -> { - assertEquals((int) expected.getFloat(index.getAndIncrement()), f.getInt()); - }); + f -> assertEquals((int) expected.getFloat(index.getAndIncrement()), f.getInt())); } } else if (dtype == TInt64.DTYPE) { - Output o = (Output) input; AtomicInteger index = new AtomicInteger(); if (debug) { try (Tensor result = @@ -422,10 +346,7 @@ public void evaluate(FloatNdArray expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } } index.set(0); @@ -435,9 +356,7 @@ public void evaluate(FloatNdArray expected, Output input) { .data() .scalars() .forEach( - f -> { - assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong()); - }); + f -> assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong())); } } else { fail("Unexpected DataType: " + dtype); @@ -459,10 +378,7 @@ public void evaluate(String[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); - }); + .forEach(f -> System.out.printf("%d). %s\n", index.getAndIncrement(), f.getObject())); } } index.set(0); @@ -471,10 +387,7 @@ public void evaluate(String[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()], f.getObject()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()], f.getObject())); } } @@ -493,10 +406,7 @@ public void evaluate(Boolean[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - System.out.printf("%d). %b\n", index.getAndIncrement(), f.getObject()); - }); + .forEach(f -> System.out.printf("%d). %b\n", index.getAndIncrement(), f.getObject())); } } index.set(0); @@ -505,10 +415,7 @@ public void evaluate(Boolean[] expected, Output input) { result .data() .scalars() - .forEach( - f -> { - assertEquals(expected[index.getAndIncrement()], f.getObject()); - }); + .forEach(f -> assertEquals(expected[index.getAndIncrement()], f.getObject())); } } @@ -517,10 +424,16 @@ public void evaluate(Boolean[] expected, Output input) { public void evaluate(Output expected, Output input) { assert input.shape().equals(expected.shape()) : String.format( - "expected shape (%s) != to input shape (%ds)", + "expected shape (%s) != to input shape (%s)", expected.shape().toString(), input.shape().toString()); AtomicInteger index = new AtomicInteger(); - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); + if (!dtype.equals(expected.dataType())) { + throw new IllegalArgumentException( + String.format( + "Both data type must be equal, inout = %s, expected = %s", + dtype, expected.dataType())); + } boolean isScalar = input.shape().equals(Shape.scalar()); if (dtype == TFloat32.DTYPE) { final Output finalExpected = (Output) expected; @@ -537,13 +450,12 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %f <==> %f\n", - index.getAndIncrement(), - finalExpected.data().getFloat(idx), - f.getFloat()); - }); + (idx, f) -> + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), + finalExpected.data().getFloat(idx), + f.getFloat())); } } } @@ -559,9 +471,8 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - assertEquals(expectedResult.data().getFloat(idx), f.getFloat(), epsilon); - }); + (idx, f) -> + assertEquals(expectedResult.data().getFloat(idx), f.getFloat(), epsilon)); } } } else if (dtype == TFloat64.DTYPE) { @@ -579,13 +490,12 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %f <==> %f\n", - index.getAndIncrement(), - finalExpected.data().getDouble(idx), - f.getDouble()); - }); + (idx, f) -> + System.out.printf( + "%d). %f <==> %f\n", + index.getAndIncrement(), + finalExpected.data().getDouble(idx), + f.getDouble())); } } } @@ -601,9 +511,8 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - assertEquals(expectedResult.data().getDouble(idx), f.getDouble(), epsilon); - }); + (idx, f) -> + assertEquals(expectedResult.data().getDouble(idx), f.getDouble(), epsilon)); } } } else if (dtype == TInt32.DTYPE) { @@ -621,11 +530,10 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %d <==> %d\n", - index.getAndIncrement(), finalExpected.data().getInt(idx), f.getInt()); - }); + (idx, f) -> + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), finalExpected.data().getInt(idx), f.getInt())); } } } @@ -641,9 +549,7 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - assertEquals(expectedResult.data().getInt(idx), f.getInt(), epsilon); - }); + (idx, f) -> assertEquals(expectedResult.data().getInt(idx), f.getInt(), epsilon)); } } } else if (dtype == TInt64.DTYPE) { @@ -661,11 +567,12 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %d <==> %d\n", - index.getAndIncrement(), finalExpected.data().getLong(idx), f.getLong()); - }); + (idx, f) -> + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), + finalExpected.data().getLong(idx), + f.getLong())); } } } @@ -681,9 +588,8 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - assertEquals(expectedResult.data().getLong(idx), f.getLong(), epsilon); - }); + (idx, f) -> + assertEquals(expectedResult.data().getLong(idx), f.getLong(), epsilon)); } } } else if (dtype == TBool.DTYPE) { @@ -701,13 +607,12 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %b\n", - index.getAndIncrement(), - finalExpected.data().getBoolean(idx), - f.getBoolean()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %b\n", + index.getAndIncrement(), + finalExpected.data().getBoolean(idx), + f.getBoolean())); } } } @@ -723,9 +628,7 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - assertEquals(expectedResult.data().getBoolean(idx), f.getBoolean()); - }); + (idx, f) -> assertEquals(expectedResult.data().getBoolean(idx), f.getBoolean())); } } } else if (dtype == TString.DTYPE) { @@ -743,13 +646,12 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %s <==> %s\n", - index.getAndIncrement(), - finalExpected.data().getObject(idx), - f.getObject()); - }); + (idx, f) -> + System.out.printf( + "%d). %s <==> %s\n", + index.getAndIncrement(), + finalExpected.data().getObject(idx), + f.getObject())); } } } @@ -765,9 +667,7 @@ public void evaluate(Output expected, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - assertEquals(expectedResult.data().getObject(idx), f.getObject()); - }); + (idx, f) -> assertEquals(expectedResult.data().getObject(idx), f.getObject())); } } } else { @@ -779,7 +679,7 @@ public void evaluate(Output expected, Output input) { @Override public void evaluate(Output input, Predicate predicate) { AtomicInteger index = new AtomicInteger(); - DataType dtype = input.asOutput().dataType(); + DataType dtype = input.asOutput().dataType(); boolean isScalar = input.shape().equals(Shape.scalar()); if (dtype == TFloat32.DTYPE) { if (debug) { @@ -794,11 +694,10 @@ public void evaluate(Output input, Predicate predic .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %f\n", - index.getAndIncrement(), predicate.test(f.getFloat()), f.getFloat()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getFloat()), f.getFloat())); } } } @@ -811,10 +710,7 @@ public void evaluate(Output input, Predicate predic result .data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(result.data().getFloat())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(result.data().getFloat()))); } } } else if (dtype == TFloat64.DTYPE) { @@ -830,29 +726,23 @@ public void evaluate(Output input, Predicate predic .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %f\n", - index.getAndIncrement(), predicate.test(f.getDouble()), f.getDouble()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %f\n", + index.getAndIncrement(), predicate.test(f.getDouble()), f.getDouble())); } } } index.set(0); try (Tensor result = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE); - Tensor expectedResult = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { + this.getGraphSession().runner().fetch(input).run().get(0).expect(TFloat64.DTYPE)) { if (isScalar) { assertTrue(predicate.test(result.data().getDouble())); } else { result .data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(result.data().getDouble())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(result.data().getDouble()))); } } } else if (dtype == TInt32.DTYPE) { @@ -867,29 +757,23 @@ public void evaluate(Output input, Predicate predic .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %d\n", - index.getAndIncrement(), predicate.test(f.getInt()), f.getInt()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getInt()), f.getInt())); } } } index.set(0); try (Tensor result = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE); - Tensor expectedResult = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { if (isScalar) { assertTrue(predicate.test(result.data().getInt())); } else { result .data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(result.data().getInt())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(result.data().getInt()))); } } } else if (dtype == TInt64.DTYPE) { @@ -905,29 +789,23 @@ public void evaluate(Output input, Predicate predic .data() .scalars() .forEachIndexed( - (idx, f) -> { - System.out.printf( - "%d). %b <==> %d\n", - index.getAndIncrement(), predicate.test(f.getLong()), f.getLong()); - }); + (idx, f) -> + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getLong()), f.getLong())); } } } index.set(0); try (Tensor result = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE); - Tensor expectedResult = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { + this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { if (isScalar) { assertTrue(predicate.test(result.data().getLong())); } else { result .data() .scalars() - .forEachIndexed( - (idx, f) -> { - assertTrue(predicate.test(result.data().getLong())); - }); + .forEachIndexed((idx, f) -> assertTrue(predicate.test(result.data().getLong()))); } } } else { @@ -940,7 +818,7 @@ public void evaluate(Output input, Predicate predic public void print(PrintWriter writer, Output input) { boolean isScalar = input.asOutput().shape().size() == 1; - DataType dtype = input.dataType(); + DataType dtype = input.dataType(); if (dtype == TFloat32.DTYPE) { AtomicInteger index = new AtomicInteger(); try (Tensor result = @@ -952,9 +830,7 @@ public void print(PrintWriter writer, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - writer.printf("%d). %f\n", index.getAndIncrement(), f.getFloat()); - }); + (idx, f) -> writer.printf("%d). %f\n", index.getAndIncrement(), f.getFloat())); } } } else if (dtype == TFloat64.DTYPE) { @@ -970,9 +846,7 @@ public void print(PrintWriter writer, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - writer.printf("%d). %f\n", index.getAndIncrement(), f.getDouble()); - }); + (idx, f) -> writer.printf("%d). %f\n", index.getAndIncrement(), f.getDouble())); } } } else if (dtype == TInt32.DTYPE) { @@ -982,15 +856,13 @@ public void print(PrintWriter writer, Output input) { this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt32.DTYPE)) { if (isScalar) { writer.printf( - "%d). %f\n", index.getAndIncrement(), ((Output) input).data().getInt()); + "%d). %d\n", index.getAndIncrement(), ((Output) input).data().getInt()); } else { result .data() .scalars() .forEachIndexed( - (idx, f) -> { - writer.printf("%d). %d\n", index.getAndIncrement(), f.getInt()); - }); + (idx, f) -> writer.printf("%d). %d\n", index.getAndIncrement(), f.getInt())); } } } else if (dtype == TInt64.DTYPE) { @@ -1000,15 +872,13 @@ public void print(PrintWriter writer, Output input) { this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { if (isScalar) { writer.printf( - "%d). %f\n", index.getAndIncrement(), ((Output) input).data().getLong()); + "%d). %d\n", index.getAndIncrement(), ((Output) input).data().getLong()); } else { result .data() .scalars() .forEachIndexed( - (idx, f) -> { - writer.printf("%d). %d\n", index.getAndIncrement(), f.getLong()); - }); + (idx, f) -> writer.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } } } else if (dtype == TBool.DTYPE) { @@ -1024,9 +894,7 @@ public void print(PrintWriter writer, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - writer.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean()); - }); + (idx, f) -> writer.printf("%d). %b\n", index.getAndIncrement(), f.getBoolean())); } } } else if (dtype == TString.DTYPE) { @@ -1042,9 +910,7 @@ public void print(PrintWriter writer, Output input) { .data() .scalars() .forEachIndexed( - (idx, f) -> { - writer.printf("%d). %s\n", index.getAndIncrement(), f.getObject()); - }); + (idx, f) -> writer.printf("%d). %s\n", index.getAndIncrement(), f.getObject())); } } } else { diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java index 3758c832db5..a0855eb6260 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java @@ -40,11 +40,11 @@ public abstract class TestSession implements AutoCloseable { /** The Test Session mode, either Eager or Graph */ public enum Mode { EAGER, - GRAPH; + GRAPH } /** - * Create an Eager Test Session + * Creates an Eager Test Session * * @return the Eager Test Session */ @@ -53,7 +53,7 @@ public static TestSession createEagerSession() { } /** - * Create a Graph Test Session + * Creates a Graph Test Session * * @return the Graph Test Session */ @@ -62,22 +62,22 @@ public static TestSession createGraphSession() { } /** - * Create a Test Session + * Creates a Test Session * - * @param mode - * @return + * @param mode the type of Session, either eager or graph + * @return returns the test session */ public static TestSession createTestSession(Mode mode) { return mode == Mode.EAGER ? createEagerSession() : createGraphSession(); } - /** Initialize the Test Session, default implementation is do nothing. */ + /** Initializes the Test Session, default implementation is do nothing. */ public void initialize() { // empty } /** - * Run the Operation + * Runs the Operation * * @param op the Operation to run */ @@ -86,7 +86,7 @@ public void run(Op op) { } /** - * Get the Graph + * Gets the Graph * * @return the graph if in Graph Mode, otherwise null. */ @@ -95,120 +95,118 @@ public Graph getGraph() { } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Number expected, Operand input) { evaluate(new Number[] {expected}, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ - public void evaluate(Number expected, Op input) { + public void evaluate(Number expected, Op input) { evaluate(new Number[] {expected}, input); } /** - * Evaluate the input against the expected values + * Evaluates the input against the expected values * * @param expected the expected values * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ - public void evaluate(Number[] expected, Op input) { - Output output = input.op().output(0); + public void evaluate(Number[] expected, Op input) { + Output output = input.op().output(0); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Number[] expected, Operand input) { - Output output = input.asOutput(); + Output output = input.asOutput(); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(byte expected, Operand input) { evaluate((double) expected, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(int expected, Operand input) { evaluate((double) expected, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(long expected, Operand input) { evaluate((double) expected, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(float expected, Operand input) { evaluate((double) expected, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(double expected, Operand input); /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(byte[] expected, Operand input) { Byte[] iArray = new Byte[expected.length]; @@ -217,12 +215,12 @@ public void evaluate(byte[] expected, Operand input) { } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(int[] expected, Operand input) { Integer[] iArray = new Integer[expected.length]; @@ -231,12 +229,12 @@ public void evaluate(int[] expected, Operand input) { } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(long[] expected, Operand input) { Long[] iArray = new Long[expected.length]; @@ -245,12 +243,12 @@ public void evaluate(long[] expected, Operand input) { } /** - * Evaluate the input against the expected values + * Evaluates the input against the expected values * * @param expected the expected values * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(float[] expected, Operand input) { Float[] iArray = new Float[expected.length]; @@ -259,12 +257,12 @@ public void evaluate(float[] expected, Operand input) { } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(double[] expected, Operand input) { Double[] iArray = new Double[expected.length]; @@ -273,207 +271,212 @@ public void evaluate(double[] expected, Operand input) { } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(Number[] expected, Output input); /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(String expected, Operand input) { evaluate(new String[] {expected}, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(String expected, Op input) { evaluate(new String[] {expected}, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(String[] expected, Op input) { - Output output = input.op().output(0); + Output output = input.op().output(0); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(String[] expected, Operand input) { - Output output = input.asOutput(); + Output output = input.asOutput(); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(String[] expected, Output input); /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Boolean expected, Operand input) { evaluate(new Boolean[] {expected}, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Boolean expected, Op input) { evaluate(new Boolean[] {expected}, input); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Boolean[] expected, Op input) { - Output output = input.op().output(0); + Output output = input.op().output(0); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Boolean[] expected, Operand input) { - Output output = input.asOutput(); + Output output = input.asOutput(); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(Boolean[] expected, Output input); + /** + * Evaluates the input against the expected value + * + * @param expected the expected value + * @param input the operand to evaluate + * @param the data type of the expected Operand + * @throws org.opentest4j.AssertionFailedError if the evaluation fails + */ public void evaluate(Operand expected, Op input) { - Output output = input.op().output(0); + Output output = input.op().output(0); evaluate(expected, output); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(Operand expected, Operand input) { evaluate(expected.asOutput(), input.asOutput()); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(Output expected, Output input); /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public void evaluate(FloatNdArray expected, Operand input) { evaluate(expected, input.asOutput()); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * * @param expected the expected value * @param input the operand to evaluate * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(FloatNdArray expected, Output input); + /** + * Evaluates the input against the expected value + * + * @param input the operand to evaluate + * @param predicate the Predicate + * @param the data type of the input + * @throws org.opentest4j.AssertionFailedError if the evaluation fails + */ public void evaluate(Operand input, Predicate predicate) { evaluate(input.asOutput(), predicate); } /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * - * @param expected the expected value * @param input the operand to evaluate + * @param predicate The Predicate that evaluates the each value from input * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ public abstract void evaluate(Output input, Predicate predicate); /** - * Evaluate the input against the expected value + * Evaluates the input against the expected value * - * @param expected the expected value * @param input the operand to evaluate - * @param the data type of the input - * @throws org.opentest4j.AssertionFailedError + * @param predicate The Predicate that evaluates the each value from input + * @throws org.opentest4j.AssertionFailedError if the evaluation fails */ - public void evaluate(FloatNdArray input, Predicate predicate) { + public void evaluate(FloatNdArray input, Predicate predicate) { input.scalars().forEach(f -> assertTrue(predicate.test(f.getFloat()))); } @@ -493,9 +496,8 @@ public void print(OutputStream out, Operand input) { * * @param out the output stream * @param input the op to print - * @param the data type of the input */ - public void print(OutputStream out, Op input) { + public void print(OutputStream out, Op input) { print(new PrintWriter(new OutputStreamWriter(out)), input.op().output(0)); } @@ -513,7 +515,7 @@ public void print(OutputStream out, Output input) { /** * Print the input * - * @param witer the output writer + * @param writer the output writer * @param input the operand to print * @param the data type of the input */ @@ -524,18 +526,17 @@ public void print(Writer writer, Operand input) { /** * Print the input * - * @param witer the output writer + * @param writer the output writer * @param input the op to print - * @param the data type of the input */ - public void print(Writer writer, Op input) { + public void print(Writer writer, Op input) { print(new PrintWriter(writer), input.op().output(0)); } /** * Print the input * - * @param witer the output writer + * @param writer the output writer * @param input the op to print * @param the data type of the input */ @@ -546,7 +547,7 @@ public void print(Writer writer, Output input) { /** * Print the input * - * @param witer the output writer + * @param writer the output writer * @param input the op to print */ public abstract void print(PrintWriter writer, Output input); From ec4f6790ff666a4c23f60e1b4764874d6167d392 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 9 Sep 2020 19:08:41 -0400 Subject: [PATCH 33/55] added @SuppressWarnings("unchecked") on Variable array --- .../test/java/org/tensorflow/framework/optimizers/AdamTest.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java index 1aeed5a9772..461fa75397f 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/optimizers/AdamTest.java @@ -105,7 +105,9 @@ public void testBasic() { Op update = instance.applyGradients(gradsAndVars, "AdamTest"); /* Create and validate the shapes of the slots */ + @SuppressWarnings("unchecked") Variable[] firstMomentSlots = new Variable[2]; + @SuppressWarnings("unchecked") Variable[] secondMomentSlots = new Variable[2]; firstMomentSlots[0] = instance.getSlot(var0.asOutput(), FIRST_MOMENT).get(); From e9cd56a1c2349bec1dd39219a96ee4f3024cb769 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Sun, 20 Sep 2020 10:51:34 -0400 Subject: [PATCH 34/55] Add initializers --- .../initializers/BaseInitializer.java | 42 ++++ .../framework/initializers/Constant.java | 81 +++++++ .../framework/initializers/GlorotNormal.java | 66 ++++++ .../framework/initializers/GlorotUniform.java | 61 +++++ .../framework/initializers/HeNormal.java | 58 +++++ .../framework/initializers/HeUniform.java | 57 +++++ .../framework/initializers/Identity.java | 96 ++++++++ .../framework/initializers/Initializer.java | 38 ++++ .../framework/initializers/Initializers.java | 45 ++++ .../framework/initializers/LeCunNormal.java | 62 ++++++ .../framework/initializers/LeCunUniform.java | 64 ++++++ .../framework/initializers/Ones.java | 64 ++++++ .../framework/initializers/Orthogonal.java | 139 ++++++++++++ .../framework/initializers/RandomNormal.java | 106 +++++++++ .../framework/initializers/RandomUniform.java | 122 ++++++++++ .../initializers/TruncatedNormal.java | 99 +++++++++ .../initializers/VarianceScaling.java | 203 +++++++++++++++++ .../framework/initializers/Zeros.java | 51 +++++ .../framework/utils/ShapeUtils.java | 210 ++++++++++++++++++ 19 files changed, 1664 insertions(+) create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/BaseInitializer.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializer.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Ones.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/BaseInitializer.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/BaseInitializer.java new file mode 100644 index 00000000000..9c1fa9ac287 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/BaseInitializer.java @@ -0,0 +1,42 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TType; + +/** Abstract base class for all Initializers */ +public abstract class BaseInitializer implements Initializer { + + protected final Ops tf; + + /** + * Creates an Initializer + * + * @param tf the TensorFlow Ops + */ + protected BaseInitializer(Ops tf) { + this.tf = tf; + } + + /** + * Gets the TensorFlow Ops + * + * @return the TensorFlow Ops + */ + public Ops getTF() { + return tf; + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java new file mode 100644 index 00000000000..868bb12ed46 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java @@ -0,0 +1,81 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates tensors with a constant value. + * + *

    Examples: + * + *

    + *      Constant<TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.Constant<>(tf, 3f);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The Type for the call operation + */ +public class Constant extends BaseInitializer { + + private final Number numberValue; + private final Boolean booleanValue; + + /** + * Creates an Initializer that generates tensors with a constant value. + * + * @param tf the TensorFlow Ops + * @param value a number value + */ + public Constant(Ops tf, Number value) { + super(tf); + this.numberValue = value; + this.booleanValue = null; + } + + /** + * Creates an Initializer that generates tensors with a constant value. + * + * @param tf the TensorFlow Ops + * @param value a boolean value + */ + public Constant(Ops tf, Boolean value) { + super(tf); + this.numberValue = null; + this.booleanValue = value; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!(dtype.isNumeric() || dtype.isBoolean())) { + throw new IllegalArgumentException("DataType must be numeric or boolean: " + dtype.name()); + } + if (this.numberValue != null) { + return tf.fill(dims, tf.dtypes.cast(tf.constant(numberValue.doubleValue()), dtype)); + } else if (this.booleanValue != null) { + return tf.fill(dims, tf.dtypes.cast(tf.constant(this.booleanValue), dtype)); + } else { // should not happen, but throw here just in case + throw new IllegalArgumentException( + "Value must be either be a Number or Boolean, none supplied."); + } + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java new file mode 100644 index 00000000000..297270c9754 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java @@ -0,0 +1,66 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * The Glorot normal initializer, also called Xavier normal initializer. + * + *

    Draws samples from a truncated normal distribution centered on 0 with + * stddev = Math.sqrt(2. / (fanIn + fanOut)) where fanIn is the number of input + * units in the weight tensor and fanOut is the number of output units in the weight + * tensor. + * + *

    Examples: + * + *

    + *     GlorotNormal<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.GlorotNormal<>(tf);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * + + */ +public class GlorotNormal extends VarianceScaling { + + public static final double SCALE = 1.0; + /** + * Creates a GlorotNormal initializer + * + * @param tf the TensorFlow Ops + */ + public GlorotNormal(Ops tf) { + super(tf, SCALE, Mode.FAN_AVG, Distribution.TRUNCATED_NORMAL, null); + } + + /** + * Creates a GlorotNormal initializer + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. + */ + public GlorotNormal(Ops tf, Long seed) { + super(tf, SCALE, Mode.FAN_AVG, Distribution.TRUNCATED_NORMAL, seed); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java new file mode 100644 index 00000000000..026214e2c73 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java @@ -0,0 +1,61 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * he Glorot uniform initializer, also called Xavier uniform initializer.. + * + *

    Draws samples from a uniform distribution within + * [-limit, limit], where limit = sqrt(6 / (fanIn + fanOut)) + * ( fanIn is the number of input units in the weight tensor and fanOut is the number of output units). + * + *

    Examples: + *

    + *     GlorotUniform<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.GlorotUniform<>(tf);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * + * @see Glorot et al., 2010 + */ +public class GlorotUniform extends VarianceScaling { + public static final double SCALE = 1.0; + /** + * Creates a GlorotUniform initializer + * + * @param tf the TensorFlow Ops + */ + public GlorotUniform(Ops tf) { + super(tf, SCALE, Mode.FAN_AVG, Distribution.UNIFORM, null); + } + + /** + * Creates a GlorotUniform initializer + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation + */ + public GlorotUniform(Ops tf, Long seed) { + super(tf, SCALE, Mode.FAN_AVG, Distribution.UNIFORM, seed); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java new file mode 100644 index 00000000000..8063166978b --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java @@ -0,0 +1,58 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * He normal initializer. + *

    It draws samples from a truncated normal distribution centered on 0 with stddev = sqrt(2 / fan_in) where fan_in is the number of input units in the weight tensor.

    + *

    Examples: + *

    + *     HeNormal<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.HeNormal<>(tf);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * @param The TType for the call operation + * @param The TNumber for the call operation + * + * @see He et al., 2015 + */ +public class HeNormal extends VarianceScaling { + + public static final double SCALE = 2.0; + + /** + * Creates an HeNormal Initializer + * + * @param tf the TensorFlow Ops + */ + public HeNormal(Ops tf) { + super(tf, SCALE, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, null); + } + + /** + * Creates an HeNormal Initializer + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation + */ + public HeNormal(Ops tf, Long seed) { + super(tf, SCALE, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, seed); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java new file mode 100644 index 00000000000..38ca4a9230b --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java @@ -0,0 +1,57 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * He uniform initializer. + *

    Draws samples from a uniform distribution within [-limit, limit], where limit = sqrt(6 / fanIn) (fan_in is the number of input units in the weight tensor).

    + *

    Examples: + *

    + *     HeUniform<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.HeUniform<>(tf);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * @param The TType for the call operation + * @param The TNumber for the call operation + * + * @see He et al., 2015 + */ +public class HeUniform extends VarianceScaling { + + public static final double SCALE = 2.0; + /** + * Creates an HeUniform Initializer + * + * @param tf the TensorFlow Ops + */ + public HeUniform(Ops tf) { + super(tf, SCALE, Mode.FAN_IN, Distribution.UNIFORM, null); + } + + /** + * Creates an HeUniform Initializer + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation + */ + public HeUniform(Ops tf, Long seed) { + super(tf, SCALE, Mode.FAN_IN, Distribution.UNIFORM, seed); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java new file mode 100644 index 00000000000..9efc5584f7e --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java @@ -0,0 +1,96 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.ShapeUtils; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates the identity matrix. + *

    Only usable for generating 2D matrices.

    +

    Examples: + *

    + *     Identity<TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.Identity<>(tf);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * @param The TType for the call operation + */ +public class Identity extends BaseInitializer { + public static final double GAIN_DEFAULT = 1.0; + + private final double gain; + + /** + * Creates an Initializer that generates the identity matrix. + * + * @param tf the TensorFlow Ops + */ + public Identity(Ops tf) { + super(tf); + this.gain = GAIN_DEFAULT; + } + + /** + * Creates an Initializer that generates the identity matrix. + * + * @param tf the TensorFlow Ops + * @param gain the gain to be applied to the Identity Matrix + */ + public Identity(Ops tf, double gain) { + super(tf); + this.gain = gain; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!dtype.isFloating()) { + throw new IllegalArgumentException("DataType must be numeric or boolean: " + dtype.name()); + } + Shape shape = ShapeUtils.toShape(tf.scope(), dims); + if (shape.numDimensions() != 2) { + throw new IllegalArgumentException("2D matrix required, got " + shape.numDimensions()); + } + boolean isSquare = shape.size(0) == shape.size(1); + long diag_size = Math.min(shape.size(0), shape.size(1)); + Shape diagShape = Shape.of(diag_size); + + Operand op; + Operand zero = tf.dtypes.cast(tf.constant(0), dtype); + Operand diag_ones = + tf.fill(tf.constant(diagShape.asArray()), tf.dtypes.cast(tf.constant(1.0), dtype)); + if (isSquare) { + op = + tf.linalg.matrixDiag( + diag_ones, + tf.constant(0), // don't cast here, expecting TInt32 + tf.constant((int) shape.size(0)), + tf.constant((int) shape.size(1)), + zero); + } else { + Operand zero_matrix = tf.zeros(dims, dtype); + op = tf.linalg.matrixSetDiag(zero_matrix, diag_ones, tf.constant(0)); + } + + return tf.math.mul(op, tf.dtypes.cast(tf.constant(gain), dtype)); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializer.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializer.java new file mode 100644 index 00000000000..7e304f940a1 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializer.java @@ -0,0 +1,38 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** + * A Functional Interface for Initializers + * + * @param The data Type for initializer operation + */ +@FunctionalInterface +public interface Initializer { + + /** + * The call operation for the initializer + * + * @param dims the shape dimensions + * @param dtype the data type + * @return An operand for the initialization. + */ + Operand call(Operand dims, DataType dtype); +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java new file mode 100644 index 00000000000..771ad7e58b3 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java @@ -0,0 +1,45 @@ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; + +import java.util.function.Function; + +/** An Enum Type used to create a new Initializer with default parameters. */ +public enum Initializers { + IDENTITY(Identity::new), + ONES(Ones::new), + ZEROS(Zeros::new), + GLOROT_NORMAL(GlorotNormal::new), + GLOROT_UNIFORM(GlorotUniform::new), + ORTHOGONAL(Orthogonal::new), + RANDOM_NORMAL(RandomNormal::new), + RANDOM_UNIFORM(RandomUniform::new), + TRUNCATED_NORMAL(TruncatedNormal::new), + VARIANCE_SCALING(VarianceScaling::new), + HE_NORMAL(HeNormal::new), + HE_UNIFORM(HeUniform::new), + LECUN_NORMAL(LeCunNormal::new), + LECUN_UNIFORM(LeCunUniform::new); + + private final Function creator; + + /** + * Creates an Optimizers enum + * + * @param creator the lambda function that accepts a Graph argument used to create the default + * Optimizer + */ + Initializers(Function creator) { + this.creator = creator; + } + + /** + * Creates an Initializer with default settings. + * + * @param tf the TensorFlow Ops + * @return the Optimizer + */ + public Initializer createInitializer(Ops tf) { + return creator.apply(tf); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java new file mode 100644 index 00000000000..d991cd0a0e6 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java @@ -0,0 +1,62 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * LeCun normal initializer. + * + *

    Draws samples from a truncated normal distribution centered on 0 with + * stddev = sqrt(1 / fanIn) where fanIn is the number of input units in the weight tensor. + * + *

    Examples: + * + *

    + *      LeCunNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.LeCunNormal<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * + * @see Self-Normalizing Neural Networks, Klambauer et al., 2017 + * @see Efficient Backprop, Lecun et al., 1998 + */ +public class LeCunNormal extends VarianceScaling { + + /** + * Creates a LeCunNormal Initializer + * + * @param tf the TensorFlow Ops + */ + public LeCunNormal(Ops tf) { + super(tf, 1.0, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, null); + } + + /** + * Creates a LeCunNormal Initializer + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation + */ + public LeCunNormal(Ops tf, Long seed) { + super(tf, 1.0, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, seed); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java new file mode 100644 index 00000000000..c69ba51641a --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java @@ -0,0 +1,64 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * LeCun uniform initializer. + * + *

    Draws samples from a uniform distribution within [-limit, limit], + * where limit = Math.sqrt(3 / fanIn) (fanIn is the number of input units in the weight tensor) + * + *

    Examples: + * + *

    + *      LecunUniform<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.LecunUniform<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * @see Self-Normalizing + * Neural Networks, Klambauer et al., 2017 + * @see Efficient Backprop, Lecun et + * al., 1998 + */ +public class LeCunUniform extends VarianceScaling { + + /** + * Creates the LeCun uniform initializer. + * + * @param tf the TensorFlow Ops + */ + public LeCunUniform(Ops tf) { + super(tf, 1.0, Mode.FAN_IN, Distribution.UNIFORM, null); + } + + /** + * Creates the LeCun uniform initializer. + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation + */ + public LeCunUniform(Ops tf, Long seed) { + super(tf, 1.0, Mode.FAN_IN, Distribution.UNIFORM, seed); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Ones.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Ones.java new file mode 100644 index 00000000000..f01c0a352e6 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Ones.java @@ -0,0 +1,64 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates tensors initialized to 1. + * + *

    Examples: + * + *

    + *      Ones<TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.Ones<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + */ +public class Ones extends BaseInitializer { + + /** + * Creates an Initializer that sets all values to one. + * + *

    Examples: + * + *

    +   *      Ones<TFloat32> initializer =
    +   *              new org.tensorflow.framework.initializers.Ones<>(tf);
    +   *      Operand<TFloat32> values =
    +   *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    +   * 
    + * @param tf the TensorFlow Ops + */ + public Ones(Ops tf) { + super(tf); + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!(dtype.isNumeric() || dtype.isBoolean())) { + throw new IllegalArgumentException("DataType must be numeric or boolean: " + dtype.name()); + } + return tf.fill(dims, tf.dtypes.cast(tf.constant(1.0), dtype)); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java new file mode 100644 index 00000000000..10464106943 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java @@ -0,0 +1,139 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.Output; +import org.tensorflow.framework.utils.ShapeUtils; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.op.linalg.Qr; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates an orthogonal matrix. + *

    + * If the shape of the tensor to initialize is two-dimensional, it is initialized with an orthogonal matrix obtained from the QR + * decomposition of a matrix of random numbers drawn from a normal distribution. If the matrix has fewer rows than + * columns then the output will have orthogonal rows. Otherwise, the output will have orthogonal columns. + *

    + *

    + * If the shape of the tensor to initialize is more than two-dimensional, + * a matrix of shape (shape.size(0) * ... * shape.size(n - 2), shape.size(n - 1)) is initialized, + * where n is the length of the shape vector. The matrix is subsequently reshaped + * to give a tensor of the desired shape. + *

    + *

    Examples: + * + *

    + *      Orthogonal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.Orthogonal<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + */ +public class Orthogonal extends BaseInitializer { + + public static final double GAIN_DEFAULT = 1.0; + + private final double gain; + private final Long seed; + + /** + * Creates an Orthogonal Initializer + * + * @param tf the TensorFlow Ops + */ + public Orthogonal(Ops tf) { + this(tf, GAIN_DEFAULT, null); + } + + /** + * Creates an Orthogonal Initializer + * + * @param tf the TensorFlow Ops + * @param gain the gain to be applied to the Matrix + */ + public Orthogonal(Ops tf, double gain) { + this(tf, gain, null); + } + + /** + * Creates an Orthogonal Initializer + * + * @param tf the TensorFlow Ops + * @param seed the seed for random number generation + */ + public Orthogonal(Ops tf, Long seed) { + this(tf, GAIN_DEFAULT, seed); + } + + /** + * Creates an Orthogonal Initializer + * + * @param tf the TensorFlow Ops + * @param gain the gain to be applied to the Matrix + * @param seed the seed for random number generation + */ + public Orthogonal(Ops tf, double gain, Long seed) { + super(tf); + this.gain = gain; + this.seed = seed; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!dtype.isFloating()) { + throw new IllegalArgumentException("Expected floating point type, got " + dtype.name()); + } + Shape dimsShape = ShapeUtils.toShape(tf.scope(), dims); + if (dimsShape.numDimensions() < 2) { + throw new IllegalArgumentException( + "The tensor to initialize must be at least two-dimensional, got " + + dimsShape.numDimensions()); + } + long num_rows = 1; + int i = 0; + for (; i < dimsShape.numDimensions() - 1; i++) num_rows *= dimsShape.size(i); + long num_cols = dimsShape.size(i); + Shape flat_shape = Shape.of(Math.max(num_rows, num_cols), Math.min(num_rows, num_cols)); + long lseed = this.seed == null ? 0L : this.seed; + long[] seeds = {lseed, 0}; + @SuppressWarnings("unchecked") + DataType numdType = (DataType) dtype; + @SuppressWarnings("unchecked") + Operand op = + (Operand) + tf.random.statelessRandomNormal(tf.constant(flat_shape), tf.constant(seeds), numdType); + + Qr.Options qrOptions = Qr.fullMatrices(false); + Qr qrOp = tf.linalg.qr(op, qrOptions); + Output qo = qrOp.q(); + Output ro = qrOp.r(); + Operand diagOp = + tf.linalg.matrixDiagPart(ro, tf.constant(0), tf.dtypes.cast(tf.constant(0), dtype)); + Operand qop = tf.math.mul(qo, tf.math.sign(diagOp)); + if (num_rows < num_cols) qop = tf.linalg.transpose(qop, null); + + return tf.math.mul(qop, tf.dtypes.cast(tf.constant(this.gain), dtype)); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java new file mode 100644 index 00000000000..5eae46c4038 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java @@ -0,0 +1,106 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates tensors with a normal distribution. + * + *

    Examples: + * + *

    + *      RandomNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.RandomNormal<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * @param The TType for the call operation + * @param The TNumber for the call operation + */ +public class RandomNormal extends BaseInitializer { + public static final double MEAN_DEFAULT = 0.0; + public static final double STDDEV_DEFAULT = 1.0; + + private final double mean; + private final double stddev; + private final Long seed; + + /** + * creates the RandomUniform initializer + * + * @param tf the TensorFlow Ops + */ + public RandomNormal(Ops tf) { + this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, null); + } + + /** + * creates the RandomUniform initializer + * + * @param tf the TensorFlow Ops + * @param mean Mean of the random values to generate. + */ + public RandomNormal(Ops tf, double mean) { + this(tf, mean, STDDEV_DEFAULT, null); + } + + /** + * creates the RandomUniform initializer + * + * @param tf the TensorFlow Ops + * @param mean Mean of the random values to generate. + * @param stddev Standard deviation of the random values to generate. + */ + public RandomNormal(Ops tf, double mean, double stddev) { + this(tf, mean, stddev, null); + } + + /** + * creates the RandomUniform initializer + * + * @param tf the TensorFlow Ops + * @param mean Mean of the random values to generate. + * @param stddev Standard deviation of the random values to generate. + * @param seed Used to create random seeds. + */ + public RandomNormal(Ops tf, double mean, double stddev, Long seed) { + super(tf); + this.mean = mean; + this.stddev = stddev; + this.seed = seed; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!dtype.isNumeric()) + throw new IllegalArgumentException("The data type must be numeric. Found : " + dtype.name()); + long lseed = this.seed == null ? 0L : this.seed; + long[] seeds = {lseed, 0L}; + @SuppressWarnings("unchecked") + DataType numdType = (DataType) dtype; + @SuppressWarnings("unchecked") + Operand distOp = + (Operand) tf.random.statelessRandomNormal(dims, tf.constant(seeds), numdType); + Operand op = tf.math.mul(distOp, tf.dtypes.cast(tf.constant(this.stddev), dtype)); + return tf.math.add(op, tf.dtypes.cast(tf.constant(mean), dtype)); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java new file mode 100644 index 00000000000..b52f5e8cb50 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java @@ -0,0 +1,122 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.op.random.RandomUniformInt; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates tensors with a uniform distribution. + *

    Examples: + * + *

    + *      RandomUniform<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.RandomUniform<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * */ +public class RandomUniform extends BaseInitializer { + + public static final double MINVAL_DEFAULT = 0.05; + public static final double MAXVAL_DEFAULT = 0.05; + + private final Double minval; + private final Double maxval; + private final Long seed; + + /** + * Creates a RandomUniform initializer + * + * @param tf the TensorFlow Ops + */ + public RandomUniform(Ops tf) { + this(tf, MINVAL_DEFAULT, MAXVAL_DEFAULT, null); + } + + /** + * Creates a RandomUniform initializer + * + * @param tf the TensorFlow Ops + * @param minval Lower bound of the range of random values to generate (inclusive). + * @param maxval Upper bound of the range of random values to generate (exclusive). + */ + public RandomUniform(Ops tf, double minval, double maxval) { + this(tf, minval, maxval, null); + } + + /** + * Creates a RandomUniform initializer + * + * @param tf the TensorFlow Ops + * @param minval Lower bound of the range of random values to generate (inclusive). + * @param maxval Upper bound of the range of random values to generate (exclusive). + * @param seed Used to create random seeds. + */ + public RandomUniform(Ops tf, double minval, double maxval, Long seed) { + super(tf); + this.minval = minval; + this.maxval = maxval; + this.seed = seed; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!dtype.isNumeric()) + throw new IllegalArgumentException("The data type must be numeric. Found : " + dtype.name()); + @SuppressWarnings("unchecked") + DataType numdType = (DataType) dtype; + Operand distOp; + + if (dtype.isInteger()) { + RandomUniformInt.Options options = RandomUniformInt.seed(this.seed); + distOp = + tf.random.randomUniformInt( + dims, + tf.dtypes.cast(tf.constant(this.minval), numdType), + tf.dtypes.cast(tf.constant(this.maxval), numdType), + options); + @SuppressWarnings("unchecked") + Operand distOpT = (Operand) distOp; + return distOpT; + } else { + long lseed = this.seed == null ? 0L : this.seed; + long[] seeds = {lseed, 0L}; + + distOp = tf.random.statelessRandomUniform(dims, tf.constant(seeds), numdType); + @SuppressWarnings("unchecked") + Operand distOpT = (Operand) distOp; + if (this.minval == 0) { + if (this.maxval != 1.0) { + distOpT = tf.math.mul(distOpT, tf.dtypes.cast(tf.constant(this.maxval), dtype)); + } + } else { + distOpT = + tf.math.mul(distOpT, tf.dtypes.cast(tf.constant(this.maxval - this.minval), dtype)); + distOpT = tf.math.add(distOpT, tf.dtypes.cast(tf.constant(this.minval), dtype)); + } + return distOpT; + } + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java new file mode 100644 index 00000000000..537feb33b19 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java @@ -0,0 +1,99 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Initializer that generates a truncated normal distribution. + * + *

    Examples: + * + *

    + *      TruncatedNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.TruncatedNormal<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + */ +public class TruncatedNormal extends BaseInitializer { + + public static final double MEAN_DEFAULT = 0.0; + public static final double STDDEV_DEFAULT = 0.05; + + private final double mean; + private final double stddev; + private final Long seed; + + /** + * Creates a TruncatedNormal Initializer + * + * @param tf the TensorFlow Ops + */ + public TruncatedNormal(Ops tf) { + this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, null); + } + + /** + * Creates a TruncatedNormal Initializer + * + * @param tf the TensorFlow Ops + * @param mean Mean of the random values to generate. + * @param stddev Standard deviation of the random values to generate. + */ + public TruncatedNormal(Ops tf, double mean, double stddev) { + this(tf, mean, stddev, null); + } + + /** + * Creates a TruncatedNormal Initializer + * + * @param tf the TensorFlow Ops + * @param mean Mean of the random values to generate. + * @param stddev Standard deviation of the random values to generate. + * @param seed Used to create random seeds + */ + public TruncatedNormal(Ops tf, double mean, double stddev, Long seed) { + super(tf); + this.mean = mean; + this.stddev = stddev; + this.seed = seed; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!dtype.isNumeric()) + throw new IllegalArgumentException("The data type must be numeric. Found : " + dtype.name()); + long lseed = this.seed == null ? 0L : this.seed; + long[] seeds = {lseed, 0L}; + @SuppressWarnings("unchecked") + DataType numdType = (DataType) dtype; + Operand distOp = tf.random.statelessTruncatedNormal(dims, tf.constant(seeds), numdType); + @SuppressWarnings("unchecked") + Operand distOpT = (Operand) distOp; + return tf.math.add( + tf.math.mul(distOpT, tf.dtypes.cast(tf.constant(stddev), dtype)), + tf.dtypes.cast(tf.constant(mean), dtype)); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java new file mode 100644 index 00000000000..9145f716248 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java @@ -0,0 +1,203 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.ShapeUtils; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * Initializer capable of adapting its scale to the shape of weights tensors. + * + *

    + * + *

    With distribution=TRUNCATED_NORMAL or UNTRUNCATED_NORMAL, samples are drawn from + * a truncated/untruncated normal distribution with a mean of zero and a standard deviation (after + * truncation, if used) stddev = Math.sqrt(scale / n), where n is: + * + *

      + *
    • number of input units in the weight tensor, if mode=FAN_IN + *
    • number of output units, if mode=FAN_OUT + *
    • average of the numbers of input and output units, if mode=FAN_AVG + *
    + * + *

    With distribution=UNIFORM, samples are drawn from a uniform distribution within + * [-limit, limit], where limit = Math.sqrt(3 * scale / n);. + * + *

    Examples: + * + *

    + *      long seed = 1234l;
    + *      float scale = 0.1f;
    + *      VarianceScaling<TFloat32, TFloat32> initializer =
    + *          new org.tensorflow.framework.initializers.VarianceScaling<>(
    + *              tf, scale, Mode.FAN_IN, Distribution.UNIFORM, seed);
    + *      Operand<TFloat32> values =
    + *          initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * @see VarianceScaling.Mode + * @see VarianceScaling.Distribution + */ +public class VarianceScaling extends BaseInitializer { + + public static final double SCALE_DEFAULT = 1.0; + public static final Mode MODE_DEFAULT = Mode.FAN_IN; + public static final Distribution DISTRIBUTION_DEFAULT = Distribution.TRUNCATED_NORMAL; + + private final double scale; + private final Mode mode; + private final Distribution distribution; + private final Long seed; + + /** + * Creates a VarianceScaling Initializer + * + * @param tf the TensorFlow Ops + */ + public VarianceScaling(Ops tf) { + this(tf, SCALE_DEFAULT, MODE_DEFAULT, DISTRIBUTION_DEFAULT, null); + } + + /** + * Creates a VarianceScaling Initializer + * + * @param tf the TensorFlow Ops + * @param seed sed to create random seeds. + */ + public VarianceScaling(Ops tf, long seed) { + this(tf, SCALE_DEFAULT, MODE_DEFAULT, DISTRIBUTION_DEFAULT, seed); + } + + /** + * Creates a VarianceScaling Initializer + * + * @param tf the TensorFlow Ops + * @param scale Scaling factor (positive float). + * @param mode the mode for the variance + * @param distribution Random distribution to use. + * @param seed Used to create random seeds. + */ + public VarianceScaling(Ops tf, double scale, Mode mode, Distribution distribution, Long seed) { + super(tf); + if (scale <= 0.0) { + throw new IllegalArgumentException("scale must be greater than 0, got " + scale); + } + this.scale = scale; + this.mode = mode; + this.distribution = distribution; + this.seed = seed; + } + + /** {@inheritDoc} */ + @Override + public Operand call(Operand dims, DataType dtype) { + if (!dtype.isFloating()) { + throw new IllegalArgumentException("Expected floating point type, got " + dtype.name()); + } + Shape shape = ShapeUtils.toShape(this.tf.scope(), dims); + double lscale = this.scale; + double[] fans /* fanIn, fanOut */ = computeFans(shape); + switch (mode) { + case FAN_IN: + lscale /= Math.max(1., fans[0]); + break; + case FAN_OUT: + lscale /= Math.max(1., fans[1]); + break; + case FAN_AVG: + lscale /= Math.max(1., (fans[0] + fans[1]) / 2.); + break; + } + Operand distOp; + Operand mulOp = null; + @SuppressWarnings("unchecked") + DataType numdType = (DataType) dtype; + double stddev; + long lseed = this.seed == null ? 0L : this.seed; + long[] seeds = {lseed, 0L}; + switch (distribution) { + case TRUNCATED_NORMAL: + distOp = tf.random.statelessTruncatedNormal(dims, tf.constant(seeds), numdType); + // constant from scipy.stats.truncnorm.std(a=-2, b=2, loc=0., scale=1.) + stddev = Math.sqrt(lscale) / .87962566103423978; + mulOp = tf.math.mul(distOp, tf.dtypes.cast(tf.constant(stddev), numdType)); + break; + case UNTRUNCATED_NORMAL: + distOp = tf.random.statelessRandomNormal(dims, tf.constant(seeds), numdType); + stddev = Math.sqrt(lscale); + mulOp = tf.math.mul(distOp, tf.dtypes.cast(tf.constant(stddev), numdType)); + break; + case UNIFORM: + distOp = tf.random.statelessRandomUniform(dims, tf.constant(seeds), numdType); + stddev = Math.sqrt(3.0 * lscale); + mulOp = tf.math.mul(distOp, tf.dtypes.cast(tf.constant(stddev), numdType)); + break; + } + + // Need to cast TNumber to TType + return (Operand) mulOp; + } + + /** + * Computes the Fans values based on the shape provided. + * + * @param shape the shape used to calculate the fans. + * @return a double array containing the fan values, [fanIn, fanOut]. + */ + private double[] computeFans(Shape shape) { + double fanIn; + double fanOut; + long[] dims = shape.asArray(); + if (dims == null || dims.length < 1) { + fanIn = fanOut = 1; + } else if (dims.length == 1) { + fanIn = fanOut = dims[0]; + } else if (dims.length == 2) { + fanIn = dims[0]; + fanOut = dims[1]; + } else { + double receptive_field_size = 1.; + for (int i = dims.length - 2; i >= 0; i--) { + receptive_field_size *= dims[i]; + } + fanIn = dims[dims.length - 2] * receptive_field_size; + fanOut = dims[dims.length - 1] * receptive_field_size; + } + + return new double[] {fanIn, fanOut}; + } + + /** The mode to use for calculating the fan values. */ + public static enum Mode { + FAN_IN, + FAN_OUT, + FAN_AVG + } + + /** The random distribution to use when initializing the values. */ + public static enum Distribution { + TRUNCATED_NORMAL, + UNTRUNCATED_NORMAL, + UNIFORM + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java new file mode 100644 index 00000000000..31a2c62f3ff --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java @@ -0,0 +1,51 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.DataType; +import org.tensorflow.Operand; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TType; + +/** + * Creates an Initializer that sets all values to zero. + * + *

    Examples: + * + *

    + *      Zeros<TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.Zeros<>(tf);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * @param The TType for the call operation + */ +public class Zeros extends BaseInitializer { + + /** + * Creates an Initializer that sets all values to one. + * + * @param tf the TensorFlow Ops + */ + public Zeros(Ops tf) { + super(tf); + } + + @Override + public Operand call(Operand dims, DataType dtype) { + return tf.zeros(dims, dtype); + } +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java new file mode 100644 index 00000000000..4c4a525b6dd --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java @@ -0,0 +1,210 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.utils; + +import org.tensorflow.*; +import org.tensorflow.ndarray.NdArray; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Scope; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.family.TNumber; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Various methods for dealing with Shapes and Operands + * + * @author Jim Clarke + */ +public class ShapeUtils { + + /** + * Converts a shape operand to a Shape object + * + * @param dims the Operand containing the shape values + * @return + */ + public static Shape toShape(Scope scope, Operand dims) { + long[] longDims = getLongArray(scope, dims); + return Shape.of(longDims); + } + + /** + * Converts a TInt32 type Operand to a Java int array + * + * @param scope the TensorFlow scope + * @param dims the TInt32 Operand + * @return the int array + */ + public static int[] getIntArray(Scope scope, Operand dims) { + long[] longDims = getLongArray(scope, dims); + return Arrays.stream(longDims).mapToInt(i -> (int) i).toArray(); + } + + /** + * Converts a TInt32 or TInt64 Operand to a java long array + * + * @param scope the TensorFlow scope + * @param dims the Operand + * @param the type of the dimensions, must either be TInt32 or TInt64 type + * @return the long array + * @throws java.lang.IllegalArgumentException if the dims type is not an integer + */ + public static long[] getLongArray(Scope scope, Operand dims) { + DataType dType = dims.asOutput().dataType(); + if (!dType.isInteger()) { + throw new IllegalArgumentException("the data type must be an integer type"); + } + List result = new ArrayList<>(); + + if (scope.env().isEager()) { + if (dType.equals(TInt32.DTYPE)) + ((Operand) dims) + .asOutput() + .data() + .scalars() + .forEach(s -> result.add((long) s.getInt())); + else + ((Operand) dims).asOutput().data().scalars().forEach(s -> result.add(s.getLong())); + } else { + try (Session session = new Session((Graph) scope.env())) { + if (dType.equals(TInt32.DTYPE)) { + try (Tensor tensorResult = + session.runner().fetch(dims).run().get(0).expect(TInt32.DTYPE)) { + tensorResult.data().scalars().forEach(s -> result.add((long) s.getInt())); + } + } else { + try (Tensor tensorResult = + session.runner().fetch(dims).run().get(0).expect(TInt64.DTYPE)) { + tensorResult.data().scalars().forEach(s -> result.add(s.getLong())); + } + } + } + } + return result.stream().mapToLong(i -> i).toArray(); + } + + /** + * Gets the shape for the data within a Tensor + * + * @param tensor the tensor + * @return the Shape of the tensor's data; + */ + public static Shape getShape(Tensor tensor) { + NdArray data = (NdArray) tensor.data(); + return data.shape(); + } + + /** + * Determines whether two shapes are compatible. + * + *

    + * + *

    Two possibly-partially-defined shapes are compatible if there exists a fully-defined shape + * that both shapes can represent. Thus, compatibility allows the shape inference code to reason + * about partially-defined shapes. For example: + * + *

      + *
    • Shape.unknown() is compatible with all shapes. + *
    • Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) is compatible with all two-dimensional + * shapes, such as Shape(32, 784), and also Shape.unknown(). It is + * not compatible with, for example, Shape(UNKNOWN_SIZE) or + * Shape(UNKNOWN_SIZE, UNKNOWN_SIZE, UNKNOWN_SIZE). + *
    • Shape(32, UNKNOWN_SIZE) is compatible with all two-dimensional shapes with + * size 32 in the 0th dimension, and also Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) and + * Shape.unknown(). It is not compatible with, for example, Shape(32) + * , Shape(32, UNKNOWN_SIZE, 1) or Shape(64, UNKNOWN_SIZE). + *
    • Shape(32, 784) is compatible with itself, and also + * Shape(32, UNKNOWN_SIZE), Shape(UNKNOWN_SIZE, 784), + * Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) and Shape.unknown(). It is not + * compatible with, for example, Shape(32, 1, 784) or Shape(UNKNOWN_SIZE) + * . + *
    + * + *

    The compatibility relation is reflexive and symmetric, but not transitive. For example, + * Shape(32, 784) is compatible with Shape.unknown(), and + * Shape.unknown() is compatible with Shape(4, 4), but Shape(32, 784) + * is not compatible with Shape(4, 4). + * + * @param a The first shape + * @param b The second shape + * @return true, if the two shapes are compatible. + */ + public static boolean isCompatibleWith(Shape a, Shape b) { + if (!isUnknownShape(a) && !isUnknownShape(b)) { + if (a.numDimensions() != b.numDimensions()) { + return false; + } + for (int i = 0; i < a.numDimensions(); i++) { + if (!isCompatible(a.size(i), b.size(i))) { + return false; + } + } + } + return true; + } + + /** + * Determines if a shape is an unknown shape as provided in Shape.unknown(). + * + * @param a the shape to test. + * @return true if the shape is an unknown shape + */ + public static boolean isUnknownShape(Shape a) { + return a.asArray() == null; + } + + /** + * Reshapes the shape by eliminating trailing Dimensions. + * + * @param shape the shape to squeeze + * @param axis the axis to squeeze + * @return the new shape + */ + public static Shape squeeze(Shape shape, int axis) { + axis %= shape.numDimensions(); + if (axis < 0) { + axis = shape.numDimensions() + axis; + } + long[] array = shape.asArray(); + long[] newArray = new long[axis]; + for (int i = 0; i < axis - 1; i++) { + newArray[i] = array[i]; + } + long sum = array[axis - 1]; + for (int i = axis; i < array.length; i++) { + sum *= array[i]; + } + newArray[axis - 1] = sum; + return Shape.of(newArray); + } + + /** + * Test to see if 2 shape dimensions are compatible. + * + *

    The dimensions are compatible if either dimension is Shape.UNKNOWN_SIZE or both + * dimensions are equal + * + * @param dim the first dimension + * @param otherDim the second dimension + * @return true, if both dimensions are compatible + */ + public static boolean isCompatible(long dim, long otherDim) { + return dim == Shape.UNKNOWN_SIZE || otherDim == Shape.UNKNOWN_SIZE || dim == otherDim; + } +} From 9360efe6be4ca3be14dd817f1a18469092e1207d Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Sun, 20 Sep 2020 10:52:05 -0400 Subject: [PATCH 35/55] Add initializers --- .../framework/initializers/ConstantTest.java | 146 +++++++++ .../initializers/GlorotNormalTest.java | 74 +++++ .../initializers/GlorotUniformTest.java | 93 ++++++ .../framework/initializers/HeNormalTest.java | 93 ++++++ .../framework/initializers/HeUniformTest.java | 93 ++++++ .../framework/initializers/IdentityTest.java | 112 +++++++ .../initializers/InitializerFunctionTest.java | 122 ++++++++ .../initializers/InitializersTest.java | 210 +++++++++++++ .../initializers/LeCunNormalTest.java | 94 ++++++ .../initializers/LeCunUniformTest.java | 72 +++++ .../framework/initializers/OnesTest.java | 141 +++++++++ .../initializers/OrthogonalTest.java | 294 ++++++++++++++++++ .../initializers/RandomNormalTest.java | 94 ++++++ .../initializers/RandomUniformTest.java | 91 ++++++ .../initializers/TruncatedNormalTest.java | 93 ++++++ .../initializers/VarianceScalingTest.java | 154 +++++++++ .../framework/initializers/ZerosTest.java | 174 +++++++++++ 17 files changed, 2150 insertions(+) create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java new file mode 100644 index 00000000000..a816c58a62b --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java @@ -0,0 +1,146 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.*; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.fail; + +/** Test the Constant initializer */ +public class ConstantTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + public ConstantTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Constant. */ + @Test + public void testCallUInt() { + Byte[] expected = {0xf, 0xf, 0xf, 0xf}; // init to constant to make sure they all change to zero + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 0xf); + Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallInt() { + Integer[] expected = { + 0xf, 0xf, 0xf, 0xf + }; // init to constant to make sure they all change to zero + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 0xf); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallLong() { + long[] expected = { + 0xffL, 0xffL, 0xffL, 0xffL + }; // init to constant to make sure they all change to zero + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 0xffL); + Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallFloat() { + float[] expected = {12.f, 12.f, 12.f, 12.f}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 12.F); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallDouble() { + double[] expected = {11., 11., 11., 11.}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Constant instance = new Constant<>(tf, 11.); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallString() { + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Constant instance = new Constant<>(tf, 22); + instance.call(tf.constant(shape), TString.DTYPE); + fail("IllegalArgumentException should have been thrown for TString"); + } + }); + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallBool() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Boolean[] expected = {true, true, true, true}; + + Constant instance = new Constant<>(tf, true); + Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java new file mode 100644 index 00000000000..8dd29f5f016 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java @@ -0,0 +1,74 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** Test cases for GlorotNormal initializer */ +public class GlorotNormalTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + public GlorotNormalTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class GlorotNormal. */ + @Test + public void testCall_Float() { + float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + GlorotNormal instance = new GlorotNormal<>(tf, SEED); + + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = { + 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + GlorotNormal instance = new GlorotNormal<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java new file mode 100644 index 00000000000..ac6d5219ab9 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java @@ -0,0 +1,93 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** + * Test cases for GlorotUniform initializer + */ +public class GlorotUniformTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + int counter; + + public GlorotUniformTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + + /** + * Test of call method, of class GlorotUniform. + */ + @Test + public void testCall_Float() { + float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + GlorotUniform instance + = new GlorotUniform<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = {0.06468193804916589, 0.44170328686673477, + 0.06711059208157763, 0.6278720842445181}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + GlorotUniform instance + = new GlorotUniform<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java new file mode 100644 index 00000000000..2428578103b --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java @@ -0,0 +1,93 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** + * Test the HeNormal initializer + */ +public class HeNormalTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + int counter; + + public HeNormalTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + + /** + * Test of call method, of class HeNormal. + */ + @Test + public void testCall_Float() { + float[] expected = {-0.7408917F, -0.41477704F, -0.11133519F, -0.45044965F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + HeNormal instance + = new HeNormal<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = {2.117256561466521, -1.7661437620712939, + -0.7650439080001085, 0.6889186518780481}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + HeNormal instance + = new HeNormal<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java new file mode 100644 index 00000000000..fdbd5fba9d6 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java @@ -0,0 +1,93 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** + * Test the HeUniform initializer + */ +public class HeUniformTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + int counter; + + public HeUniformTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + + /** + * Test of call method, of class HeUniform. + */ + @Test + public void testCall_Float() { + float[] expected = {1.3104724f, 1.1583493f, 1.5936272f, 0.93282115f}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + HeUniform instance + = new HeUniform<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = {.09147407402970674, 0.6246627788317102, + 0.09490870950065552, 0.8879452169740599}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + HeUniform instance + = new HeUniform<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java new file mode 100644 index 00000000000..c8244948347 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java @@ -0,0 +1,112 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.EagerSession; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.fail; + +/** Test the Identity initializer */ +public class IdentityTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + public IdentityTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Orthogonal. */ + @Test + public void testCall_Int() { + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (EagerSession session = EagerSession.create()) { + Ops tf = Ops.create(session); + Shape shape = Shape.of(10, 10); + Identity instance = new Identity<>(tf, 2.); + instance.call(tf.constant(shape), TInt32.DTYPE); + fail("Should have thrown IllegalArgumentException on Integer type"); + } + }); + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallFloat() { + float[] expected = { + 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Identity instance = new Identity<>(tf, 2.); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Constant. */ + @Test + public void testCallDouble() { + double[] expected = { + 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Identity instance = new Identity<>(tf, 2.); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java new file mode 100644 index 00000000000..0e39243a019 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java @@ -0,0 +1,122 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.*; + +/** Test the InitializerFunction initializer */ +public class InitializerFunctionTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + public InitializerFunctionTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Initializer using Lambda. */ + @Test + public void testLambdaCallFloat() { + float[] expected = {12345.0f}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new float[] {12345.0f}), dtype); + Operand operand = func.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Initializer using Lambda. */ + @Test + public void testLambdaCallUInt8() { + byte[] expected = {0x15}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new byte[] {0x15}), dtype); + Operand operand = func.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Initializer using Lambda. */ + @Test + public void testLambdaCallInt() { + int[] expected = {12345}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new int[] {12345}), dtype); + Operand operand = func.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Initializer using Lambda. */ + @Test + public void testLambdaCallLong() { + long[] expected = {12345L}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new long[] {12345L}), dtype); + Operand operand = func.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Initializer using Lambda. */ + @Test + public void testLambdaCallDouble() { + double[] expected = {Math.PI}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new double[] {Math.PI}), dtype); + Operand operand = func.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java new file mode 100644 index 00000000000..820938023ea --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java @@ -0,0 +1,210 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.op.Ops; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** Test the Initializers class */ +public class InitializersTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + public InitializersTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_IDENTITY() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.IDENTITY.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof Identity); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_ONES() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.ONES.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof Ones); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_ZEROS() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.ZEROS.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof Zeros); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_GLOROT_NORMAL() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.GLOROT_NORMAL.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof GlorotNormal); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_GLOROT_UNIFORM() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.GLOROT_UNIFORM.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof GlorotUniform); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_ORTHOGONAL() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.ORTHOGONAL.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof Orthogonal); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_RANDOM_NORMAL() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.RANDOM_NORMAL.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof RandomNormal); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_RANDOM_UNIFORM() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.RANDOM_UNIFORM.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof RandomUniform); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_TRUNCATED_NORMAL() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.TRUNCATED_NORMAL.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof TruncatedNormal); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_VARIANCE_SCALING() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.VARIANCE_SCALING.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof VarianceScaling); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_HE_NORMAL() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.HE_NORMAL.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof HeNormal); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_HE_UNIFORM() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.HE_UNIFORM.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof HeUniform); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_LECUN_NORMAL() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.LECUN_NORMAL.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof LeCunNormal); + } + } + + /** Test of get method, of class Initializers. */ + @Test + public void testGet_LECUN_UNIFORM() { + + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Initializer result = Initializers.LECUN_UNIFORM.createInitializer(tf); + assertNotNull(result); + assertTrue(result instanceof LeCunUniform); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java new file mode 100644 index 00000000000..ed736c8b83b --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java @@ -0,0 +1,94 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** + * Test the LeCunNormal initializer + */ +public class LeCunNormalTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + public LeCunNormalTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + + + + + + /** + * Test of call method, of class LeCunNormal. + */ + @Test + public void testCall_Float() { + float[] expected = {-0.52388954f, -0.29329166f, -0.07872587f, -0.31851602f}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCunNormal instance + = new LeCunNormal<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = {1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCunNormal instance + = new LeCunNormal<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java new file mode 100644 index 00000000000..71a79ad143a --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java @@ -0,0 +1,72 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** Test the LeCunUniform initializer */ +public class LeCunUniformTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + public LeCunUniformTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class LeCunUniform. */ + @Test + public void testCall_Float() { + float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCunUniform instance = new LeCunUniform<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = { + 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCunUniform instance = new LeCunUniform<>(tf, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java new file mode 100644 index 00000000000..cf40f6e6ef4 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java @@ -0,0 +1,141 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.*; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.fail; + +/** Test the Ones initializer */ +public class OnesTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + public OnesTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Ones. */ + @Test + public void testCallUInt() { + Byte[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changet to zero + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Ones. */ + @Test + public void testCallInt() { + int[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changet to zero + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Ones. */ + @Test + public void testCallLong() { + long[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changet to zero + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Ones. */ + @Test + public void testCallFloat() { + float[] expected = {1.f, 1.f, 1.f, 1.f}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Ones. */ + @Test + public void testCallDouble() { + double[] expected = {1., 1., 1., 1.}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Ones. */ + @Test + public void testCallString() { + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TString.DTYPE); + fail("IllegalArgumentException should have been thrown for TString"); + } + }); + } + + @Test + public void testCallBool() { + Boolean[] expected = {true, true, true, true}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java new file mode 100644 index 00000000000..0d034c2d4b0 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java @@ -0,0 +1,294 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.fail; + +/** Test the Orthogonal initializer */ +public class OrthogonalTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + private static final double GAIN_VALUE = 1.0; + + public OrthogonalTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Orthogonal. */ + @Test + public void testCall_Int() { + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Orthogonal instance = new Orthogonal(tf, GAIN_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + fail("Should jave thrown IllegalArgumentException on Integer type"); + } + }); + } + + /** Test of call method, of class Orthogonal. */ + @Test + public void testCall_Float() { + float[] expected = { + -0.3097564f, + -0.11214957f, + -0.04083291f, + -0.24071707f, + 0.29931748f, + 0.4461752f, + -0.16319607f, + -0.30204326f, + -0.26093683f, + 0.59770143f, + 0.15418966f, + 0.50748324f, + -0.03822303f, + -0.59814125f, + 0.11034431f, + -0.01813965f, + -0.21199228f, + -0.04033701f, + -0.40765563f, + -0.36632827f, + 0.10572237f, + 0.27673772f, + -0.00941799f, + 0.07603773f, + 0.48299354f, + 0.37719437f, + 0.65557724f, + 0.31341612f, + 0.04323304f, + -0.03049367f, + -0.00511622f, + -0.30234647f, + -0.24784878f, + -0.27694383f, + -0.6077379f, + 0.40848815f, + 0.40706915f, + -0.0732277f, + -0.16744994f, + -0.18739915f, + -0.151793f, + -0.21273288f, + 0.24265847f, + -0.00964088f, + 0.25967413f, + 0.40649366f, + -0.20693113f, + -0.3185814f, + 0.38828942f, + -0.5873469f, + -0.48195702f, + 0.32218578f, + -0.29953587f, + 0.00851173f, + 0.01569128f, + -0.33701414f, + 0.36372715f, + -0.54230285f, + 0.17351612f, + -0.06162076f, + -0.2438229f, + 0.35682017f, + 0.7260855f, + 0.24974659f, + -0.34703425f, + 0.14939374f, + 0.09953088f, + -0.08766067f, + -0.25020337f, + 0.02669237f, + 0.41220927f, + 0.4300388f, + -0.03955907f, + -0.11728173f, + -0.2787032f, + 0.26550797f, + -0.11485924f, + -0.19093868f, + 0.5791758f, + 0.3107499f, + -0.46279088f, + -0.04041088f, + 0.23238355f, + -0.5590758f, + -0.07460429f, + -0.13264497f, + 0.04314278f, + 0.47426552f, + 0.39604855f, + 0.10401782f, + -0.41256273f, + 0.31454724f, + -0.45164356f, + 0.33607012f, + -0.1557368f, + 0.31974515f, + -0.3645014f, + 0.37268594f, + -0.00656797f, + -0.12504758f + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Orthogonal instance = new Orthogonal(tf, GAIN_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Orthogonal. */ + @Test + public void testCall_Double() { + double[] expected = { + 0.4852166440161694, + -0.4290733656784607, + 0.09147039077482466, + -0.3033533647665251, + -0.13422222791377508, + -0.3129540993206184, + 0.183062569636896, + -0.0797586175921162, + 0.36040118003516713, + -0.4408543207576007, + -0.2732620793726008, + -0.031650254737601205, + -0.487642998274466, + 0.18503560531435395, + -0.14802624287521232, + 0.11682409149136887, + 0.43002930688897106, + 0.39878194544024825, + -0.10095741255484561, + -0.5124333590595215, + 0.18311274512293216, + 0.14142110936521135, + -0.21143499395594853, + -0.11919423920003563, + 0.24017159729187723, + -0.2593437441508134, + 0.667745346902609, + -0.35315808322575254, + -0.3404386389145398, + 0.2758862960934774, + 0.07139824569700268, + 0.09448264380916259, + 0.465791321612319, + 0.4543680210644348, + 0.5148494317797793, + -0.1548002078084767, + 0.2763767527316248, + 0.37222851387188227, + 0.2398314168577794, + -0.03275882219483219, + 0.19185631817009907, + 0.05900663337192141, + 0.018173647881195746, + 0.37339628154719684, + 0.11377436263350496, + 0.578439238185625, + 0.06494636168027997, + -0.5948057813239421, + 0.1107116755187609, + -0.319607142429973, + 0.2155568630609747, + 0.09929282909444799, + -0.5490811366582051, + -0.010954009451688201, + 0.11707862431173488, + 0.1617550218319554, + 0.01106019309067251, + 0.14579444371591477, + 0.6518483278305304, + 0.3948536518472629, + 0.2319871561912634, + -0.18238927225826657, + 0.03282551370311214, + -0.48208882285440263, + 0.46518806000653323, + 0.5239030340556176, + -0.02248815414434615, + 0.3216103558486239, + -0.2874388067830515, + -0.044661384666030306, + 0.15464707821517193, + -0.08187337600211494, + 0.3577511581572764, + 0.03953488082715882, + -0.5961789252666962, + 0.3822951575732457, + 0.4187023892379448, + 0.1923143091248148, + 0.010556064157240419, + 0.35474683982006183, + 0.643204326887452, + -0.07277000873865974, + -0.22821669120828425, + 0.45985896233305346, + -0.11635349685972587, + -0.12498127959759603, + -0.2799591321237366, + 0.20319311304196724, + -0.4071624009218664, + 0.053248119820197976, + 0.2766685450718409, + 0.8528551980781793, + 0.0959402007341447, + -0.2609469621757593, + -0.15906257638032784, + -0.013734816737670838, + -0.02756903693269743, + 0.12075359886144169, + 0.028705024822326536, + -0.27774030642345227 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Orthogonal instance = new Orthogonal(tf, GAIN_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java new file mode 100644 index 00000000000..05a7baf8c59 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java @@ -0,0 +1,94 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** + * Test the RandomNormal initializer + */ +public class RandomNormalTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + private static final double MEAN_VALUE = 0.0; + private static final double STDDEV_VALUE = 3.0; + + public RandomNormalTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + + + /** + * Test of call method, of class RandomNormal. + */ + @Test + public void testCall_Float() { + float[] expected = {-1.955122f, -1.0945456f, -0.29379985f, -1.1886811f}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomNormal instance + = new RandomNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = {5.58717960737721, -4.6606361225803825, + -0.5743065932046001, -7.207274031929497}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomNormal instance + = new RandomNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java new file mode 100644 index 00000000000..8c4e85a76f5 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java @@ -0,0 +1,91 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; + +/** Test the RandomUniform initializer */ +public class RandomUniformTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + private static final double MIN_VALUE = 0.0; + private static final double MAX_VALUE = 10.0; + + public RandomUniformTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class RandomUniform. */ + @Test + public void testCall_Int() { + int[] expected = {6, 1, 4, 1}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class RandomUniform. */ + @Test + public void testCall_Float() { + float[] expected = {7.5660157f, 6.6877327f, 9.200811f, 5.385646F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = { + 0.5281258126492294, 3.6064922351122752, 0.5479556897864346, 5.126554100456142 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java new file mode 100644 index 00000000000..60eca46f6d6 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java @@ -0,0 +1,93 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** + * Test the TruncatedNormal initializer + */ +public class TruncatedNormalTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + private static final double MEAN_VALUE = 0.0; + private static final double STDDEV_VALUE = 3.0; + + public TruncatedNormalTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + + /** + * Test of call method, of class TruncatedNormal. + */ + @Test + public void testCall_Float() { + float[] expected = {-1.955122F, -1.0945456F, -0.29379985F, -1.1886811F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + TruncatedNormal instance + = new TruncatedNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = {5.58717960737721, -4.6606361225803825, + -2.0188567598844402, 1.8179715736711362}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + TruncatedNormal instance + = new TruncatedNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java new file mode 100644 index 00000000000..23402b63dd1 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -0,0 +1,154 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** Test the VarianceScaling initializer */ +public class VarianceScalingTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + private static final long SEED = 1000L; + + public VarianceScalingTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class VarianceScaling. */ + @Test + public void testCall_Float_1_FAN_IN_TRUNCATED_NORMAL() { + float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.TRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double_1_FAN_IN_TRUNCATED_NORMAL() { + double[] expected = { + 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.TRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class VarianceScaling. */ + @Test + public void testCall_Float_1_FAN_IN_UNTRUNCATED_NORMAL() { + float[] expected = {-0.46082667F, -0.25798687F, -0.06924929F, -0.28017485F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double_1_FAN_IN_UNTRUNCATED_NORMAL() { + double[] expected = { + 1.3169108626945392, -1.0985224689731887, -0.13536536217837225, -1.698770780615686 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class VarianceScaling. */ + @Test + public void testCall_Float_1_FAN_IN_UNIFORM() { + float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double_1_FAN_IN_UNIFORM() { + double[] expected = { + 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 + }; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java new file mode 100644 index 00000000000..5f6fcd0a4dd --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java @@ -0,0 +1,174 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import java.util.concurrent.atomic.AtomicInteger; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TBool; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; +import org.tensorflow.types.TInt32; +import org.tensorflow.types.TInt64; +import org.tensorflow.types.TString; +import org.tensorflow.types.TUint8; + +/** + * Test the Zeros initializer + */ +public class ZerosTest { + + private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + + public ZerosTest() { + } + + @BeforeAll + public static void setUpClass() { + } + + @AfterAll + public static void tearDownClass() { + } + + @BeforeEach + public void setUp() { + } + + @AfterEach + public void tearDown() { + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallUInt() { + byte[] expected = {0, 0, 0, 0}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallInt() { + int[] expected = {0, 0, 0, 0}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallLong() { + long[] expected = {0, 0, 0, 0}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallFloat() { + float[] expected = {0.F, 0.F, 0.F, 0.F}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallDouble() { + double[] expected = {0., 0., 0., 0.}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallString() { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TString.DTYPE); + AtomicInteger counter = new AtomicInteger(); + operand.asTensor().data().scalars().forEach(s -> { + counter.getAndIncrement(); + assertTrue(s.getObject().isEmpty()); + }); + assertEquals(counter.get(), 2 * 2); + } + } + + /** + * Test of call method, of class Zeros. + */ + @Test + public void testCallBool() { + Boolean[] expected = {false, false, false, false}; + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); + session.evaluate(expected, operand); + } + } + +} From 8e28bb569e5f4dec157ce7583c21f007ff7c5ac4 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Sun, 20 Sep 2020 11:08:47 -0400 Subject: [PATCH 36/55] Remove @author --- .../main/java/org/tensorflow/framework/utils/ShapeUtils.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java index 4c4a525b6dd..7f6f4bb7af3 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java @@ -27,9 +27,7 @@ import java.util.List; /** - * Various methods for dealing with Shapes and Operands - * - * @author Jim Clarke + * Various methods for processing with Shapes and Operands */ public class ShapeUtils { From 33530bbd7d41f4b8f3b628b2252a378ae2f9bb49 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Sun, 20 Sep 2020 11:38:19 -0400 Subject: [PATCH 37/55] Fix javadoc, change name of squeeze to reduce. Add logic to in reduce to return Shape.unknown if the original shape is already unknown. Added handling of UNKNOWN_SIZE in the actual reduction of the shape. --- .../framework/utils/ShapeUtils.java | 65 ++++++++++++------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java index 7f6f4bb7af3..10a2beb42ac 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java @@ -20,6 +20,7 @@ import org.tensorflow.op.Scope; import org.tensorflow.types.TInt32; import org.tensorflow.types.TInt64; +import org.tensorflow.types.TUint8; import org.tensorflow.types.family.TNumber; import java.util.ArrayList; @@ -35,7 +36,7 @@ public class ShapeUtils { * Converts a shape operand to a Shape object * * @param dims the Operand containing the shape values - * @return + * @return a new Shape based on an Operand that contains dimensions */ public static Shape toShape(Scope scope, Operand dims) { long[] longDims = getLongArray(scope, dims); @@ -71,14 +72,23 @@ public static long[] getLongArray(Scope scope, Operand di List result = new ArrayList<>(); if (scope.env().isEager()) { - if (dType.equals(TInt32.DTYPE)) - ((Operand) dims) - .asOutput() - .data() - .scalars() - .forEach(s -> result.add((long) s.getInt())); - else - ((Operand) dims).asOutput().data().scalars().forEach(s -> result.add(s.getLong())); + if (dType.equals(TInt32.DTYPE)) { + @SuppressWarnings("unchecked") + Operand idims = (Operand) dims; + + idims.asOutput().data().scalars().forEach(s -> result.add((long) s.getInt())); + } else if (dType.equals(TInt64.DTYPE)) { + @SuppressWarnings("unchecked") + Operand ldims = (Operand) dims; + ldims.asOutput().data().scalars().forEach(s -> result.add(s.getLong())); + } else if (dType.equals(TUint8.DTYPE)) { + @SuppressWarnings("unchecked") + Operand udims = (Operand) dims; + udims.asOutput().data().scalars().forEach(s -> result.add(s.getObject().longValue())); + }else { // shouldn't happen + throw new IllegalArgumentException("the data type must be an integer type"); + } + } else { try (Session session = new Session((Graph) scope.env())) { if (dType.equals(TInt32.DTYPE)) { @@ -86,11 +96,18 @@ public static long[] getLongArray(Scope scope, Operand di session.runner().fetch(dims).run().get(0).expect(TInt32.DTYPE)) { tensorResult.data().scalars().forEach(s -> result.add((long) s.getInt())); } - } else { + } else if (dType.equals(TInt64.DTYPE)){ try (Tensor tensorResult = session.runner().fetch(dims).run().get(0).expect(TInt64.DTYPE)) { tensorResult.data().scalars().forEach(s -> result.add(s.getLong())); } + }else if (dType.equals(TUint8.DTYPE)){ + try (Tensor tensorResult = + session.runner().fetch(dims).run().get(0).expect(TUint8.DTYPE)) { + tensorResult.data().scalars().forEach(s -> result.add(s.getObject().longValue())); + } + }else { // shouldn't happen + throw new IllegalArgumentException("the data type must be an integer type"); } } } @@ -103,8 +120,8 @@ public static long[] getLongArray(Scope scope, Operand di * @param tensor the tensor * @return the Shape of the tensor's data; */ - public static Shape getShape(Tensor tensor) { - NdArray data = (NdArray) tensor.data(); + public static Shape getShape(Tensor tensor) { + NdArray data = (NdArray) tensor.data(); return data.shape(); } @@ -144,7 +161,7 @@ public static Shape getShape(Tensor tensor) { * @return true, if the two shapes are compatible. */ public static boolean isCompatibleWith(Shape a, Shape b) { - if (!isUnknownShape(a) && !isUnknownShape(b)) { + if (isUnknownShape(a) && isUnknownShape(b)) { if (a.numDimensions() != b.numDimensions()) { return false; } @@ -164,36 +181,38 @@ public static boolean isCompatibleWith(Shape a, Shape b) { * @return true if the shape is an unknown shape */ public static boolean isUnknownShape(Shape a) { - return a.asArray() == null; + return a.equals(Shape.unknown()); } /** - * Reshapes the shape by eliminating trailing Dimensions. + * Reduces the shape by eliminating trailing Dimensions. + *

    The last dimension, specified by axis, will be a product of all remaining dimensions

    * * @param shape the shape to squeeze * @param axis the axis to squeeze * @return the new shape */ - public static Shape squeeze(Shape shape, int axis) { + public static Shape reduce(Shape shape, int axis) { axis %= shape.numDimensions(); if (axis < 0) { axis = shape.numDimensions() + axis; } long[] array = shape.asArray(); + if(array == null) + return Shape.unknown(); long[] newArray = new long[axis]; - for (int i = 0; i < axis - 1; i++) { - newArray[i] = array[i]; - } - long sum = array[axis - 1]; + System.arraycopy(array, 0, newArray, 0, axis - 1); + long prod = array[axis - 1]; for (int i = axis; i < array.length; i++) { - sum *= array[i]; + if(array[i] != Shape.UNKNOWN_SIZE) + prod *= array[i]; } - newArray[axis - 1] = sum; + newArray[axis - 1] = prod; return Shape.of(newArray); } /** - * Test to see if 2 shape dimensions are compatible. + * Test to see if two shape dimensions are compatible. * *

    The dimensions are compatible if either dimension is Shape.UNKNOWN_SIZE or both * dimensions are equal From 32618884e2c9784bbc9d0e60be0ef09a5cab1f08 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 16:54:02 -0400 Subject: [PATCH 38/55] Update JavaDoc to highlight difference between compatible shapes and broadcastable shapes. --- .../framework/utils/ShapeUtils.java | 41 +++++++++++-------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java index 10a2beb42ac..ec1fce0f67d 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java @@ -27,9 +27,7 @@ import java.util.Arrays; import java.util.List; -/** - * Various methods for processing with Shapes and Operands - */ +/** Various methods for processing with Shapes and Operands */ public class ShapeUtils { /** @@ -82,12 +80,12 @@ public static long[] getLongArray(Scope scope, Operand di Operand ldims = (Operand) dims; ldims.asOutput().data().scalars().forEach(s -> result.add(s.getLong())); } else if (dType.equals(TUint8.DTYPE)) { - @SuppressWarnings("unchecked") - Operand udims = (Operand) dims; + @SuppressWarnings("unchecked") + Operand udims = (Operand) dims; udims.asOutput().data().scalars().forEach(s -> result.add(s.getObject().longValue())); - }else { // shouldn't happen - throw new IllegalArgumentException("the data type must be an integer type"); - } + } else { // shouldn't happen + throw new IllegalArgumentException("the data type must be an integer type"); + } } else { try (Session session = new Session((Graph) scope.env())) { @@ -96,17 +94,17 @@ public static long[] getLongArray(Scope scope, Operand di session.runner().fetch(dims).run().get(0).expect(TInt32.DTYPE)) { tensorResult.data().scalars().forEach(s -> result.add((long) s.getInt())); } - } else if (dType.equals(TInt64.DTYPE)){ + } else if (dType.equals(TInt64.DTYPE)) { try (Tensor tensorResult = session.runner().fetch(dims).run().get(0).expect(TInt64.DTYPE)) { tensorResult.data().scalars().forEach(s -> result.add(s.getLong())); } - }else if (dType.equals(TUint8.DTYPE)){ + } else if (dType.equals(TUint8.DTYPE)) { try (Tensor tensorResult = - session.runner().fetch(dims).run().get(0).expect(TUint8.DTYPE)) { + session.runner().fetch(dims).run().get(0).expect(TUint8.DTYPE)) { tensorResult.data().scalars().forEach(s -> result.add(s.getObject().longValue())); } - }else { // shouldn't happen + } else { // shouldn't happen throw new IllegalArgumentException("the data type must be an integer type"); } } @@ -156,6 +154,14 @@ public static Shape getShape(Tensor tensor) { * Shape.unknown() is compatible with Shape(4, 4), but Shape(32, 784) * is not compatible with Shape(4, 4). * + *

    Compatibility is not the same as broadcasting. Compatible shapes must have the same number + * of dimensions and for each dimension pair, one dimension has to equal the other dimensions or + * at least one of the dimensions in the pair has to be UNKNOWN_SIZE. + * + *

    Broadcasting allows different dimensions, but paired dimensions have to either be equal, or + * one dimension must be 1. If one shape has less dimensions than another shape, the smaller shape + * is "stretched" with dimensions of 1. See {@link org.tensorflow.op.Ops#broadcastTo}. + * * @param a The first shape * @param b The second shape * @return true, if the two shapes are compatible. @@ -175,7 +181,7 @@ public static boolean isCompatibleWith(Shape a, Shape b) { } /** - * Determines if a shape is an unknown shape as provided in Shape.unknown(). + * Determines if a shape is an unknown shape as provided in Shape.unknown(). * * @param a the shape to test. * @return true if the shape is an unknown shape @@ -186,7 +192,8 @@ public static boolean isUnknownShape(Shape a) { /** * Reduces the shape by eliminating trailing Dimensions. - *

    The last dimension, specified by axis, will be a product of all remaining dimensions

    + * + *

    The last dimension, specified by axis, will be a product of all remaining dimensions * * @param shape the shape to squeeze * @param axis the axis to squeeze @@ -198,14 +205,12 @@ public static Shape reduce(Shape shape, int axis) { axis = shape.numDimensions() + axis; } long[] array = shape.asArray(); - if(array == null) - return Shape.unknown(); + if (array == null) return Shape.unknown(); long[] newArray = new long[axis]; System.arraycopy(array, 0, newArray, 0, axis - 1); long prod = array[axis - 1]; for (int i = axis; i < array.length; i++) { - if(array[i] != Shape.UNKNOWN_SIZE) - prod *= array[i]; + if (array[i] != Shape.UNKNOWN_SIZE) prod *= array[i]; } newArray[axis - 1] = prod; return Shape.of(newArray); From 8860c56a435948c0deae89cc93de3aa457fba946 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 16:55:49 -0400 Subject: [PATCH 39/55] Add handling of TUint8 data types, and add a predicate to evaluate TString and String. --- .../framework/utils/EagerTestSession.java | 119 ++++++++++++ .../framework/utils/GraphTestSession.java | 181 ++++++++++++++++++ .../framework/utils/TestSession.java | 18 ++ 3 files changed, 318 insertions(+) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java index 9fb9885505c..fa679a83297 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java @@ -125,6 +125,16 @@ public void evaluate(double expected, Operand input) { } index.set(0); o.data().scalars().forEach(f -> assertEquals((long) expected, f.getLong())); + } else if (dtype == TUint8.DTYPE) { + Operand o = (Operand) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach(f -> System.out.printf("%d). %x\n", index.getAndIncrement(), f.getByte())); + } + index.set(0); + o.data().scalars().forEach(f -> assertEquals((long) expected, f.getByte())); } } @@ -191,6 +201,18 @@ public void evaluate(Number[] expected, Output input) { o.data() .scalars() .forEach(f -> assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong())); + } else if (dtype == TUint8.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach(f -> System.out.printf("%x). %d\n", index.getAndIncrement(), f.getByte())); + } + index.set(0); + o.data() + .scalars() + .forEach(f -> assertEquals(expected[index.getAndIncrement()].byteValue(), f.getByte())); } } @@ -250,6 +272,48 @@ public void evaluate(FloatNdArray expected, Output input) { .scalars() .forEach( f -> assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong())); + } else if (dtype == TUint8.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + o.data() + .scalars() + .forEach(f -> System.out.printf("%d). %x\n", index.getAndIncrement(), f.getByte())); + } + index.set(0); + o.data() + .scalars() + .forEach( + f -> assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getByte())); + } + } + + /** {@inheritDoc} */ + @Override + public void evaluateString(Output input, Predicate predicate) { + AtomicInteger index = new AtomicInteger(); + boolean isScalar = input.shape().equals(Shape.scalar()); + if(debug) { + if (isScalar) { + System.out.printf( + "0). %b <==> %s\n", predicate.test(input.data().getObject()), input.data().getObject()); + } else { + input.data() + .scalars() + .forEachIndexed( + (idx, s) -> + System.out.printf( + "%d). %b <==> %s\n", + index.getAndIncrement(), predicate.test(s.getObject()), s.getObject())); + } + } + index.set(0); + if (isScalar) { + assertTrue(predicate.test(input.data().getObject())); + } else { + input.data() + .scalars() + .forEachIndexed((idx, s) -> assertTrue(predicate.test(s.getObject()))); } } @@ -355,6 +419,30 @@ public void evaluate(Output input, Predicate predic .scalars() .forEachIndexed((idx, f) -> assertTrue(predicate.test(o.data().getLong()))); } + } else if (dtype == TUint8.DTYPE) { + Output o = (Output) input; + if (debug) { + if (isScalar) { + System.out.printf( + "0). %b <==> %x\n", predicate.test(o.data().getByte()), o.data().getByte()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> + System.out.printf( + "%d). %b <==> %x\n", + index.getAndIncrement(), predicate.test(f.getByte()), f.getByte())); + } + } + index.set(0); + if (isScalar) { + assertTrue(predicate.test(o.data().getByte())); + } else { + o.data() + .scalars() + .forEachIndexed((idx, f) -> assertTrue(predicate.test(o.data().getByte()))); + } } else { fail("Unexpected DataType: " + dtype); } @@ -515,6 +603,31 @@ public void evaluate(Output expected, Output input) { .scalars() .forEachIndexed((idx, f) -> assertEquals(x.data().getLong(idx), f.getLong())); } + } else if (dtype == TUint8.DTYPE) { + Output x = (Output) expected; + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + if (debug) { + if (isScalar) { + System.out.printf("0). %x <==> %x\n", x.data().getByte(), o.data().getByte()); + } else { + o.data() + .scalars() + .forEachIndexed( + (idx, f) -> + System.out.printf( + "%d). %x <==> %x\n", + index.getAndIncrement(), x.data().getByte(idx), f.getByte())); + } + } + index.set(0); + if (isScalar) { + assertEquals(x.data().getByte(), o.data().getByte()); + } else { + o.data() + .scalars() + .forEachIndexed((idx, f) -> assertEquals(x.data().getByte(idx), f.getByte())); + } } else if (dtype == TString.DTYPE) { Output x = (Output) expected; Output o = (Output) input; @@ -596,6 +709,12 @@ public void print(PrintWriter writer, Output input) { o.data() .scalars() .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); + } else if (dtype == TUint8.DTYPE) { + Output o = (Output) input; + AtomicInteger index = new AtomicInteger(); + o.data() + .scalars() + .forEach(f -> System.out.printf("%d). %x\n", index.getAndIncrement(), f.getByte())); } else if (dtype == TString.DTYPE) { Output o = (Output) input; AtomicInteger index = new AtomicInteger(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java index 0416267ae59..f5ab800f160 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java @@ -169,6 +169,22 @@ public void evaluate(double expected, Operand input) { this.getGraphSession().runner().fetch(input).run().get(0).expect(TInt64.DTYPE)) { result.data().scalars().forEach(f -> assertEquals((long) expected, f.getLong())); } + } else if (dtype == TUint8.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + result + .data() + .scalars() + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getByte())); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + result.data().scalars().forEach(f -> assertEquals((long) expected, f.getByte())); + } } else { fail("Unexpected DataType: " + dtype); } @@ -265,6 +281,25 @@ public void evaluate(Number[] expected, Output input) { .scalars() .forEach(f -> assertEquals(expected[index.getAndIncrement()].longValue(), f.getLong())); } + } else if (dtype == TUint8.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + result + .data() + .scalars() + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getByte())); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + result + .data() + .scalars() + .forEach(f -> assertEquals(expected[index.getAndIncrement()].longValue(), f.getByte())); + } } else { fail("Unexpected DataType: " + dtype); } @@ -358,6 +393,26 @@ public void evaluate(FloatNdArray expected, Output input) { .forEach( f -> assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getLong())); } + } else if (dtype == TUint8.DTYPE) { + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + result + .data() + .scalars() + .forEach(f -> System.out.printf("%d). %d\n", index.getAndIncrement(), f.getByte())); + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + result + .data() + .scalars() + .forEach( + f -> assertEquals((long) expected.getFloat(index.getAndIncrement()), f.getByte())); + } } else { fail("Unexpected DataType: " + dtype); } @@ -592,6 +647,46 @@ public void evaluate(Output expected, Output input) { assertEquals(expectedResult.data().getLong(idx), f.getLong(), epsilon)); } } + } else if (dtype == TUint8.DTYPE) { + final Output finalExpected = (Output) expected; + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %d <==> %d\n", expectedResult.data().getByte(), result.data().getByte()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> + System.out.printf( + "%d). %d <==> %d\n", + index.getAndIncrement(), + finalExpected.data().getByte(idx), + f.getByte())); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE); + Tensor expectedResult = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + if (isScalar) { + assertEquals(expectedResult.data().getByte(), result.data().getByte(), epsilon); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> + assertEquals(expectedResult.data().getByte(idx), f.getByte(), epsilon)); + } + } } else if (dtype == TBool.DTYPE) { final Output finalExpected = (Output) expected; if (debug) { @@ -675,6 +770,44 @@ public void evaluate(Output expected, Output input) { } } + /** {@inheritDoc} */ + @Override + public void evaluateString(Output input, Predicate predicate) { + boolean isScalar = input.shape().equals(Shape.scalar()); + AtomicInteger index = new AtomicInteger(); + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %s\n", + predicate.test(result.data().getObject()), result.data().getObject()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> + System.out.printf( + "%d). %b <==> %s\n", + index.getAndIncrement(), predicate.test(f.getObject()), f.getObject())); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + if (isScalar) { + assertTrue(predicate.test(result.data().getObject())); + } else { + result + .data() + .scalars() + .forEachIndexed((idx, s) -> assertTrue(predicate.test(s.getObject()))); + } + } + } + /** {@inheritDoc} */ @Override public void evaluate(Output input, Predicate predicate) { @@ -808,6 +941,38 @@ public void evaluate(Output input, Predicate predic .forEachIndexed((idx, f) -> assertTrue(predicate.test(result.data().getLong()))); } } + } else if (dtype == TUint8.DTYPE) { + if (debug) { + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + if (isScalar) { + System.out.printf( + "0). %b <==> %d\n", + predicate.test(result.data().getByte()), result.data().getByte()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> + System.out.printf( + "%d). %b <==> %d\n", + index.getAndIncrement(), predicate.test(f.getByte()), f.getByte())); + } + } + } + index.set(0); + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + if (isScalar) { + assertTrue(predicate.test(result.data().getByte())); + } else { + result + .data() + .scalars() + .forEachIndexed((idx, f) -> assertTrue(predicate.test(result.data().getByte()))); + } + } } else { fail("Unexpected DataType: " + dtype); } @@ -881,6 +1046,22 @@ public void print(PrintWriter writer, Output input) { (idx, f) -> writer.printf("%d). %d\n", index.getAndIncrement(), f.getLong())); } } + } else if (dtype == TUint8.DTYPE) { + AtomicInteger index = new AtomicInteger(); + + try (Tensor result = + this.getGraphSession().runner().fetch(input).run().get(0).expect(TUint8.DTYPE)) { + if (isScalar) { + writer.printf( + "%d). %x\n", index.getAndIncrement(), ((Output) input).data().getByte()); + } else { + result + .data() + .scalars() + .forEachIndexed( + (idx, f) -> writer.printf("%d). %x\n", index.getAndIncrement(), f.getByte())); + } + } } else if (dtype == TBool.DTYPE) { AtomicInteger index = new AtomicInteger(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java index a0855eb6260..7face2123f8 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java @@ -469,6 +469,24 @@ public void evaluate(Operand input, Predicate predi */ public abstract void evaluate(Output input, Predicate predicate); + /** + * Evaluates the input against the expected string value + * + * @param input the operand to evaluate + * @param predicate The Predicate that evaluates the each value from input + */ + public void evaluateString(Operand input, Predicate predicate) { + evaluateString(input.asOutput(), predicate); + } + + /** + * Evaluates the input against the expected string value + * + * @param input the operand to evaluate + * @param predicate The Predicate that evaluates the each value from input + */ + public abstract void evaluateString(Output input, Predicate predicate); + /** * Evaluates the input against the expected value * From c3fa45754c8fa014423320b775aec4ed8defd384 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:01:49 -0400 Subject: [PATCH 40/55] Change all ctors to require seed param, when seed is used. Refactor LeCun, Glorot, He into one class that handled different types of Distribution. This allows the deletion of the old xxxxxxNormal and xxxxxxUniform companion classes. Changed Constant to handle long, double and boolean values discreetly so that precision is not lost. Fixed message on Identity when the Operands are not floating types. --- .../framework/initializers/Constant.java | 58 +++-- .../framework/initializers/Glorot.java | 86 +++++++ .../framework/initializers/GlorotNormal.java | 66 ------ .../framework/initializers/GlorotUniform.java | 61 ----- .../tensorflow/framework/initializers/He.java | 82 +++++++ .../framework/initializers/HeNormal.java | 58 ----- .../framework/initializers/HeUniform.java | 57 ----- .../framework/initializers/Identity.java | 2 +- .../framework/initializers/Initializers.java | 45 ---- .../framework/initializers/LeCun.java | 81 +++++++ .../framework/initializers/LeCunNormal.java | 62 ------ .../framework/initializers/LeCunUniform.java | 64 ------ .../framework/initializers/Orthogonal.java | 49 ++-- .../framework/initializers/RandomNormal.java | 40 ++-- .../framework/initializers/RandomUniform.java | 38 ++-- .../initializers/TruncatedNormal.java | 31 +-- .../initializers/GlorotUniformTest.java | 93 -------- .../framework/initializers/HeUniformTest.java | 93 -------- .../initializers/InitializersTest.java | 210 ------------------ .../initializers/LeCunNormalTest.java | 94 -------- .../framework/initializers/LeCunTest.java | 104 +++++++++ .../initializers/LeCunUniformTest.java | 72 ------ 22 files changed, 459 insertions(+), 1087 deletions(-) create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java create mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java delete mode 100644 tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java index 868bb12ed46..5465eecca26 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java @@ -36,19 +36,42 @@ */ public class Constant extends BaseInitializer { - private final Number numberValue; - private final Boolean booleanValue; + private final double doubleValue; + private final long longValue; + private final boolean booleanValue; + private final ValueType valueType; + + private enum ValueType { + LONG, DOUBLE, BOOLEAN + } + + + /** + * Creates an Initializer that generates tensors with a constant value. + * + * @param tf the TensorFlow Ops + * @param value a double value + */ + public Constant(Ops tf, long value) { + super(tf); + longValue = value; + doubleValue = 0; + booleanValue = false; + valueType = ValueType.LONG; + } /** * Creates an Initializer that generates tensors with a constant value. * * @param tf the TensorFlow Ops - * @param value a number value + * @param value a double value */ - public Constant(Ops tf, Number value) { + public Constant(Ops tf, double value) { super(tf); - this.numberValue = value; - this.booleanValue = null; + doubleValue = value; + longValue = 0; + booleanValue = false; + valueType = ValueType.DOUBLE; } /** @@ -57,10 +80,12 @@ public Constant(Ops tf, Number value) { * @param tf the TensorFlow Ops * @param value a boolean value */ - public Constant(Ops tf, Boolean value) { + public Constant(Ops tf, boolean value) { super(tf); - this.numberValue = null; - this.booleanValue = value; + booleanValue = value; + doubleValue = 0; + longValue = 0; + valueType = ValueType.BOOLEAN; } /** {@inheritDoc} */ @@ -69,13 +94,14 @@ public Operand call(Operand dims, DataType dtype) { if (!(dtype.isNumeric() || dtype.isBoolean())) { throw new IllegalArgumentException("DataType must be numeric or boolean: " + dtype.name()); } - if (this.numberValue != null) { - return tf.fill(dims, tf.dtypes.cast(tf.constant(numberValue.doubleValue()), dtype)); - } else if (this.booleanValue != null) { - return tf.fill(dims, tf.dtypes.cast(tf.constant(this.booleanValue), dtype)); - } else { // should not happen, but throw here just in case - throw new IllegalArgumentException( - "Value must be either be a Number or Boolean, none supplied."); + switch(valueType) { + case LONG: + return tf.fill(dims, tf.dtypes.cast(tf.constant(longValue), dtype)); + case DOUBLE: + return tf.fill(dims, tf.dtypes.cast(tf.constant(doubleValue), dtype)); + default: + return tf.fill(dims, tf.dtypes.cast(tf.constant(booleanValue), dtype)); } + } } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java new file mode 100644 index 00000000000..175f16a1d0c --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java @@ -0,0 +1,86 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ + +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * The Glorot initializer, also called Xavier initializer. + * + *

    Draws samples from a random distribution. + * + *

    If the distribution is TRUNCATED_NORMAL, then the distribution is centered on 0 with + * stddev = Math.sqrt(2. / (fanIn + fanOut)) where fanIn is the number of input + * units in the weight tensor and fanOut is the number of output units in the weight + * tensor. + * + *

    If the distribution is UNIFORM, then samples are drawn from a uniform distribution within + * [-limit, limit], where limit = sqrt(6 / (fanIn + fanOut)) ( fanIn + * is the number of input units in the weight tensor and fanOut is the number + * of output units). + * + *

    Examples: + * + *

    Glorot Normal: + * + *

    + *     long seed = 1001l;
    + *     Glorot<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.Glorot<>(tf,
    + *             Distribution.TRUNCATED_NORMAL, seed);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + *

    Glorot Uniform: + * + *

    + *    long seed = 1001l;
    + *    Glorot<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.Glorot<>(tf,
    + *             Distribution.UNIFORM, seed);
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * @see VarianceScaling.Distribution + * @see Glorot et al., 2010 + */ +public class Glorot extends VarianceScaling { + + public static final double SCALE = 1.0; + + /** + * Creates a Glorot initializer + * + * @param tf the TensorFlow Ops + * @param distribution The distribution type for the Glorot initializer. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. + * @throws java.lang.IllegalArgumentException if the distribution is not TRUNCATED_NORMAL or + * UNIFORM + * @see VarianceScaling.Distribution + */ + public Glorot(Ops tf, Distribution distribution, Long seed) { + super(tf, SCALE, Mode.FAN_AVG, distribution, seed); + } + + +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java deleted file mode 100644 index 297270c9754..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotNormal.java +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ - -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * The Glorot normal initializer, also called Xavier normal initializer. - * - *

    Draws samples from a truncated normal distribution centered on 0 with - * stddev = Math.sqrt(2. / (fanIn + fanOut)) where fanIn is the number of input - * units in the weight tensor and fanOut is the number of output units in the weight - * tensor. - * - *

    Examples: - * - *

    - *     GlorotNormal<TFloat32, TFloat32> initializer =
    - *             new org.tensorflow.framework.initializers.GlorotNormal<>(tf);
    - *     Operand<TFloat32> values =
    - *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    - * 
    - * - * @param The TType for the call operation - * @param The TNumber for the call operation - * - - */ -public class GlorotNormal extends VarianceScaling { - - public static final double SCALE = 1.0; - /** - * Creates a GlorotNormal initializer - * - * @param tf the TensorFlow Ops - */ - public GlorotNormal(Ops tf) { - super(tf, SCALE, Mode.FAN_AVG, Distribution.TRUNCATED_NORMAL, null); - } - - /** - * Creates a GlorotNormal initializer - * - * @param tf the TensorFlow Ops - * @param seed the seed for random number generation. An initializer created with a given seed - * will always produce the same random tensor for a given shape and dtype. - */ - public GlorotNormal(Ops tf, Long seed) { - super(tf, SCALE, Mode.FAN_AVG, Distribution.TRUNCATED_NORMAL, seed); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java deleted file mode 100644 index 026214e2c73..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/GlorotUniform.java +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * he Glorot uniform initializer, also called Xavier uniform initializer.. - * - *

    Draws samples from a uniform distribution within - * [-limit, limit], where limit = sqrt(6 / (fanIn + fanOut)) - * ( fanIn is the number of input units in the weight tensor and fanOut is the number of output units). - * - *

    Examples: - *

    - *     GlorotUniform<TFloat32, TFloat32> initializer =
    - *             new org.tensorflow.framework.initializers.GlorotUniform<>(tf);
    - *     Operand<TFloat32> values =
    - *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    - * 
    - * - * @param The TType for the call operation - * @param The TNumber for the call operation - * - * @see Glorot et al., 2010 - */ -public class GlorotUniform extends VarianceScaling { - public static final double SCALE = 1.0; - /** - * Creates a GlorotUniform initializer - * - * @param tf the TensorFlow Ops - */ - public GlorotUniform(Ops tf) { - super(tf, SCALE, Mode.FAN_AVG, Distribution.UNIFORM, null); - } - - /** - * Creates a GlorotUniform initializer - * - * @param tf the TensorFlow Ops - * @param seed the seed for random number generation - */ - public GlorotUniform(Ops tf, Long seed) { - super(tf, SCALE, Mode.FAN_AVG, Distribution.UNIFORM, seed); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java new file mode 100644 index 00000000000..f922a625f04 --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java @@ -0,0 +1,82 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * He initializer. + * + *

    If the distribution is TRUNCATED_NORMAL, it draws samples from a truncated normal distribution + * centered on 0 with stddev = sqrt(2 / fanIn) where fanIn is + * the number of input units in the weight tensor. + * + *

    If the distribution is UNIFORM, it draws samples from a uniform distribution within + * [-limit, limit], where limit = sqrt(6 / fanIn) (fanIn is the number of input + * units in the weight tensor). + * + *

    Examples: + * + *

    He Normal: + * + *

    + *     long seed = 1001l;
    + *     He<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.He<>(tf,
    + *             Distribution.TRUNCATED_NORMAL, seed););
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + *

    He Uniform: + * + *

    + *     long seed = 1001l;
    + *     He<TFloat32, TFloat32> initializer =
    + *             new org.tensorflow.framework.initializers.He<>(tf,
    + *             Distribution.UNIFORM, seed););
    + *     Operand<TFloat32> values =
    + *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * @see He + * et al., 2015 + */ +public class He extends VarianceScaling { + + public static final double SCALE = 2.0; + + /** + * Creates an He Initializer + * + * @param tf the TensorFlow Ops + * @param distribution The distribution type for the He initializer. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. + * @throws java.lang.IllegalArgumentException if the distribution is not TRUNCATED_NORMAL or + * UNIFORM + * @see VarianceScaling.Distribution + */ + public He(Ops tf, Distribution distribution, Long seed) { + super(tf, SCALE, Mode.FAN_IN, distribution, seed); + } + + +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java deleted file mode 100644 index 8063166978b..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeNormal.java +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * He normal initializer. - *

    It draws samples from a truncated normal distribution centered on 0 with stddev = sqrt(2 / fan_in) where fan_in is the number of input units in the weight tensor.

    - *

    Examples: - *

    - *     HeNormal<TFloat32, TFloat32> initializer =
    - *             new org.tensorflow.framework.initializers.HeNormal<>(tf);
    - *     Operand<TFloat32> values =
    - *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    - * 
    - * @param The TType for the call operation - * @param The TNumber for the call operation - * - * @see He et al., 2015 - */ -public class HeNormal extends VarianceScaling { - - public static final double SCALE = 2.0; - - /** - * Creates an HeNormal Initializer - * - * @param tf the TensorFlow Ops - */ - public HeNormal(Ops tf) { - super(tf, SCALE, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, null); - } - - /** - * Creates an HeNormal Initializer - * - * @param tf the TensorFlow Ops - * @param seed the seed for random number generation - */ - public HeNormal(Ops tf, Long seed) { - super(tf, SCALE, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, seed); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java deleted file mode 100644 index 38ca4a9230b..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/HeUniform.java +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * He uniform initializer. - *

    Draws samples from a uniform distribution within [-limit, limit], where limit = sqrt(6 / fanIn) (fan_in is the number of input units in the weight tensor).

    - *

    Examples: - *

    - *     HeUniform<TFloat32, TFloat32> initializer =
    - *             new org.tensorflow.framework.initializers.HeUniform<>(tf);
    - *     Operand<TFloat32> values =
    - *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    - * 
    - * @param The TType for the call operation - * @param The TNumber for the call operation - * - * @see He et al., 2015 - */ -public class HeUniform extends VarianceScaling { - - public static final double SCALE = 2.0; - /** - * Creates an HeUniform Initializer - * - * @param tf the TensorFlow Ops - */ - public HeUniform(Ops tf) { - super(tf, SCALE, Mode.FAN_IN, Distribution.UNIFORM, null); - } - - /** - * Creates an HeUniform Initializer - * - * @param tf the TensorFlow Ops - * @param seed the seed for random number generation - */ - public HeUniform(Ops tf, Long seed) { - super(tf, SCALE, Mode.FAN_IN, Distribution.UNIFORM, seed); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java index 9efc5584f7e..34cd75a740c 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java @@ -64,7 +64,7 @@ public Identity(Ops tf, double gain) { @Override public Operand call(Operand dims, DataType dtype) { if (!dtype.isFloating()) { - throw new IllegalArgumentException("DataType must be numeric or boolean: " + dtype.name()); + throw new IllegalArgumentException("DataType must be a float type: " + dtype.name()); } Shape shape = ShapeUtils.toShape(tf.scope(), dims); if (shape.numDimensions() != 2) { diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java deleted file mode 100644 index 771ad7e58b3..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Initializers.java +++ /dev/null @@ -1,45 +0,0 @@ -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; - -import java.util.function.Function; - -/** An Enum Type used to create a new Initializer with default parameters. */ -public enum Initializers { - IDENTITY(Identity::new), - ONES(Ones::new), - ZEROS(Zeros::new), - GLOROT_NORMAL(GlorotNormal::new), - GLOROT_UNIFORM(GlorotUniform::new), - ORTHOGONAL(Orthogonal::new), - RANDOM_NORMAL(RandomNormal::new), - RANDOM_UNIFORM(RandomUniform::new), - TRUNCATED_NORMAL(TruncatedNormal::new), - VARIANCE_SCALING(VarianceScaling::new), - HE_NORMAL(HeNormal::new), - HE_UNIFORM(HeUniform::new), - LECUN_NORMAL(LeCunNormal::new), - LECUN_UNIFORM(LeCunUniform::new); - - private final Function creator; - - /** - * Creates an Optimizers enum - * - * @param creator the lambda function that accepts a Graph argument used to create the default - * Optimizer - */ - Initializers(Function creator) { - this.creator = creator; - } - - /** - * Creates an Initializer with default settings. - * - * @param tf the TensorFlow Ops - * @return the Optimizer - */ - public Initializer createInitializer(Ops tf) { - return creator.apply(tf); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java new file mode 100644 index 00000000000..99c5290f4cd --- /dev/null +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java @@ -0,0 +1,81 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.tensorflow.op.Ops; +import org.tensorflow.types.family.TNumber; +import org.tensorflow.types.family.TType; + +/** + * LeCun normal initializer. + * + *

    Draws samples from a random distribution. * * + * + *

    If the distribution is TRUNCATED_NORMAL, it draws samples from a truncated normal distribution + * centered on 0 with + * stddev = sqrt(1 / fanIn) where fanIn is the number of input units in the + * weight tensor. + * + *

    If the distribution is UNIFORM, itraws samples from a uniform distribution within + * [-limit, limit], where limit = Math.sqrt(3 / fanIn) (fanIn is + * the number of input units in the weight tensor) + * + *

    Examples: + *

    LeCun Normal: + *

    + *      long seed = 1001l;
    + *      LeCunNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.LeCunNormal<>(tf,
    + *               Distribution.TRUNCATED_NORMAL, seed);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + *

    LeCun Uniform: + *

    + *      long seed = 1001l;
    + *      LeCunNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.LeCunNormal<>(tf,
    + *               Distribution.UNIFORM, seed);
    + *      Operand<TFloat32> values =
    + *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    + * 
    + * + * @param The TType for the call operation + * @param The TNumber for the call operation + * @see Self-Normalizing + * Neural Networks, Klambauer et al., 2017 + * @see Efficient Backprop, Lecun et + * al., 1998 + * @see VarianceScaling.Distribution + */ +public class LeCun extends VarianceScaling { + + + + /** + * Creates a LeCunNormal Initializer + * + * @param tf the TensorFlow Ops + * @param distribution The distribution type for the Glorot initializer. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. + */ + public LeCun(Ops tf, Distribution distribution, Long seed) { + super(tf, 1.0, Mode.FAN_IN,distribution, seed); + } + + +} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java deleted file mode 100644 index d991cd0a0e6..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunNormal.java +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * LeCun normal initializer. - * - *

    Draws samples from a truncated normal distribution centered on 0 with - * stddev = sqrt(1 / fanIn) where fanIn is the number of input units in the weight tensor. - * - *

    Examples: - * - *

    - *      LeCunNormal<TFloat32, TFloat32> initializer =
    - *              new org.tensorflow.framework.initializers.LeCunNormal<>(tf);
    - *      Operand<TFloat32> values =
    - *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    - * 
    - * - * @param The TType for the call operation - * @param The TNumber for the call operation - * - * @see Self-Normalizing Neural Networks, Klambauer et al., 2017 - * @see Efficient Backprop, Lecun et al., 1998 - */ -public class LeCunNormal extends VarianceScaling { - - /** - * Creates a LeCunNormal Initializer - * - * @param tf the TensorFlow Ops - */ - public LeCunNormal(Ops tf) { - super(tf, 1.0, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, null); - } - - /** - * Creates a LeCunNormal Initializer - * - * @param tf the TensorFlow Ops - * @param seed the seed for random number generation - */ - public LeCunNormal(Ops tf, Long seed) { - super(tf, 1.0, Mode.FAN_IN, Distribution.TRUNCATED_NORMAL, seed); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java deleted file mode 100644 index c69ba51641a..00000000000 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCunUniform.java +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.tensorflow.op.Ops; -import org.tensorflow.types.family.TNumber; -import org.tensorflow.types.family.TType; - -/** - * LeCun uniform initializer. - * - *

    Draws samples from a uniform distribution within [-limit, limit], - * where limit = Math.sqrt(3 / fanIn) (fanIn is the number of input units in the weight tensor) - * - *

    Examples: - * - *

    - *      LecunUniform<TFloat32, TFloat32> initializer =
    - *              new org.tensorflow.framework.initializers.LecunUniform<>(tf);
    - *      Operand<TFloat32> values =
    - *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
    - * 
    - * - * @param The TType for the call operation - * @param The TNumber for the call operation - * @see Self-Normalizing - * Neural Networks, Klambauer et al., 2017 - * @see Efficient Backprop, Lecun et - * al., 1998 - */ -public class LeCunUniform extends VarianceScaling { - - /** - * Creates the LeCun uniform initializer. - * - * @param tf the TensorFlow Ops - */ - public LeCunUniform(Ops tf) { - super(tf, 1.0, Mode.FAN_IN, Distribution.UNIFORM, null); - } - - /** - * Creates the LeCun uniform initializer. - * - * @param tf the TensorFlow Ops - * @param seed the seed for random number generation - */ - public LeCunUniform(Ops tf, Long seed) { - super(tf, 1.0, Mode.FAN_IN, Distribution.UNIFORM, seed); - } -} diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java index 10464106943..8a6bd771c2e 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java @@ -27,17 +27,17 @@ /** * Initializer that generates an orthogonal matrix. - *

    - * If the shape of the tensor to initialize is two-dimensional, it is initialized with an orthogonal matrix obtained from the QR - * decomposition of a matrix of random numbers drawn from a normal distribution. If the matrix has fewer rows than - * columns then the output will have orthogonal rows. Otherwise, the output will have orthogonal columns. - *

    - *

    - * If the shape of the tensor to initialize is more than two-dimensional, - * a matrix of shape (shape.size(0) * ... * shape.size(n - 2), shape.size(n - 1)) is initialized, - * where n is the length of the shape vector. The matrix is subsequently reshaped - * to give a tensor of the desired shape. - *

    + * + *

    If the shape of the tensor to initialize is two-dimensional, it is initialized with an + * orthogonal matrix obtained from the QR decomposition of a matrix of random numbers drawn from a + * normal distribution. If the matrix has fewer rows than columns then the output will have + * orthogonal rows. Otherwise, the output will have orthogonal columns. + * + *

    If the shape of the tensor to initialize is more than two-dimensional, a matrix of shape + * (shape.size(0) * ... * shape.size(n - 2), shape.size(n - 1)) is initialized, where + * n is the length of the shape vector. The matrix is subsequently reshaped to give a + * tensor of the desired shape. + * *

    Examples: * *

    @@ -61,26 +61,8 @@ public class Orthogonal extends BaseInitiali
        * Creates an Orthogonal Initializer
        *
        * @param tf the TensorFlow Ops
    -   */
    -  public Orthogonal(Ops tf) {
    -    this(tf, GAIN_DEFAULT, null);
    -  }
    -
    -  /**
    -   * Creates an Orthogonal Initializer
    -   *
    -   * @param tf the TensorFlow Ops
    -   * @param gain the gain to be applied to the Matrix
    -   */
    -  public Orthogonal(Ops tf, double gain) {
    -    this(tf, gain, null);
    -  }
    -
    -  /**
    -   * Creates an Orthogonal Initializer
    -   *
    -   * @param tf the TensorFlow Ops
    -   * @param seed the seed for random number generation
    +   * @param seed the seed for random number generation. An initializer created with a given seed
    +   *     will always produce the same random tensor for a given shape and dtype.
        */
       public Orthogonal(Ops tf, Long seed) {
         this(tf, GAIN_DEFAULT, seed);
    @@ -90,8 +72,9 @@ public Orthogonal(Ops tf, Long seed) {
        * Creates an Orthogonal Initializer
        *
        * @param tf the TensorFlow Ops
    -   * @param gain the gain to be applied to the Matrix
    -   * @param seed the seed for random number generation
    +   * @param gain the gain to be applied to the Matrix. Default is 1.0.
    +   * @param seed the seed for random number generation. An initializer created with a given seed
    +   *     will always produce the same random tensor for a given shape and dtype.
        */
       public Orthogonal(Ops tf, double gain, Long seed) {
         super(tf);
    diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java
    index 5eae46c4038..1f3fef3b05c 100644
    --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java
    +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java
    @@ -27,11 +27,13 @@
      * 

    Examples: * *

    - *      RandomNormal<TFloat32, TFloat32> initializer =
    - *              new org.tensorflow.framework.initializers.RandomNormal<>(tf);
    - *      Operand<TFloat32> values =
    + *     long seed = 1001l;
    + *     RandomNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.RandomNormal<>(tf, seed);
    + *     Operand<TFloat32> values =
      *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
      * 
    + * * @param The TType for the call operation * @param The TNumber for the call operation */ @@ -47,39 +49,33 @@ public class RandomNormal extends BaseInitia * creates the RandomUniform initializer * * @param tf the TensorFlow Ops + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ - public RandomNormal(Ops tf) { - this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, null); - } - - /** - * creates the RandomUniform initializer - * - * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. - */ - public RandomNormal(Ops tf, double mean) { - this(tf, mean, STDDEV_DEFAULT, null); + public RandomNormal(Ops tf, Long seed) { + this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, seed); } /** * creates the RandomUniform initializer * * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. - * @param stddev Standard deviation of the random values to generate. + * @param mean Mean of the random values to generate. Default is 0. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ - public RandomNormal(Ops tf, double mean, double stddev) { - this(tf, mean, stddev, null); + public RandomNormal(Ops tf, double mean, Long seed) { + this(tf, mean, STDDEV_DEFAULT, seed); } /** * creates the RandomUniform initializer * * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. - * @param stddev Standard deviation of the random values to generate. - * @param seed Used to create random seeds. + * @param mean Mean of the random values to generate. Default is 0. + * @param stddev Standard deviation of the random values to generate. Default is 1.0. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ public RandomNormal(Ops tf, double mean, double stddev, Long seed) { super(tf); diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java index b52f5e8cb50..133213da088 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java @@ -24,21 +24,23 @@ /** * Initializer that generates tensors with a uniform distribution. + * *

    Examples: * *

    - *      RandomUniform<TFloat32, TFloat32> initializer =
    - *              new org.tensorflow.framework.initializers.RandomUniform<>(tf);
    - *      Operand<TFloat32> values =
    + *     long seed = 1001l;
    + *     RandomUniform<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.RandomUniform<>(tf, seed);
    + *     Operand<TFloat32> values =
      *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
      * 
    * * @param The TType for the call operation * @param The TNumber for the call operation - * */ + */ public class RandomUniform extends BaseInitializer { - public static final double MINVAL_DEFAULT = 0.05; + public static final double MINVAL_DEFAULT = -0.05; public static final double MAXVAL_DEFAULT = 0.05; private final Double minval; @@ -49,29 +51,23 @@ public class RandomUniform extends BaseIniti * Creates a RandomUniform initializer * * @param tf the TensorFlow Ops + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ - public RandomUniform(Ops tf) { - this(tf, MINVAL_DEFAULT, MAXVAL_DEFAULT, null); - } - - /** - * Creates a RandomUniform initializer - * - * @param tf the TensorFlow Ops - * @param minval Lower bound of the range of random values to generate (inclusive). - * @param maxval Upper bound of the range of random values to generate (exclusive). - */ - public RandomUniform(Ops tf, double minval, double maxval) { - this(tf, minval, maxval, null); + public RandomUniform(Ops tf, Long seed) { + this(tf, MINVAL_DEFAULT, MAXVAL_DEFAULT, seed); } /** * Creates a RandomUniform initializer * * @param tf the TensorFlow Ops - * @param minval Lower bound of the range of random values to generate (inclusive). - * @param maxval Upper bound of the range of random values to generate (exclusive). - * @param seed Used to create random seeds. + * @param minval Lower bound of the range of random values to generate (inclusive). Default is + * -0.05. + * @param maxval Upper bound of the range of random values to generate (exclusive). Default is + * 0.05. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ public RandomUniform(Ops tf, double minval, double maxval, Long seed) { super(tf); diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java index 537feb33b19..84def47d691 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java @@ -27,9 +27,10 @@ *

    Examples: * *

    - *      TruncatedNormal<TFloat32, TFloat32> initializer =
    - *              new org.tensorflow.framework.initializers.TruncatedNormal<>(tf);
    - *      Operand<TFloat32> values =
    + *     long seed = 1001l;
    + *     TruncatedNormal<TFloat32, TFloat32> initializer =
    + *              new org.tensorflow.framework.initializers.TruncatedNormal<>(tf, seed);
    + *     Operand<TFloat32> values =
      *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
      * 
    * @@ -49,29 +50,21 @@ public class TruncatedNormal extends BaseIni * Creates a TruncatedNormal Initializer * * @param tf the TensorFlow Ops + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ - public TruncatedNormal(Ops tf) { - this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, null); + public TruncatedNormal(Ops tf, Long seed) { + this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, seed); } /** * Creates a TruncatedNormal Initializer * * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. - * @param stddev Standard deviation of the random values to generate. - */ - public TruncatedNormal(Ops tf, double mean, double stddev) { - this(tf, mean, stddev, null); - } - - /** - * Creates a TruncatedNormal Initializer - * - * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. - * @param stddev Standard deviation of the random values to generate. - * @param seed Used to create random seeds + * @param mean Mean of the random values to generate. Default is 0. + * @param stddev Standard deviation of the random values to generate. Default is 0.05. + * @param seed the seed for random number generation. An initializer created with a given seed + * will always produce the same random tensor for a given shape and dtype. */ public TruncatedNormal(Ops tf, double mean, double stddev, Long seed) { super(tf); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java deleted file mode 100644 index ac6d5219ab9..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotUniformTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; - -/** - * Test cases for GlorotUniform initializer - */ -public class GlorotUniformTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - - int counter; - - public GlorotUniformTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - - /** - * Test of call method, of class GlorotUniform. - */ - @Test - public void testCall_Float() { - float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - GlorotUniform instance - = new GlorotUniform<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = {0.06468193804916589, 0.44170328686673477, - 0.06711059208157763, 0.6278720842445181}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - GlorotUniform instance - = new GlorotUniform<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - -} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java deleted file mode 100644 index fdbd5fba9d6..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeUniformTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; - -/** - * Test the HeUniform initializer - */ -public class HeUniformTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - - int counter; - - public HeUniformTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - - /** - * Test of call method, of class HeUniform. - */ - @Test - public void testCall_Float() { - float[] expected = {1.3104724f, 1.1583493f, 1.5936272f, 0.93282115f}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - HeUniform instance - = new HeUniform<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = {.09147407402970674, 0.6246627788317102, - 0.09490870950065552, 0.8879452169740599}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - HeUniform instance - = new HeUniform<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - -} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java deleted file mode 100644 index 820938023ea..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializersTest.java +++ /dev/null @@ -1,210 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.junit.jupiter.api.*; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.op.Ops; - -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -/** Test the Initializers class */ -public class InitializersTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - public InitializersTest() {} - - @BeforeAll - public static void setUpClass() {} - - @AfterAll - public static void tearDownClass() {} - - @BeforeEach - public void setUp() {} - - @AfterEach - public void tearDown() {} - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_IDENTITY() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.IDENTITY.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof Identity); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_ONES() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.ONES.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof Ones); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_ZEROS() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.ZEROS.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof Zeros); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_GLOROT_NORMAL() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.GLOROT_NORMAL.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof GlorotNormal); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_GLOROT_UNIFORM() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.GLOROT_UNIFORM.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof GlorotUniform); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_ORTHOGONAL() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.ORTHOGONAL.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof Orthogonal); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_RANDOM_NORMAL() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.RANDOM_NORMAL.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof RandomNormal); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_RANDOM_UNIFORM() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.RANDOM_UNIFORM.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof RandomUniform); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_TRUNCATED_NORMAL() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.TRUNCATED_NORMAL.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof TruncatedNormal); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_VARIANCE_SCALING() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.VARIANCE_SCALING.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof VarianceScaling); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_HE_NORMAL() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.HE_NORMAL.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof HeNormal); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_HE_UNIFORM() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.HE_UNIFORM.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof HeUniform); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_LECUN_NORMAL() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.LECUN_NORMAL.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof LeCunNormal); - } - } - - /** Test of get method, of class Initializers. */ - @Test - public void testGet_LECUN_UNIFORM() { - - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Initializer result = Initializers.LECUN_UNIFORM.createInitializer(tf); - assertNotNull(result); - assertTrue(result instanceof LeCunUniform); - } - } -} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java deleted file mode 100644 index ed736c8b83b..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunNormalTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; - -/** - * Test the LeCunNormal initializer - */ -public class LeCunNormalTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - - public LeCunNormalTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - - - - - - /** - * Test of call method, of class LeCunNormal. - */ - @Test - public void testCall_Float() { - float[] expected = {-0.52388954f, -0.29329166f, -0.07872587f, -0.31851602f}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - LeCunNormal instance - = new LeCunNormal<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = {1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - LeCunNormal instance - = new LeCunNormal<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - -} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java new file mode 100644 index 00000000000..953d61995d7 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java @@ -0,0 +1,104 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.initializers.VarianceScaling.Distribution; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** Test the LeCun initializer */ +public class LeCunTest { + + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; + + private static final long SEED = 1000L; + + public LeCunTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class LeCun. */ + @Test + public void testCallNormal_Float() { + float[] expected = {-0.52388954f, -0.29329166f, -0.07872587f, -0.31851602f}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCallNormal_Double() { + double[] expected = { + 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class LeCun. */ + @Test + public void testCallUniform_Float() { + float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCallUniform_Double() { + double[] expected = { + 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java deleted file mode 100644 index 71a79ad143a..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunUniformTest.java +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.junit.jupiter.api.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; - -/** Test the LeCunUniform initializer */ -public class LeCunUniformTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - - public LeCunUniformTest() {} - - @BeforeAll - public static void setUpClass() {} - - @AfterAll - public static void tearDownClass() {} - - @BeforeEach - public void setUp() {} - - @AfterEach - public void tearDown() {} - - /** Test of call method, of class LeCunUniform. */ - @Test - public void testCall_Float() { - float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - LeCunUniform instance = new LeCunUniform<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = { - 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 - }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - LeCunUniform instance = new LeCunUniform<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } -} From ccf7b53136acf931cb7e7e58b4bc780d4b2e3f72 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:02:50 -0400 Subject: [PATCH 41/55] Fix all tests to run in both Eager and Graph Mode. --- .../framework/initializers/ConstantTest.java | 123 ++++---- .../initializers/GlorotNormalTest.java | 74 ----- .../framework/initializers/GlorotTest.java | 105 +++++++ .../framework/initializers/HeNormalTest.java | 93 ------ .../framework/initializers/HeTest.java | 105 +++++++ .../framework/initializers/IdentityTest.java | 57 ++-- .../initializers/InitializerFunctionTest.java | 107 +++---- .../framework/initializers/OnesTest.java | 127 ++++---- .../initializers/OrthogonalTest.java | 55 ++-- .../initializers/RandomNormalTest.java | 120 ++++---- .../initializers/RandomUniformTest.java | 53 ++-- .../initializers/TruncatedNormalTest.java | 119 ++++---- .../initializers/VarianceScalingTest.java | 148 +++++----- .../framework/initializers/ZerosTest.java | 276 ++++++++---------- 14 files changed, 791 insertions(+), 771 deletions(-) delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java create mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java index a816c58a62b..2761457d6a5 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java @@ -27,7 +27,7 @@ /** Test the Constant initializer */ public class ConstantTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public ConstantTest() {} @@ -47,13 +47,14 @@ public void tearDown() {} @Test public void testCallUInt() { Byte[] expected = {0xf, 0xf, 0xf, 0xf}; // init to constant to make sure they all change to zero - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Constant instance = new Constant<>(tf, 0xf); - Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 0xf); + Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Constant. */ @@ -62,13 +63,14 @@ public void testCallInt() { Integer[] expected = { 0xf, 0xf, 0xf, 0xf }; // init to constant to make sure they all change to zero - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Constant instance = new Constant<>(tf, 0xf); - Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 0xf); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Constant. */ @@ -77,70 +79,75 @@ public void testCallLong() { long[] expected = { 0xffL, 0xffL, 0xffL, 0xffL }; // init to constant to make sure they all change to zero - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Constant instance = new Constant<>(tf, 0xffL); - Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 0xffL); + Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Constant. */ @Test public void testCallFloat() { float[] expected = {12.f, 12.f, 12.f, 12.f}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Constant instance = new Constant<>(tf, 12.F); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Constant instance = new Constant<>(tf, 12.F); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Constant. */ @Test public void testCallDouble() { double[] expected = {11., 11., 11., 11.}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Constant instance = new Constant<>(tf, 11.); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Constant instance = new Constant<>(tf, 11.); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Constant. */ @Test public void testCallString() { - assertThrows( - java.lang.IllegalArgumentException.class, - () -> { - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Constant instance = new Constant<>(tf, 22); - instance.call(tf.constant(shape), TString.DTYPE); - fail("IllegalArgumentException should have been thrown for TString"); - } - }); + for (TestSession.Mode tfMode : tfModes) + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Constant instance = new Constant<>(tf, 22); + instance.call(tf.constant(shape), TString.DTYPE); + fail("IllegalArgumentException should have been thrown for TString"); + } + }); } /** Test of call method, of class Constant. */ @Test public void testCallBool() { - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Boolean[] expected = {true, true, true, true}; - - Constant instance = new Constant<>(tf, true); - Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Boolean[] expected = {true, true, true, true}; + + Constant instance = new Constant<>(tf, true); + Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java deleted file mode 100644 index 8dd29f5f016..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotNormalTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.junit.jupiter.api.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; - -/** Test cases for GlorotNormal initializer */ -public class GlorotNormalTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - - public GlorotNormalTest() {} - - @BeforeAll - public static void setUpClass() {} - - @AfterAll - public static void tearDownClass() {} - - @BeforeEach - public void setUp() {} - - @AfterEach - public void tearDown() {} - - /** Test of call method, of class GlorotNormal. */ - @Test - public void testCall_Float() { - float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - GlorotNormal instance = new GlorotNormal<>(tf, SEED); - - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = { - 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 - }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - GlorotNormal instance = new GlorotNormal<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } -} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java new file mode 100644 index 00000000000..1326f9d1af8 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java @@ -0,0 +1,105 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.initializers.VarianceScaling.Distribution; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** Test cases for Glorot initializer */ +public class GlorotTest { + + private static final long SEED = 1000L; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; + + public GlorotTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Glorot. */ + @Test + public void testCallNormal_Float() { + float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Glorot instance = new Glorot<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCallNormal_Double() { + double[] expected = { + 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Glorot instance = new Glorot<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Glorot. */ + @Test + public void testCallUniform_Float() { + float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Glorot instance = new Glorot<>(tf, Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCallUniform_Double() { + double[] expected = { + 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Glorot instance = new Glorot<>(tf, Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java deleted file mode 100644 index 2428578103b..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeNormalTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; - -/** - * Test the HeNormal initializer - */ -public class HeNormalTest { - - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - - int counter; - - public HeNormalTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - - /** - * Test of call method, of class HeNormal. - */ - @Test - public void testCall_Float() { - float[] expected = {-0.7408917F, -0.41477704F, -0.11133519F, -0.45044965F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - HeNormal instance - = new HeNormal<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = {2.117256561466521, -1.7661437620712939, - -0.7650439080001085, 0.6889186518780481}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - HeNormal instance - = new HeNormal<>(tf, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - -} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java new file mode 100644 index 00000000000..d64388c5a02 --- /dev/null +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java @@ -0,0 +1,105 @@ +/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +=======================================================================*/ +package org.tensorflow.framework.initializers; + +import org.junit.jupiter.api.*; +import org.tensorflow.Operand; +import org.tensorflow.framework.initializers.VarianceScaling.Distribution; +import org.tensorflow.framework.utils.TestSession; +import org.tensorflow.ndarray.Shape; +import org.tensorflow.op.Ops; +import org.tensorflow.types.TFloat32; +import org.tensorflow.types.TFloat64; + +/** Test the He initializer */ +public class HeTest { + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; + + private static final long SEED = 1000L; + + int counter; + + public HeTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class He. */ + @Test + public void testCallNormal_Float() { + float[] expected = {-0.7408917F, -0.41477704F, -0.11133519F, -0.45044965F}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCallNormal_Double() { + double[] expected = { + 2.117256561466521, -1.7661437620712939, -0.7650439080001085, 0.6889186518780481 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class He. */ + @Test + public void testCall_Float() { + float[] expected = {1.3104724f, 1.1583493f, 1.5936272f, 0.93282115f}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = { + .09147407402970674, 0.6246627788317102, 0.09490870950065552, 0.8879452169740599 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } +} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java index c8244948347..e868e061183 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java @@ -15,7 +15,6 @@ package org.tensorflow.framework.initializers; import org.junit.jupiter.api.*; -import org.tensorflow.EagerSession; import org.tensorflow.Operand; import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; @@ -30,7 +29,7 @@ /** Test the Identity initializer */ public class IdentityTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public IdentityTest() {} @@ -49,17 +48,18 @@ public void tearDown() {} /** Test of call method, of class Orthogonal. */ @Test public void testCall_Int() { - assertThrows( - java.lang.IllegalArgumentException.class, - () -> { - try (EagerSession session = EagerSession.create()) { - Ops tf = Ops.create(session); - Shape shape = Shape.of(10, 10); - Identity instance = new Identity<>(tf, 2.); - instance.call(tf.constant(shape), TInt32.DTYPE); - fail("Should have thrown IllegalArgumentException on Integer type"); - } - }); + for (TestSession.Mode tfMode : tfModes) + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Identity instance = new Identity<>(tf, 2.); + instance.call(tf.constant(shape), TInt32.DTYPE); + fail("Should have thrown IllegalArgumentException on Integer type"); + } + }); } /** Test of call method, of class Constant. */ @@ -77,18 +77,20 @@ public void testCallFloat() { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(10, 10); - Identity instance = new Identity<>(tf, 2.); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Identity instance = new Identity<>(tf, 2.); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Constant. */ @Test public void testCallDouble() { + double[] expected = { 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, @@ -101,12 +103,13 @@ public void testCallDouble() { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0 }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(10, 10); - Identity instance = new Identity<>(tf, 2.); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Identity instance = new Identity<>(tf, 2.); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java index 0e39243a019..b00d94a6925 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java @@ -24,7 +24,7 @@ /** Test the InitializerFunction initializer */ public class InitializerFunctionTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public InitializerFunctionTest() {} @@ -44,79 +44,84 @@ public void tearDown() {} @Test public void testLambdaCallFloat() { float[] expected = {12345.0f}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new float[] {12345.0f}), dtype); - Operand operand = func.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new float[] {12345.0f}), dtype); + Operand operand = func.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Initializer using Lambda. */ @Test public void testLambdaCallUInt8() { byte[] expected = {0x15}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new byte[] {0x15}), dtype); - Operand operand = func.call(tf.constant(shape), TUint8.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new byte[] {0x15}), dtype); + Operand operand = func.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Initializer using Lambda. */ @Test public void testLambdaCallInt() { int[] expected = {12345}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new int[] {12345}), dtype); - Operand operand = func.call(tf.constant(shape), TInt32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new int[] {12345}), dtype); + Operand operand = func.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Initializer using Lambda. */ @Test public void testLambdaCallLong() { long[] expected = {12345L}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new long[] {12345L}), dtype); - Operand operand = func.call(tf.constant(shape), TInt64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new long[] {12345L}), dtype); + Operand operand = func.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Initializer using Lambda. */ @Test public void testLambdaCallDouble() { double[] expected = {Math.PI}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new double[] {Math.PI}), dtype); - Operand operand = func.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(1); + + // Test float + Initializer func = + (dims, dtype) -> tf.dtypes.cast(tf.constant(new double[] {Math.PI}), dtype); + Operand operand = func.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java index cf40f6e6ef4..f624bed55ac 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java @@ -27,7 +27,7 @@ /** Test the Ones initializer */ public class OnesTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public OnesTest() {} @@ -46,96 +46,103 @@ public void tearDown() {} /** Test of call method, of class Ones. */ @Test public void testCallUInt() { - Byte[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changet to zero - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); - session.evaluate(expected, operand); - } + Byte[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changed to zero + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Ones. */ @Test public void testCallInt() { - int[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changet to zero - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); - session.evaluate(expected, operand); - } + int[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changed to zero + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Ones. */ @Test public void testCallLong() { - long[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changet to zero - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); - session.evaluate(expected, operand); - } + long[] expected = {1, 1, 1, 1}; // init to ones to make sure they all changed to zero + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Ones. */ @Test public void testCallFloat() { float[] expected = {1.f, 1.f, 1.f, 1.f}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Ones. */ @Test public void testCallDouble() { double[] expected = {1., 1., 1., 1.}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Ones. */ @Test public void testCallString() { - assertThrows( - java.lang.IllegalArgumentException.class, - () -> { - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TString.DTYPE); - fail("IllegalArgumentException should have been thrown for TString"); - } - }); + for (TestSession.Mode tfMode : tfModes) + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + instance.call(tf.constant(shape), TString.DTYPE); + fail("IllegalArgumentException should have been thrown for TString"); + } + }); } @Test public void testCallBool() { Boolean[] expected = {true, true, true, true}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Ones instance = new Ones<>(tf); - Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java index 0d034c2d4b0..4198504da9c 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java @@ -29,7 +29,7 @@ /** Test the Orthogonal initializer */ public class OrthogonalTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; private static final long SEED = 1000L; private static final double GAIN_VALUE = 1.0; @@ -51,17 +51,18 @@ public void tearDown() {} /** Test of call method, of class Orthogonal. */ @Test public void testCall_Int() { - assertThrows( - java.lang.IllegalArgumentException.class, - () -> { - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(10, 10); - Orthogonal instance = new Orthogonal(tf, GAIN_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); - fail("Should jave thrown IllegalArgumentException on Integer type"); - } - }); + for (TestSession.Mode tfMode : tfModes) + assertThrows( + java.lang.IllegalArgumentException.class, + () -> { + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Orthogonal instance = new Orthogonal<>(tf, GAIN_VALUE, SEED); + instance.call(tf.constant(shape), TInt32.DTYPE); + fail("Should have thrown IllegalArgumentException on Integer type"); + } + }); } /** Test of call method, of class Orthogonal. */ @@ -169,13 +170,14 @@ public void testCall_Float() { -0.00656797f, -0.12504758f }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(10, 10); - Orthogonal instance = new Orthogonal(tf, GAIN_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Orthogonal instance = new Orthogonal<>(tf, GAIN_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class Orthogonal. */ @@ -283,12 +285,13 @@ public void testCall_Double() { 0.028705024822326536, -0.27774030642345227 }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(10, 10); - Orthogonal instance = new Orthogonal(tf, GAIN_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(10, 10); + Orthogonal instance = new Orthogonal<>(tf, GAIN_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java index 05a7baf8c59..c57a48992ad 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java @@ -14,14 +14,7 @@ =======================================================================*/ package org.tensorflow.framework.initializers; -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.Operand; import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; @@ -29,66 +22,57 @@ import org.tensorflow.types.TFloat32; import org.tensorflow.types.TFloat64; -/** - * Test the RandomNormal initializer - */ +/** Test the RandomNormal initializer */ public class RandomNormalTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - private static final double MEAN_VALUE = 0.0; - private static final double STDDEV_VALUE = 3.0; - - public RandomNormalTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - - - /** - * Test of call method, of class RandomNormal. - */ - @Test - public void testCall_Float() { - float[] expected = {-1.955122f, -1.0945456f, -0.29379985f, -1.1886811f}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - RandomNormal instance - = new RandomNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = {5.58717960737721, -4.6606361225803825, - -0.5743065932046001, -7.207274031929497}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - RandomNormal instance - = new RandomNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; + + private static final long SEED = 1000L; + private static final double MEAN_VALUE = 0.0; + private static final double STDDEV_VALUE = 3.0; + + public RandomNormalTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class RandomNormal. */ + @Test + public void testCall_Float() { + float[] expected = {-1.955122f, -1.0945456f, -0.29379985f, -1.1886811f}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomNormal instance = + new RandomNormal<>(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = { + 5.58717960737721, -4.6606361225803825, -0.5743065932046001, -7.207274031929497 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomNormal instance = + new RandomNormal<>(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java index 8c4e85a76f5..66273879b9c 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java @@ -26,7 +26,7 @@ /** Test the RandomUniform initializer */ public class RandomUniformTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; private static final long SEED = 1000L; private static final double MIN_VALUE = 0.0; @@ -50,28 +50,30 @@ public void tearDown() {} @Test public void testCall_Int() { int[] expected = {6, 1, 4, 1}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - RandomUniform instance = - new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class RandomUniform. */ @Test public void testCall_Float() { float[] expected = {7.5660157f, 6.6877327f, 9.200811f, 5.385646F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - RandomUniform instance = - new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } @Test @@ -79,13 +81,14 @@ public void testCall_Double() { double[] expected = { 0.5281258126492294, 3.6064922351122752, 0.5479556897864346, 5.126554100456142 }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - RandomUniform instance = - new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java index 60eca46f6d6..76ee5059a70 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java @@ -14,14 +14,7 @@ =======================================================================*/ package org.tensorflow.framework.initializers; -import java.util.HashMap; -import java.util.Map; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.Operand; import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; @@ -29,65 +22,57 @@ import org.tensorflow.types.TFloat32; import org.tensorflow.types.TFloat64; -/** - * Test the TruncatedNormal initializer - */ +/** Test the TruncatedNormal initializer */ public class TruncatedNormalTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - private static final long SEED = 1000L; - private static final double MEAN_VALUE = 0.0; - private static final double STDDEV_VALUE = 3.0; - - public TruncatedNormalTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - - /** - * Test of call method, of class TruncatedNormal. - */ - @Test - public void testCall_Float() { - float[] expected = {-1.955122F, -1.0945456F, -0.29379985F, -1.1886811F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - TruncatedNormal instance - = new TruncatedNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - @Test - public void testCall_Double() { - double[] expected = {5.58717960737721, -4.6606361225803825, - -2.0188567598844402, 1.8179715736711362}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - TruncatedNormal instance - = new TruncatedNormal(tf, MEAN_VALUE, STDDEV_VALUE, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; + + private static final long SEED = 1000L; + private static final double MEAN_VALUE = 0.0; + private static final double STDDEV_VALUE = 3.0; + + public TruncatedNormalTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class TruncatedNormal. */ + @Test + public void testCall_Float() { + float[] expected = {-1.955122F, -1.0945456F, -0.29379985F, -1.1886811F}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + TruncatedNormal instance = + new TruncatedNormal<>(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + @Test + public void testCall_Double() { + double[] expected = { + 5.58717960737721, -4.6606361225803825, -2.0188567598844402, 1.8179715736711362 + }; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + TruncatedNormal instance = + new TruncatedNormal<>(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java index 23402b63dd1..71542e65c95 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -25,7 +25,7 @@ /** Test the VarianceScaling initializer */ public class VarianceScalingTest { - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; private static final long SEED = 1000L; @@ -47,19 +47,20 @@ public void tearDown() {} @Test public void testCall_Float_1_FAN_IN_TRUNCATED_NORMAL() { float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - VarianceScaling instance = - new VarianceScaling<>( - tf, - 1.0, - VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.TRUNCATED_NORMAL, - SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.TRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } @Test @@ -67,38 +68,40 @@ public void testCall_Double_1_FAN_IN_TRUNCATED_NORMAL() { double[] expected = { 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - VarianceScaling instance = - new VarianceScaling<>( - tf, - 1.0, - VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.TRUNCATED_NORMAL, - SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.TRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class VarianceScaling. */ @Test public void testCall_Float_1_FAN_IN_UNTRUNCATED_NORMAL() { float[] expected = {-0.46082667F, -0.25798687F, -0.06924929F, -0.28017485F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - VarianceScaling instance = - new VarianceScaling<>( - tf, - 1.0, - VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.UNTRUNCATED_NORMAL, - SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } @Test @@ -106,34 +109,36 @@ public void testCall_Double_1_FAN_IN_UNTRUNCATED_NORMAL() { double[] expected = { 1.3169108626945392, -1.0985224689731887, -0.13536536217837225, -1.698770780615686 }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - VarianceScaling instance = - new VarianceScaling<>( - tf, - 1.0, - VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.UNTRUNCATED_NORMAL, - SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } /** Test of call method, of class VarianceScaling. */ @Test public void testCall_Float_1_FAN_IN_UNIFORM() { float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - VarianceScaling instance = - new VarianceScaling<>( - tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } } @Test @@ -141,14 +146,15 @@ public void testCall_Double_1_FAN_IN_UNIFORM() { double[] expected = { 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 }; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - VarianceScaling instance = - new VarianceScaling<>( - tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + VarianceScaling instance = + new VarianceScaling<>( + tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java index 5f6fcd0a4dd..3b6dedb8e1d 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java @@ -14,161 +14,135 @@ =======================================================================*/ package org.tensorflow.framework.initializers; -import java.util.concurrent.atomic.AtomicInteger; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; -import static org.junit.jupiter.api.Assertions.*; +import org.junit.jupiter.api.*; import org.tensorflow.Operand; import org.tensorflow.framework.utils.TestSession; import org.tensorflow.ndarray.Shape; import org.tensorflow.op.Ops; -import org.tensorflow.types.TBool; -import org.tensorflow.types.TFloat32; -import org.tensorflow.types.TFloat64; -import org.tensorflow.types.TInt32; -import org.tensorflow.types.TInt64; -import org.tensorflow.types.TString; -import org.tensorflow.types.TUint8; - -/** - * Test the Zeros initializer - */ -public class ZerosTest { +import org.tensorflow.types.*; + +import java.util.concurrent.atomic.AtomicInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; - private final TestSession.Mode tfMode = TestSession.Mode.EAGER; - - public ZerosTest() { - } - - @BeforeAll - public static void setUpClass() { - } - - @AfterAll - public static void tearDownClass() { - } - - @BeforeEach - public void setUp() { - } - - @AfterEach - public void tearDown() { - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallUInt() { - byte[] expected = {0, 0, 0, 0}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); - session.evaluate(expected, operand); - } - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallInt() { - int[] expected = {0, 0, 0, 0}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); - session.evaluate(expected, operand); - } - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallLong() { - long[] expected = {0, 0, 0, 0}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); - session.evaluate(expected, operand); - } - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallFloat() { - float[] expected = {0.F, 0.F, 0.F, 0.F}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallDouble() { - double[] expected = {0., 0., 0., 0.}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallString() { - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TString.DTYPE); - AtomicInteger counter = new AtomicInteger(); - operand.asTensor().data().scalars().forEach(s -> { - counter.getAndIncrement(); - assertTrue(s.getObject().isEmpty()); - }); - assertEquals(counter.get(), 2 * 2); - } - } - - /** - * Test of call method, of class Zeros. - */ - @Test - public void testCallBool() { - Boolean[] expected = {false, false, false, false}; - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(2, 2); - - Zeros instance = new Zeros<>(tf); - Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); - session.evaluate(expected, operand); - } - } +/** Test the Zeros initializer */ +public class ZerosTest { + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; + + public ZerosTest() {} + + @BeforeAll + public static void setUpClass() {} + + @AfterAll + public static void tearDownClass() {} + + @BeforeEach + public void setUp() {} + + @AfterEach + public void tearDown() {} + + /** Test of call method, of class Zeros. */ + @Test + public void testCallUInt() { + byte[] expected = {0, 0, 0, 0}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TUint8.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Zeros. */ + @Test + public void testCallInt() { + int[] expected = {0, 0, 0, 0}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Zeros. */ + @Test + public void testCallLong() { + long[] expected = {0, 0, 0, 0}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TInt64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Zeros. */ + @Test + public void testCallFloat() { + float[] expected = {0.F, 0.F, 0.F, 0.F}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Zeros. */ + @Test + public void testCallDouble() { + double[] expected = {0., 0., 0., 0.}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(expected, operand); + } + } + + /** Test of call method, of class Zeros. */ + @Test + public void testCallString() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TString.DTYPE); + session.evaluateString(operand, s-> s.isEmpty()); + + } + } + + /** Test of call method, of class Zeros. */ + @Test + public void testCallBool() { + Boolean[] expected = {false, false, false, false}; + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand = instance.call(tf.constant(shape), TBool.DTYPE); + session.evaluate(expected, operand); + } + } } From a8e44070db37fd27ed24b5184f2e5e7bc19d1734 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:03:41 -0400 Subject: [PATCH 42/55] Fix formatting --- .../org/tensorflow/framework/initializers/ZerosTest.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java index 3b6dedb8e1d..27468b15ca9 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java @@ -21,11 +21,6 @@ import org.tensorflow.op.Ops; import org.tensorflow.types.*; -import java.util.concurrent.atomic.AtomicInteger; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - /** Test the Zeros initializer */ public class ZerosTest { @@ -126,8 +121,7 @@ public void testCallString() { Zeros instance = new Zeros<>(tf); Operand operand = instance.call(tf.constant(shape), TString.DTYPE); - session.evaluateString(operand, s-> s.isEmpty()); - + session.evaluateString(operand, String::isEmpty); } } From f5d1216e9c6909aaf7c3b7893475bc1455ec7091 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:05:13 -0400 Subject: [PATCH 43/55] Fix formatting --- .../java/org/tensorflow/framework/initializers/HeTest.java | 4 +--- .../java/org/tensorflow/framework/initializers/LeCunTest.java | 3 +-- .../org/tensorflow/framework/initializers/OrthogonalTest.java | 3 +-- .../tensorflow/framework/initializers/RandomNormalTest.java | 3 +-- .../tensorflow/framework/initializers/RandomUniformTest.java | 3 +-- .../framework/initializers/TruncatedNormalTest.java | 3 +-- .../framework/initializers/VarianceScalingTest.java | 3 +-- 7 files changed, 7 insertions(+), 15 deletions(-) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java index d64388c5a02..286e14fd0a6 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java @@ -25,10 +25,8 @@ /** Test the He initializer */ public class HeTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; - + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; int counter; public HeTest() {} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java index 953d61995d7..6210f865eaa 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java @@ -26,9 +26,8 @@ /** Test the LeCun initializer */ public class LeCunTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public LeCunTest() {} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java index 4198504da9c..46ee3e404d0 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java @@ -29,10 +29,9 @@ /** Test the Orthogonal initializer */ public class OrthogonalTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; private static final double GAIN_VALUE = 1.0; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public OrthogonalTest() {} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java index c57a48992ad..cf7203ada19 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java @@ -25,11 +25,10 @@ /** Test the RandomNormal initializer */ public class RandomNormalTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; private static final double MEAN_VALUE = 0.0; private static final double STDDEV_VALUE = 3.0; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public RandomNormalTest() {} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java index 66273879b9c..63ab18111e8 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java @@ -26,11 +26,10 @@ /** Test the RandomUniform initializer */ public class RandomUniformTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; private static final double MIN_VALUE = 0.0; private static final double MAX_VALUE = 10.0; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public RandomUniformTest() {} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java index 76ee5059a70..ff799c81d1d 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java @@ -25,11 +25,10 @@ /** Test the TruncatedNormal initializer */ public class TruncatedNormalTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; private static final double MEAN_VALUE = 0.0; private static final double STDDEV_VALUE = 3.0; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public TruncatedNormalTest() {} diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java index 71542e65c95..e3c20ef6d96 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -25,9 +25,8 @@ /** Test the VarianceScaling initializer */ public class VarianceScalingTest { - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - private static final long SEED = 1000L; + private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; public VarianceScalingTest() {} From d8348277aef3225e8eff1ecefd9a976dcc117c89 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:05:56 -0400 Subject: [PATCH 44/55] Fix formatting --- .../framework/utils/EagerTestSession.java | 25 ++++++++-------- .../framework/utils/GraphTestSession.java | 30 +++++++++---------- .../framework/utils/TestSession.java | 14 ++++----- 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java index fa679a83297..ac88402efde 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/EagerTestSession.java @@ -290,30 +290,29 @@ public void evaluate(FloatNdArray expected, Output input) { /** {@inheritDoc} */ @Override - public void evaluateString(Output input, Predicate predicate) { + public void evaluateString(Output input, Predicate predicate) { AtomicInteger index = new AtomicInteger(); boolean isScalar = input.shape().equals(Shape.scalar()); - if(debug) { + if (debug) { if (isScalar) { System.out.printf( - "0). %b <==> %s\n", predicate.test(input.data().getObject()), input.data().getObject()); + "0). %b <==> %s\n", predicate.test(input.data().getObject()), input.data().getObject()); } else { - input.data() - .scalars() - .forEachIndexed( - (idx, s) -> - System.out.printf( - "%d). %b <==> %s\n", - index.getAndIncrement(), predicate.test(s.getObject()), s.getObject())); + input + .data() + .scalars() + .forEachIndexed( + (idx, s) -> + System.out.printf( + "%d). %b <==> %s\n", + index.getAndIncrement(), predicate.test(s.getObject()), s.getObject())); } } index.set(0); if (isScalar) { assertTrue(predicate.test(input.data().getObject())); } else { - input.data() - .scalars() - .forEachIndexed((idx, s) -> assertTrue(predicate.test(s.getObject()))); + input.data().scalars().forEachIndexed((idx, s) -> assertTrue(predicate.test(s.getObject()))); } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java index f5ab800f160..f575137cae1 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/GraphTestSession.java @@ -772,38 +772,38 @@ public void evaluate(Output expected, Output input) { /** {@inheritDoc} */ @Override - public void evaluateString(Output input, Predicate predicate) { + public void evaluateString(Output input, Predicate predicate) { boolean isScalar = input.shape().equals(Shape.scalar()); AtomicInteger index = new AtomicInteger(); if (debug) { try (Tensor result = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { if (isScalar) { System.out.printf( - "0). %b <==> %s\n", - predicate.test(result.data().getObject()), result.data().getObject()); + "0). %b <==> %s\n", + predicate.test(result.data().getObject()), result.data().getObject()); } else { result - .data() - .scalars() - .forEachIndexed( - (idx, f) -> - System.out.printf( - "%d). %b <==> %s\n", - index.getAndIncrement(), predicate.test(f.getObject()), f.getObject())); + .data() + .scalars() + .forEachIndexed( + (idx, f) -> + System.out.printf( + "%d). %b <==> %s\n", + index.getAndIncrement(), predicate.test(f.getObject()), f.getObject())); } } } index.set(0); try (Tensor result = - this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { + this.getGraphSession().runner().fetch(input).run().get(0).expect(TString.DTYPE)) { if (isScalar) { assertTrue(predicate.test(result.data().getObject())); } else { result - .data() - .scalars() - .forEachIndexed((idx, s) -> assertTrue(predicate.test(s.getObject()))); + .data() + .scalars() + .forEachIndexed((idx, s) -> assertTrue(predicate.test(s.getObject()))); } } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java index 7face2123f8..3fccd0f0506 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/utils/TestSession.java @@ -37,12 +37,6 @@ public abstract class TestSession implements AutoCloseable { protected float epsilon = 1e-5F; protected boolean debug; - /** The Test Session mode, either Eager or Graph */ - public enum Mode { - EAGER, - GRAPH - } - /** * Creates an Eager Test Session * @@ -485,7 +479,7 @@ public void evaluateString(Operand input, Predicate predicate) * @param input the operand to evaluate * @param predicate The Predicate that evaluates the each value from input */ - public abstract void evaluateString(Output input, Predicate predicate); + public abstract void evaluateString(Output input, Predicate predicate); /** * Evaluates the input against the expected value @@ -642,4 +636,10 @@ public boolean isDebug() { public void setDebug(boolean debug) { this.debug = debug; } + + /** The Test Session mode, either Eager or Graph */ + public enum Mode { + EAGER, + GRAPH + } } From 6fccd593e9f087ad220f223f609974acc81b3389 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:07:15 -0400 Subject: [PATCH 45/55] Fix formatting --- .../tensorflow/framework/initializers/Constant.java | 12 ++++++------ .../tensorflow/framework/initializers/Glorot.java | 2 -- .../org/tensorflow/framework/initializers/He.java | 2 -- .../tensorflow/framework/initializers/Identity.java | 8 ++++++-- .../org/tensorflow/framework/initializers/LeCun.java | 10 +++++----- .../org/tensorflow/framework/initializers/Ones.java | 1 + .../framework/initializers/VarianceScaling.java | 4 ++-- .../org/tensorflow/framework/initializers/Zeros.java | 1 + 8 files changed, 21 insertions(+), 19 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java index 5465eecca26..a008fef33fe 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java @@ -41,11 +41,6 @@ public class Constant extends BaseInitializer { private final boolean booleanValue; private final ValueType valueType; - private enum ValueType { - LONG, DOUBLE, BOOLEAN - } - - /** * Creates an Initializer that generates tensors with a constant value. * @@ -94,7 +89,7 @@ public Operand call(Operand dims, DataType dtype) { if (!(dtype.isNumeric() || dtype.isBoolean())) { throw new IllegalArgumentException("DataType must be numeric or boolean: " + dtype.name()); } - switch(valueType) { + switch (valueType) { case LONG: return tf.fill(dims, tf.dtypes.cast(tf.constant(longValue), dtype)); case DOUBLE: @@ -102,6 +97,11 @@ public Operand call(Operand dims, DataType dtype) { default: return tf.fill(dims, tf.dtypes.cast(tf.constant(booleanValue), dtype)); } + } + private enum ValueType { + LONG, + DOUBLE, + BOOLEAN } } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java index 175f16a1d0c..b9c562736b3 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java @@ -81,6 +81,4 @@ public class Glorot extends VarianceScaling< public Glorot(Ops tf, Distribution distribution, Long seed) { super(tf, SCALE, Mode.FAN_AVG, distribution, seed); } - - } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java index f922a625f04..0fdc656f06b 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java @@ -77,6 +77,4 @@ public class He extends VarianceScalingOnly usable for generating 2D matrices.

    -

    Examples: + * + *

    Only usable for generating 2D matrices. + * + *

    Examples: + * *

      *     Identity<TFloat32> initializer =
      *             new org.tensorflow.framework.initializers.Identity<>(tf);
      *     Operand<TFloat32> values =
      *             initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
      * 
    + * * @param The TType for the call operation */ public class Identity extends BaseInitializer { diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java index 99c5290f4cd..90122c6529a 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java @@ -33,7 +33,9 @@ * the number of input units in the weight tensor) * *

    Examples: + * *

    LeCun Normal: + * *

      *      long seed = 1001l;
      *      LeCunNormal<TFloat32, TFloat32> initializer =
    @@ -42,7 +44,9 @@
      *      Operand<TFloat32> values =
      *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
      * 
    + * *

    LeCun Uniform: + * *

      *      long seed = 1001l;
      *      LeCunNormal<TFloat32, TFloat32> initializer =
    @@ -63,8 +67,6 @@
      */
     public class LeCun extends VarianceScaling {
     
    -
    -
       /**
        * Creates a LeCunNormal Initializer
        *
    @@ -74,8 +76,6 @@ public class LeCun extends VarianceScaling extends BaseInitializer {
        *      Operand<TFloat32> values =
        *              initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE);
        * 
    + * * @param tf the TensorFlow Ops */ public Ones(Ops tf) { diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java index 9145f716248..0e4a935d5eb 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java @@ -188,14 +188,14 @@ private double[] computeFans(Shape shape) { } /** The mode to use for calculating the fan values. */ - public static enum Mode { + public enum Mode { FAN_IN, FAN_OUT, FAN_AVG } /** The random distribution to use when initializing the values. */ - public static enum Distribution { + public enum Distribution { TRUNCATED_NORMAL, UNTRUNCATED_NORMAL, UNIFORM diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java index 31a2c62f3ff..09dd512ffaa 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Zeros.java @@ -31,6 +31,7 @@ * Operand<TFloat32> values = * initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE); *
    + * * @param The TType for the call operation */ public class Zeros extends BaseInitializer { From 43f3fb76bd0eb2d9b8aaf2ac6731d10a9f17c0b4 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Tue, 22 Sep 2020 17:42:25 -0400 Subject: [PATCH 46/55] Added Reproducible tests to make sure that for each initilaizer instance produces the same result when called more than once. --- .../framework/initializers/ConstantTest.java | 14 ++++ .../framework/initializers/GlorotTest.java | 40 +++++++++++ .../framework/initializers/HeTest.java | 39 ++++++++++ .../framework/initializers/IdentityTest.java | 14 ++++ .../framework/initializers/LeCunTest.java | 39 ++++++++++ .../framework/initializers/OnesTest.java | 14 ++++ .../initializers/OrthogonalTest.java | 14 ++++ .../initializers/RandomNormalTest.java | 15 ++++ .../initializers/RandomUniformTest.java | 15 ++++ .../initializers/TruncatedNormalTest.java | 15 ++++ .../initializers/VarianceScalingTest.java | 72 +++++++++++++++++++ .../framework/initializers/ZerosTest.java | 14 ++++ 12 files changed, 305 insertions(+) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java index 2761457d6a5..46e4232d5ae 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ConstantTest.java @@ -150,4 +150,18 @@ public void testCallBool() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Constant instance = new Constant<>(tf, 11.); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java index 1326f9d1af8..7d4f2bf8d20 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java @@ -102,4 +102,44 @@ public void testCallUniform_Double() { session.evaluate(expected, operand); } } + + @Test + public void testCallNormalReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Glorot instance = new Glorot<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testCallUniformReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Glorot instance = new Glorot<>(tf, Distribution.UNIFORM, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testCallUNTRUNCATED_NORMALReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + Glorot instance = + new Glorot<>(tf, Distribution.UNTRUNCATED_NORMAL, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java index 286e14fd0a6..6509a8063ff 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java @@ -100,4 +100,43 @@ public void testCall_Double() { session.evaluate(expected, operand); } } + + @Test + public void testCallNormalReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testCallUniformReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.UNIFORM, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testCallUNTRUNCATED_NORMALReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + He instance = new He<>(tf, Distribution.UNTRUNCATED_NORMAL, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java index e868e061183..a15f1a530d4 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java @@ -112,4 +112,18 @@ public void testCallDouble() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Identity instance = new Identity<>(tf, 2.); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java index 6210f865eaa..bf69b36f437 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java @@ -100,4 +100,43 @@ public void testCallUniform_Double() { session.evaluate(expected, operand); } } + + @Test + public void testCallNormalReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.TRUNCATED_NORMAL, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testCallUniformReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.UNIFORM, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testCallUNTRUNCATED_NORMALReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + LeCun instance = new LeCun<>(tf, Distribution.UNTRUNCATED_NORMAL, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java index f624bed55ac..bbd2ba3d384 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OnesTest.java @@ -145,4 +145,18 @@ public void testCallBool() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Ones instance = new Ones<>(tf); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java index 46ee3e404d0..42570f3ba74 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java @@ -293,4 +293,18 @@ public void testCall_Double() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Orthogonal instance = new Orthogonal<>(tf, GAIN_VALUE, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java index cf7203ada19..249f67ee57d 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java @@ -74,4 +74,19 @@ public void testCall_Double() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + RandomNormal instance = + new RandomNormal<>(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java index 63ab18111e8..c01e773bd47 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java @@ -90,4 +90,19 @@ public void testCall_Double() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + RandomUniform instance = + new RandomUniform<>(tf, MIN_VALUE, MAX_VALUE, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java index ff799c81d1d..4119d64fee8 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java @@ -74,4 +74,19 @@ public void testCall_Double() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + TruncatedNormal instance = + new TruncatedNormal<>(tf, MEAN_VALUE, STDDEV_VALUE, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java index e3c20ef6d96..a4cf85502e8 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -156,4 +156,76 @@ public void testCall_Double_1_FAN_IN_UNIFORM() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible1() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + VarianceScaling instance = + new VarianceScaling<>( + tf, 1.0, VarianceScaling.Mode.FAN_IN, VarianceScaling.Distribution.UNIFORM, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testReproducible2() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_IN, + VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testReproducible3() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + VarianceScaling instance = + new VarianceScaling<>( + tf, + 1.0, + VarianceScaling.Mode.FAN_OUT, + VarianceScaling.Distribution.TRUNCATED_NORMAL, + SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } + + @Test + public void testReproducible4() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + VarianceScaling instance = + new VarianceScaling<>( + tf, 1.0, VarianceScaling.Mode.FAN_AVG, VarianceScaling.Distribution.UNIFORM, SEED); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java index 27468b15ca9..975678add19 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/ZerosTest.java @@ -139,4 +139,18 @@ public void testCallBool() { session.evaluate(expected, operand); } } + + @Test + public void testReproducible() { + for (TestSession.Mode tfMode : tfModes) + try (TestSession session = TestSession.createTestSession(tfMode)) { + Ops tf = session.getTF(); + Shape shape = Shape.of(2, 2); + + Zeros instance = new Zeros<>(tf); + Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); + Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); + session.evaluate(operand1, operand2); + } + } } From dcf82a75458ea38b0cfd2b256b88167e0c771198 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Fri, 25 Sep 2020 16:52:55 -0400 Subject: [PATCH 47/55] Fixed JavaDoc and default value references Disabled lambda by removing @FunctionalInterface from Initializer, removed InitializerFunctionTest.java. Changed UNTRUNCATED_NORMAL to NORMAL. --- .../framework/initializers/Constant.java | 6 +- .../framework/initializers/Glorot.java | 7 + .../tensorflow/framework/initializers/He.java | 7 + .../framework/initializers/Initializer.java | 3 +- .../framework/initializers/LeCun.java | 12 ++ .../framework/initializers/Orthogonal.java | 4 +- .../framework/initializers/RandomNormal.java | 11 +- .../framework/initializers/RandomUniform.java | 9 +- .../initializers/TruncatedNormal.java | 9 +- .../initializers/VarianceScaling.java | 7 +- .../initializers/InitializerFunctionTest.java | 127 ------------------ 11 files changed, 50 insertions(+), 152 deletions(-) delete mode 100644 tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java index a008fef33fe..b4544de9bd0 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Constant.java @@ -45,7 +45,7 @@ public class Constant extends BaseInitializer { * Creates an Initializer that generates tensors with a constant value. * * @param tf the TensorFlow Ops - * @param value a double value + * @param value a long value used for the constant. */ public Constant(Ops tf, long value) { super(tf); @@ -59,7 +59,7 @@ public Constant(Ops tf, long value) { * Creates an Initializer that generates tensors with a constant value. * * @param tf the TensorFlow Ops - * @param value a double value + * @param value a double value used for the constant. */ public Constant(Ops tf, double value) { super(tf); @@ -73,7 +73,7 @@ public Constant(Ops tf, double value) { * Creates an Initializer that generates tensors with a constant value. * * @param tf the TensorFlow Ops - * @param value a boolean value + * @param value a boolean value used for the constant. */ public Constant(Ops tf, boolean value) { super(tf); diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java index b9c562736b3..d0a6af1ec07 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java @@ -58,6 +58,13 @@ * initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE); *
  • * + *

    NOTE: + *

    For a GlorotNormal equivalent initializer, use {@link + * VarianceScaling.Distribution#TRUNCATED_NORMAL} for the distribution parameter. + *

    For a GlorotUniform equivalent initializer, use {@link VarianceScaling.Distribution#UNIFORM} + * for the distribution parameter. + *

    + * * @param The TType for the call operation * @param The TNumber for the call operation * @see VarianceScaling.Distribution diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java index 0fdc656f06b..e2df2276593 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java @@ -53,6 +53,13 @@ * initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE); *
    * + *

    NOTE: + *

    For an HeNormal equivalent initializer, use {@link + * VarianceScaling.Distribution#TRUNCATED_NORMAL} for the distribution parameter. + *

    For an HeUniform equivalent initializer, use {@link VarianceScaling.Distribution#UNIFORM} + * for the distribution parameter. + *

    + * * @param The TType for the call operation * @param The TNumber for the call operation * @see The data Type for initializer operation */ -@FunctionalInterface public interface Initializer { /** diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java index 90122c6529a..ef7027da936 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/LeCun.java @@ -56,6 +56,18 @@ * initializer.call(tf.constant(Shape.of(2,2)), TFloat32.DTYPE); *
    * + * * + * + *

    NOTE: * + * + *

    For a LeCunNormal equivalent initializer, use {@link * + * VarianceScaling.Distribution#TRUNCATED_NORMAL} for the distribution parameter. * + * + *

    For a LeCunUniform equivalent initializer, use {@link VarianceScaling.Distribution#UNIFORM} * + * for the distribution parameter. * + * + *

    + * * @param The TType for the call operation * @param The TNumber for the call operation * @see extends BaseInitiali private final Long seed; /** - * Creates an Orthogonal Initializer + * Creates an Orthogonal Initializer using {@link #GAIN_DEFAULT} for the gain. * * @param tf the TensorFlow Ops * @param seed the seed for random number generation. An initializer created with a given seed @@ -72,7 +72,7 @@ public Orthogonal(Ops tf, Long seed) { * Creates an Orthogonal Initializer * * @param tf the TensorFlow Ops - * @param gain the gain to be applied to the Matrix. Default is 1.0. + * @param gain the gain to be applied to the Matrix. * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java index 1f3fef3b05c..94fb504ec23 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java @@ -46,7 +46,8 @@ public class RandomNormal extends BaseInitia private final Long seed; /** - * creates the RandomUniform initializer + * Creates the RandomUniform initializer using {@link #MEAN_DEFAULT} for the mean and {@link + * #STDDEV_DEFAULT} for the standard deviation. * * @param tf the TensorFlow Ops * @param seed the seed for random number generation. An initializer created with a given seed @@ -57,10 +58,10 @@ public RandomNormal(Ops tf, Long seed) { } /** - * creates the RandomUniform initializer + * Creates the RandomUniform initializer using {@link #STDDEV_DEFAULT} for the standard deviation. * * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. Default is 0. + * @param mean Mean of the random values to generate. * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ @@ -72,8 +73,8 @@ public RandomNormal(Ops tf, double mean, Long seed) { * creates the RandomUniform initializer * * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. Default is 0. - * @param stddev Standard deviation of the random values to generate. Default is 1.0. + * @param mean Mean of the random values to generate. + * @param stddev Standard deviation of the random values to generate. * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java index 133213da088..baa617dcdd0 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java @@ -48,7 +48,8 @@ public class RandomUniform extends BaseIniti private final Long seed; /** - * Creates a RandomUniform initializer + * Creates a RandomUniform initializer using {@link #MINVAL_DEFAULT} for the minval and + * {@link #MAXVAL_DEFAULT} for the maxval * * @param tf the TensorFlow Ops * @param seed the seed for random number generation. An initializer created with a given seed @@ -62,10 +63,8 @@ public RandomUniform(Ops tf, Long seed) { * Creates a RandomUniform initializer * * @param tf the TensorFlow Ops - * @param minval Lower bound of the range of random values to generate (inclusive). Default is - * -0.05. - * @param maxval Upper bound of the range of random values to generate (exclusive). Default is - * 0.05. + * @param minval Lower bound of the range of random values to generate (inclusive). + * @param maxval Upper bound of the range of random values to generate (exclusive). * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java index 84def47d691..401a2c93af5 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java @@ -47,7 +47,8 @@ public class TruncatedNormal extends BaseIni private final Long seed; /** - * Creates a TruncatedNormal Initializer + * Creates a TruncatedNormal Initializer using {@link #MEAN_DEFAULT} for the mean and {@link + * #STDDEV_DEFAULT} for the standard deviation. * * @param tf the TensorFlow Ops * @param seed the seed for random number generation. An initializer created with a given seed @@ -58,11 +59,11 @@ public TruncatedNormal(Ops tf, Long seed) { } /** - * Creates a TruncatedNormal Initializer + * Creates a TruncatedNormal Initializer. * * @param tf the TensorFlow Ops - * @param mean Mean of the random values to generate. Default is 0. - * @param stddev Standard deviation of the random values to generate. Default is 0.05. + * @param mean Mean of the random values to generate. + * @param stddev Standard deviation of the random values to generate. * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java index 0e4a935d5eb..0f826d7b2b7 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java @@ -28,7 +28,7 @@ * *

    * - *

    With distribution=TRUNCATED_NORMAL or UNTRUNCATED_NORMAL, samples are drawn from + *

    With distribution=TRUNCATED_NORMAL or NORMAL, samples are drawn from * a truncated/untruncated normal distribution with a mean of zero and a standard deviation (after * truncation, if used) stddev = Math.sqrt(scale / n), where n is: * @@ -138,11 +138,10 @@ public Operand call(Operand dims, DataType dtype) { switch (distribution) { case TRUNCATED_NORMAL: distOp = tf.random.statelessTruncatedNormal(dims, tf.constant(seeds), numdType); - // constant from scipy.stats.truncnorm.std(a=-2, b=2, loc=0., scale=1.) stddev = Math.sqrt(lscale) / .87962566103423978; mulOp = tf.math.mul(distOp, tf.dtypes.cast(tf.constant(stddev), numdType)); break; - case UNTRUNCATED_NORMAL: + case NORMAL: distOp = tf.random.statelessRandomNormal(dims, tf.constant(seeds), numdType); stddev = Math.sqrt(lscale); mulOp = tf.math.mul(distOp, tf.dtypes.cast(tf.constant(stddev), numdType)); @@ -197,7 +196,7 @@ public enum Mode { /** The random distribution to use when initializing the values. */ public enum Distribution { TRUNCATED_NORMAL, - UNTRUNCATED_NORMAL, + NORMAL, UNIFORM } } diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java deleted file mode 100644 index b00d94a6925..00000000000 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/InitializerFunctionTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* Copyright 2020 The TensorFlow Authors. All Rights Reserved. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -=======================================================================*/ -package org.tensorflow.framework.initializers; - -import org.junit.jupiter.api.*; -import org.tensorflow.Operand; -import org.tensorflow.framework.utils.TestSession; -import org.tensorflow.ndarray.Shape; -import org.tensorflow.op.Ops; -import org.tensorflow.types.*; - -/** Test the InitializerFunction initializer */ -public class InitializerFunctionTest { - - private final TestSession.Mode[] tfModes = {TestSession.Mode.EAGER, TestSession.Mode.GRAPH}; - - public InitializerFunctionTest() {} - - @BeforeAll - public static void setUpClass() {} - - @AfterAll - public static void tearDownClass() {} - - @BeforeEach - public void setUp() {} - - @AfterEach - public void tearDown() {} - - /** Test of call method, of class Initializer using Lambda. */ - @Test - public void testLambdaCallFloat() { - float[] expected = {12345.0f}; - for (TestSession.Mode tfMode : tfModes) - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new float[] {12345.0f}), dtype); - Operand operand = func.call(tf.constant(shape), TFloat32.DTYPE); - session.evaluate(expected, operand); - } - } - - /** Test of call method, of class Initializer using Lambda. */ - @Test - public void testLambdaCallUInt8() { - byte[] expected = {0x15}; - for (TestSession.Mode tfMode : tfModes) - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new byte[] {0x15}), dtype); - Operand operand = func.call(tf.constant(shape), TUint8.DTYPE); - session.evaluate(expected, operand); - } - } - - /** Test of call method, of class Initializer using Lambda. */ - @Test - public void testLambdaCallInt() { - int[] expected = {12345}; - for (TestSession.Mode tfMode : tfModes) - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new int[] {12345}), dtype); - Operand operand = func.call(tf.constant(shape), TInt32.DTYPE); - session.evaluate(expected, operand); - } - } - - /** Test of call method, of class Initializer using Lambda. */ - @Test - public void testLambdaCallLong() { - long[] expected = {12345L}; - for (TestSession.Mode tfMode : tfModes) - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new long[] {12345L}), dtype); - Operand operand = func.call(tf.constant(shape), TInt64.DTYPE); - session.evaluate(expected, operand); - } - } - - /** Test of call method, of class Initializer using Lambda. */ - @Test - public void testLambdaCallDouble() { - double[] expected = {Math.PI}; - for (TestSession.Mode tfMode : tfModes) - try (TestSession session = TestSession.createTestSession(tfMode)) { - Ops tf = session.getTF(); - Shape shape = Shape.of(1); - - // Test float - Initializer func = - (dims, dtype) -> tf.dtypes.cast(tf.constant(new double[] {Math.PI}), dtype); - Operand operand = func.call(tf.constant(shape), TFloat64.DTYPE); - session.evaluate(expected, operand); - } - } -} From 1f32de2d08495997e80ba91138e4b0a6e05aee7e Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Fri, 25 Sep 2020 17:05:42 -0400 Subject: [PATCH 48/55] Fixed JavaDoc --- .../main/java/org/tensorflow/framework/initializers/Glorot.java | 2 -- .../src/main/java/org/tensorflow/framework/initializers/He.java | 2 -- .../java/org/tensorflow/framework/initializers/Initializer.java | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java index d0a6af1ec07..7b3cea83b1e 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java @@ -81,8 +81,6 @@ public class Glorot extends VarianceScaling< * @param distribution The distribution type for the Glorot initializer. * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. - * @throws java.lang.IllegalArgumentException if the distribution is not TRUNCATED_NORMAL or - * UNIFORM * @see VarianceScaling.Distribution */ public Glorot(Ops tf, Distribution distribution, Long seed) { diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java index e2df2276593..f325a12c487 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java @@ -77,8 +77,6 @@ public class He extends VarianceScaling { /** - * The call operation for the initializer + * Generates the operation used to perform the initialization. * * @param dims the shape dimensions * @param dtype the data type From fb52dd450fedd3cb949834454dfaaec64c64a8c6 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Fri, 25 Sep 2020 18:18:12 -0400 Subject: [PATCH 49/55] Change UNTRUNCATED_NORMAL to NORMAL --- .../tensorflow/framework/initializers/GlorotTest.java | 4 ++-- .../org/tensorflow/framework/initializers/HeTest.java | 4 ++-- .../tensorflow/framework/initializers/LeCunTest.java | 4 ++-- .../framework/initializers/VarianceScalingTest.java | 10 +++++----- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java index 7d4f2bf8d20..3ff5938cb77 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java @@ -130,13 +130,13 @@ public void testCallUniformReproducible() { } @Test - public void testCallUNTRUNCATED_NORMALReproducible() { + public void testCall_NORMALReproducible() { for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); Shape shape = Shape.of(2, 2); Glorot instance = - new Glorot<>(tf, Distribution.UNTRUNCATED_NORMAL, SEED); + new Glorot<>(tf, Distribution.NORMAL, SEED); Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); session.evaluate(operand1, operand2); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java index 6509a8063ff..6853b28cdd6 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java @@ -128,12 +128,12 @@ public void testCallUniformReproducible() { } @Test - public void testCallUNTRUNCATED_NORMALReproducible() { + public void testCall_NORMALReproducible() { for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); Shape shape = Shape.of(2, 2); - He instance = new He<>(tf, Distribution.UNTRUNCATED_NORMAL, SEED); + He instance = new He<>(tf, Distribution.NORMAL, SEED); Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); session.evaluate(operand1, operand2); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java index bf69b36f437..00c869c3150 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java @@ -128,12 +128,12 @@ public void testCallUniformReproducible() { } @Test - public void testCallUNTRUNCATED_NORMALReproducible() { + public void testCall_NORMALReproducible() { for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); Shape shape = Shape.of(2, 2); - LeCun instance = new LeCun<>(tf, Distribution.UNTRUNCATED_NORMAL, SEED); + LeCun instance = new LeCun<>(tf, Distribution.NORMAL, SEED); Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); session.evaluate(operand1, operand2); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java index a4cf85502e8..e9dd54f9776 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -85,7 +85,7 @@ public void testCall_Double_1_FAN_IN_TRUNCATED_NORMAL() { /** Test of call method, of class VarianceScaling. */ @Test - public void testCall_Float_1_FAN_IN_UNTRUNCATED_NORMAL() { + public void testCall_Float_1_FAN_IN_NORMAL() { float[] expected = {-0.46082667F, -0.25798687F, -0.06924929F, -0.28017485F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -96,7 +96,7 @@ public void testCall_Float_1_FAN_IN_UNTRUNCATED_NORMAL() { tf, 1.0, VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + VarianceScaling.Distribution.NORMAL, SEED); Operand operand = instance.call(tf.constant(shape), TFloat32.DTYPE); session.evaluate(expected, operand); @@ -104,7 +104,7 @@ public void testCall_Float_1_FAN_IN_UNTRUNCATED_NORMAL() { } @Test - public void testCall_Double_1_FAN_IN_UNTRUNCATED_NORMAL() { + public void testCall_Double_1_FAN_IN_NORMAL() { double[] expected = { 1.3169108626945392, -1.0985224689731887, -0.13536536217837225, -1.698770780615686 }; @@ -117,7 +117,7 @@ public void testCall_Double_1_FAN_IN_UNTRUNCATED_NORMAL() { tf, 1.0, VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + VarianceScaling.Distribution.NORMAL, SEED); Operand operand = instance.call(tf.constant(shape), TFloat64.DTYPE); session.evaluate(expected, operand); @@ -185,7 +185,7 @@ public void testReproducible2() { tf, 1.0, VarianceScaling.Mode.FAN_IN, - VarianceScaling.Distribution.UNTRUNCATED_NORMAL, + VarianceScaling.Distribution.NORMAL, SEED); Operand operand1 = instance.call(tf.constant(shape), TFloat64.DTYPE); Operand operand2 = instance.call(tf.constant(shape), TFloat64.DTYPE); From e328cbf05c9532bb93a4d20cf495dff0349f9ab3 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 30 Sep 2020 17:04:00 -0400 Subject: [PATCH 50/55] Changed Long seed to long seed. --- .../tensorflow/framework/initializers/Glorot.java | 2 +- .../org/tensorflow/framework/initializers/He.java | 2 +- .../tensorflow/framework/initializers/LeCun.java | 2 +- .../framework/initializers/Orthogonal.java | 9 ++++----- .../framework/initializers/RandomNormal.java | 11 +++++------ .../framework/initializers/RandomUniform.java | 10 ++++------ .../framework/initializers/TruncatedNormal.java | 9 ++++----- .../framework/initializers/VarianceScaling.java | 15 +++------------ 8 files changed, 23 insertions(+), 37 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java index 7b3cea83b1e..3d5d37b91d3 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Glorot.java @@ -83,7 +83,7 @@ public class Glorot extends VarianceScaling< * will always produce the same random tensor for a given shape and dtype. * @see VarianceScaling.Distribution */ - public Glorot(Ops tf, Distribution distribution, Long seed) { + public Glorot(Ops tf, Distribution distribution, long seed) { super(tf, SCALE, Mode.FAN_AVG, distribution, seed); } } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java index f325a12c487..ce99da80bf7 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/He.java @@ -79,7 +79,7 @@ public class He extends VarianceScaling extends VarianceScaling extends BaseInitiali public static final double GAIN_DEFAULT = 1.0; private final double gain; - private final Long seed; + private final long seed; /** * Creates an Orthogonal Initializer using {@link #GAIN_DEFAULT} for the gain. @@ -64,7 +64,7 @@ public class Orthogonal extends BaseInitiali * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public Orthogonal(Ops tf, Long seed) { + public Orthogonal(Ops tf, long seed) { this(tf, GAIN_DEFAULT, seed); } @@ -76,7 +76,7 @@ public Orthogonal(Ops tf, Long seed) { * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public Orthogonal(Ops tf, double gain, Long seed) { + public Orthogonal(Ops tf, double gain, long seed) { super(tf); this.gain = gain; this.seed = seed; @@ -99,8 +99,7 @@ public Operand call(Operand dims, DataType dtype) { for (; i < dimsShape.numDimensions() - 1; i++) num_rows *= dimsShape.size(i); long num_cols = dimsShape.size(i); Shape flat_shape = Shape.of(Math.max(num_rows, num_cols), Math.min(num_rows, num_cols)); - long lseed = this.seed == null ? 0L : this.seed; - long[] seeds = {lseed, 0}; + long[] seeds = {seed, 0}; @SuppressWarnings("unchecked") DataType numdType = (DataType) dtype; @SuppressWarnings("unchecked") diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java index 94fb504ec23..f2d8a0d8e6e 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomNormal.java @@ -43,7 +43,7 @@ public class RandomNormal extends BaseInitia private final double mean; private final double stddev; - private final Long seed; + private final long seed; /** * Creates the RandomUniform initializer using {@link #MEAN_DEFAULT} for the mean and {@link @@ -53,7 +53,7 @@ public class RandomNormal extends BaseInitia * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public RandomNormal(Ops tf, Long seed) { + public RandomNormal(Ops tf, long seed) { this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, seed); } @@ -65,7 +65,7 @@ public RandomNormal(Ops tf, Long seed) { * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public RandomNormal(Ops tf, double mean, Long seed) { + public RandomNormal(Ops tf, double mean, long seed) { this(tf, mean, STDDEV_DEFAULT, seed); } @@ -78,7 +78,7 @@ public RandomNormal(Ops tf, double mean, Long seed) { * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public RandomNormal(Ops tf, double mean, double stddev, Long seed) { + public RandomNormal(Ops tf, double mean, double stddev, long seed) { super(tf); this.mean = mean; this.stddev = stddev; @@ -90,8 +90,7 @@ public RandomNormal(Ops tf, double mean, double stddev, Long seed) { public Operand call(Operand dims, DataType dtype) { if (!dtype.isNumeric()) throw new IllegalArgumentException("The data type must be numeric. Found : " + dtype.name()); - long lseed = this.seed == null ? 0L : this.seed; - long[] seeds = {lseed, 0L}; + long[] seeds = {seed, 0}; @SuppressWarnings("unchecked") DataType numdType = (DataType) dtype; @SuppressWarnings("unchecked") diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java index baa617dcdd0..b665729675d 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/RandomUniform.java @@ -45,7 +45,7 @@ public class RandomUniform extends BaseIniti private final Double minval; private final Double maxval; - private final Long seed; + private final long seed; /** * Creates a RandomUniform initializer using {@link #MINVAL_DEFAULT} for the minval and @@ -55,7 +55,7 @@ public class RandomUniform extends BaseIniti * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public RandomUniform(Ops tf, Long seed) { + public RandomUniform(Ops tf, long seed) { this(tf, MINVAL_DEFAULT, MAXVAL_DEFAULT, seed); } @@ -68,7 +68,7 @@ public RandomUniform(Ops tf, Long seed) { * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public RandomUniform(Ops tf, double minval, double maxval, Long seed) { + public RandomUniform(Ops tf, double minval, double maxval, long seed) { super(tf); this.minval = minval; this.maxval = maxval; @@ -96,9 +96,7 @@ public Operand call(Operand dims, DataType dtype) { Operand distOpT = (Operand) distOp; return distOpT; } else { - long lseed = this.seed == null ? 0L : this.seed; - long[] seeds = {lseed, 0L}; - + long[] seeds = {seed, 0}; distOp = tf.random.statelessRandomUniform(dims, tf.constant(seeds), numdType); @SuppressWarnings("unchecked") Operand distOpT = (Operand) distOp; diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java index 401a2c93af5..c71cf9a630e 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/TruncatedNormal.java @@ -44,7 +44,7 @@ public class TruncatedNormal extends BaseIni private final double mean; private final double stddev; - private final Long seed; + private final long seed; /** * Creates a TruncatedNormal Initializer using {@link #MEAN_DEFAULT} for the mean and {@link @@ -54,7 +54,7 @@ public class TruncatedNormal extends BaseIni * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public TruncatedNormal(Ops tf, Long seed) { + public TruncatedNormal(Ops tf, long seed) { this(tf, MEAN_DEFAULT, STDDEV_DEFAULT, seed); } @@ -67,7 +67,7 @@ public TruncatedNormal(Ops tf, Long seed) { * @param seed the seed for random number generation. An initializer created with a given seed * will always produce the same random tensor for a given shape and dtype. */ - public TruncatedNormal(Ops tf, double mean, double stddev, Long seed) { + public TruncatedNormal(Ops tf, double mean, double stddev, long seed) { super(tf); this.mean = mean; this.stddev = stddev; @@ -79,8 +79,7 @@ public TruncatedNormal(Ops tf, double mean, double stddev, Long seed) { public Operand call(Operand dims, DataType dtype) { if (!dtype.isNumeric()) throw new IllegalArgumentException("The data type must be numeric. Found : " + dtype.name()); - long lseed = this.seed == null ? 0L : this.seed; - long[] seeds = {lseed, 0L}; + long[] seeds = {seed,0}; @SuppressWarnings("unchecked") DataType numdType = (DataType) dtype; Operand distOp = tf.random.statelessTruncatedNormal(dims, tf.constant(seeds), numdType); diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java index 0f826d7b2b7..bc5c427df36 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java @@ -67,16 +67,8 @@ public class VarianceScaling extends BaseIni private final double scale; private final Mode mode; private final Distribution distribution; - private final Long seed; + private final long seed; - /** - * Creates a VarianceScaling Initializer - * - * @param tf the TensorFlow Ops - */ - public VarianceScaling(Ops tf) { - this(tf, SCALE_DEFAULT, MODE_DEFAULT, DISTRIBUTION_DEFAULT, null); - } /** * Creates a VarianceScaling Initializer @@ -97,7 +89,7 @@ public VarianceScaling(Ops tf, long seed) { * @param distribution Random distribution to use. * @param seed Used to create random seeds. */ - public VarianceScaling(Ops tf, double scale, Mode mode, Distribution distribution, Long seed) { + public VarianceScaling(Ops tf, double scale, Mode mode, Distribution distribution, long seed) { super(tf); if (scale <= 0.0) { throw new IllegalArgumentException("scale must be greater than 0, got " + scale); @@ -133,8 +125,7 @@ public Operand call(Operand dims, DataType dtype) { @SuppressWarnings("unchecked") DataType numdType = (DataType) dtype; double stddev; - long lseed = this.seed == null ? 0L : this.seed; - long[] seeds = {lseed, 0L}; + long[] seeds = {seed, 0}; switch (distribution) { case TRUNCATED_NORMAL: distOp = tf.random.statelessTruncatedNormal(dims, tf.constant(seeds), numdType); From 80f2fb0dc6679f9ef23f2de8f6674286f179d4d9 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Wed, 30 Sep 2020 18:24:42 -0400 Subject: [PATCH 51/55] Remove snake case --- .../framework/initializers/GlorotTest.java | 10 +++++----- .../tensorflow/framework/initializers/HeTest.java | 10 +++++----- .../tensorflow/framework/initializers/LeCunTest.java | 10 +++++----- .../framework/initializers/OrthogonalTest.java | 6 +++--- .../framework/initializers/RandomNormalTest.java | 4 ++-- .../framework/initializers/RandomUniformTest.java | 6 +++--- .../framework/initializers/TruncatedNormalTest.java | 4 ++-- .../framework/initializers/VarianceScalingTest.java | 12 ++++++------ 8 files changed, 31 insertions(+), 31 deletions(-) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java index 3ff5938cb77..a68bf2a0a98 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/GlorotTest.java @@ -45,7 +45,7 @@ public void tearDown() {} /** Test of call method, of class Glorot. */ @Test - public void testCallNormal_Float() { + public void testCallNormalFloat() { float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -59,7 +59,7 @@ public void testCallNormal_Float() { } @Test - public void testCallNormal_Double() { + public void testCallNormalDouble() { double[] expected = { 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 }; @@ -76,7 +76,7 @@ public void testCallNormal_Double() { /** Test of call method, of class Glorot. */ @Test - public void testCallUniform_Float() { + public void testCallUniformFloat() { float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -89,7 +89,7 @@ public void testCallUniform_Float() { } @Test - public void testCallUniform_Double() { + public void testCallUniformDouble() { double[] expected = { 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 }; @@ -130,7 +130,7 @@ public void testCallUniformReproducible() { } @Test - public void testCall_NORMALReproducible() { + public void testCallNORMALReproducible() { for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java index 6853b28cdd6..468759d347f 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/HeTest.java @@ -45,7 +45,7 @@ public void tearDown() {} /** Test of call method, of class He. */ @Test - public void testCallNormal_Float() { + public void testCallNormalFloat() { float[] expected = {-0.7408917F, -0.41477704F, -0.11133519F, -0.45044965F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -58,7 +58,7 @@ public void testCallNormal_Float() { } @Test - public void testCallNormal_Double() { + public void testCallNormalDouble() { double[] expected = { 2.117256561466521, -1.7661437620712939, -0.7650439080001085, 0.6889186518780481 }; @@ -74,7 +74,7 @@ public void testCallNormal_Double() { /** Test of call method, of class He. */ @Test - public void testCall_Float() { + public void testCallFloat() { float[] expected = {1.3104724f, 1.1583493f, 1.5936272f, 0.93282115f}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -87,7 +87,7 @@ public void testCall_Float() { } @Test - public void testCall_Double() { + public void testCallDouble() { double[] expected = { .09147407402970674, 0.6246627788317102, 0.09490870950065552, 0.8879452169740599 }; @@ -128,7 +128,7 @@ public void testCallUniformReproducible() { } @Test - public void testCall_NORMALReproducible() { + public void testCallNORMALReproducible() { for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java index 00c869c3150..6033f9e12a5 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/LeCunTest.java @@ -45,7 +45,7 @@ public void tearDown() {} /** Test of call method, of class LeCun. */ @Test - public void testCallNormal_Float() { + public void testCallNormalFloat() { float[] expected = {-0.52388954f, -0.29329166f, -0.07872587f, -0.31851602f}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -58,7 +58,7 @@ public void testCallNormal_Float() { } @Test - public void testCallNormal_Double() { + public void testCallNormalDouble() { double[] expected = { 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 }; @@ -74,7 +74,7 @@ public void testCallNormal_Double() { /** Test of call method, of class LeCun. */ @Test - public void testCallUniform_Float() { + public void testCallUniformFloat() { float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -87,7 +87,7 @@ public void testCallUniform_Float() { } @Test - public void testCallUniform_Double() { + public void testCallUniformDouble() { double[] expected = { 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 }; @@ -128,7 +128,7 @@ public void testCallUniformReproducible() { } @Test - public void testCall_NORMALReproducible() { + public void testCallNORMALReproducible() { for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { Ops tf = session.getTF(); diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java index 42570f3ba74..a4fff5fd19c 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/OrthogonalTest.java @@ -49,7 +49,7 @@ public void tearDown() {} /** Test of call method, of class Orthogonal. */ @Test - public void testCall_Int() { + public void testCallInt() { for (TestSession.Mode tfMode : tfModes) assertThrows( java.lang.IllegalArgumentException.class, @@ -66,7 +66,7 @@ public void testCall_Int() { /** Test of call method, of class Orthogonal. */ @Test - public void testCall_Float() { + public void testCallFloat() { float[] expected = { -0.3097564f, -0.11214957f, @@ -181,7 +181,7 @@ public void testCall_Float() { /** Test of call method, of class Orthogonal. */ @Test - public void testCall_Double() { + public void testCallDouble() { double[] expected = { 0.4852166440161694, -0.4290733656784607, diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java index 249f67ee57d..50aec670503 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomNormalTest.java @@ -46,7 +46,7 @@ public void tearDown() {} /** Test of call method, of class RandomNormal. */ @Test - public void testCall_Float() { + public void testCalltestSoftmaxFloat() { float[] expected = {-1.955122f, -1.0945456f, -0.29379985f, -1.1886811f}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -60,7 +60,7 @@ public void testCall_Float() { } @Test - public void testCall_Double() { + public void testCalltestSoftmaxDouble() { double[] expected = { 5.58717960737721, -4.6606361225803825, -0.5743065932046001, -7.207274031929497 }; diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java index c01e773bd47..d3f9af74209 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/RandomUniformTest.java @@ -47,7 +47,7 @@ public void tearDown() {} /** Test of call method, of class RandomUniform. */ @Test - public void testCall_Int() { + public void testCallInt() { int[] expected = {6, 1, 4, 1}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -62,7 +62,7 @@ public void testCall_Int() { /** Test of call method, of class RandomUniform. */ @Test - public void testCall_Float() { + public void testCallFloat() { float[] expected = {7.5660157f, 6.6877327f, 9.200811f, 5.385646F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -76,7 +76,7 @@ public void testCall_Float() { } @Test - public void testCall_Double() { + public void testCallDouble() { double[] expected = { 0.5281258126492294, 3.6064922351122752, 0.5479556897864346, 5.126554100456142 }; diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java index 4119d64fee8..0a551df2f38 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/TruncatedNormalTest.java @@ -46,7 +46,7 @@ public void tearDown() {} /** Test of call method, of class TruncatedNormal. */ @Test - public void testCall_Float() { + public void testCallFloat() { float[] expected = {-1.955122F, -1.0945456F, -0.29379985F, -1.1886811F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -60,7 +60,7 @@ public void testCall_Float() { } @Test - public void testCall_Double() { + public void testCallDouble() { double[] expected = { 5.58717960737721, -4.6606361225803825, -2.0188567598844402, 1.8179715736711362 }; diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java index e9dd54f9776..c04bebeadc1 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -44,7 +44,7 @@ public void tearDown() {} /** Test of call method, of class VarianceScaling. */ @Test - public void testCall_Float_1_FAN_IN_TRUNCATED_NORMAL() { + public void testCallFloat_1_FAN_IN_TRUNCATED_NORMAL() { float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -63,7 +63,7 @@ public void testCall_Float_1_FAN_IN_TRUNCATED_NORMAL() { } @Test - public void testCall_Double_1_FAN_IN_TRUNCATED_NORMAL() { + public void testCallDouble_1_FAN_IN_TRUNCATED_NORMAL() { double[] expected = { 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 }; @@ -85,7 +85,7 @@ public void testCall_Double_1_FAN_IN_TRUNCATED_NORMAL() { /** Test of call method, of class VarianceScaling. */ @Test - public void testCall_Float_1_FAN_IN_NORMAL() { + public void testCallFloat_1_FAN_IN_NORMAL() { float[] expected = {-0.46082667F, -0.25798687F, -0.06924929F, -0.28017485F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -104,7 +104,7 @@ public void testCall_Float_1_FAN_IN_NORMAL() { } @Test - public void testCall_Double_1_FAN_IN_NORMAL() { + public void testCalltestSoftmaxDouble_1_FAN_IN_NORMAL() { double[] expected = { 1.3169108626945392, -1.0985224689731887, -0.13536536217837225, -1.698770780615686 }; @@ -126,7 +126,7 @@ public void testCall_Double_1_FAN_IN_NORMAL() { /** Test of call method, of class VarianceScaling. */ @Test - public void testCall_Float_1_FAN_IN_UNIFORM() { + public void testCalltestSoftmaxFloat_1_FAN_IN_UNIFORM() { float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -141,7 +141,7 @@ public void testCall_Float_1_FAN_IN_UNIFORM() { } @Test - public void testCall_Double_1_FAN_IN_UNIFORM() { + public void testCalltestSoftmaxDouble_1_FAN_IN_UNIFORM() { double[] expected = { 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 }; From b0b747efd18b4088f8dee026c37ae06350a61a05 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Fri, 2 Oct 2020 16:31:39 -0400 Subject: [PATCH 52/55] Change snake case to camel case --- .../framework/initializers/IdentityTest.java | 2 +- .../framework/initializers/VarianceScalingTest.java | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java index a15f1a530d4..adb6c0c118a 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/IdentityTest.java @@ -47,7 +47,7 @@ public void tearDown() {} /** Test of call method, of class Orthogonal. */ @Test - public void testCall_Int() { + public void testCallInt() { for (TestSession.Mode tfMode : tfModes) assertThrows( java.lang.IllegalArgumentException.class, diff --git a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java index c04bebeadc1..77e0dd7afc7 100644 --- a/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java +++ b/tensorflow-framework/src/test/java/org/tensorflow/framework/initializers/VarianceScalingTest.java @@ -44,7 +44,7 @@ public void tearDown() {} /** Test of call method, of class VarianceScaling. */ @Test - public void testCallFloat_1_FAN_IN_TRUNCATED_NORMAL() { + public void testCallFloat1FanInTruncatedNormal() { float[] expected = {-0.52388954F, -0.29329166F, -0.07872587F, -0.31851602F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -63,7 +63,7 @@ public void testCallFloat_1_FAN_IN_TRUNCATED_NORMAL() { } @Test - public void testCallDouble_1_FAN_IN_TRUNCATED_NORMAL() { + public void testCallDouble1FanInTruncatedNormal() { double[] expected = { 1.4971264721246893, -1.2488522307109322, -0.5409677352523339, 0.4871390504288623 }; @@ -85,7 +85,7 @@ public void testCallDouble_1_FAN_IN_TRUNCATED_NORMAL() { /** Test of call method, of class VarianceScaling. */ @Test - public void testCallFloat_1_FAN_IN_NORMAL() { + public void testCallFloat1FanInNormal() { float[] expected = {-0.46082667F, -0.25798687F, -0.06924929F, -0.28017485F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -104,7 +104,7 @@ public void testCallFloat_1_FAN_IN_NORMAL() { } @Test - public void testCalltestSoftmaxDouble_1_FAN_IN_NORMAL() { + public void testCalltestSoftmaxDouble1FanInNormal() { double[] expected = { 1.3169108626945392, -1.0985224689731887, -0.13536536217837225, -1.698770780615686 }; @@ -126,7 +126,7 @@ public void testCalltestSoftmaxDouble_1_FAN_IN_NORMAL() { /** Test of call method, of class VarianceScaling. */ @Test - public void testCalltestSoftmaxFloat_1_FAN_IN_UNIFORM() { + public void testCalltestSoftmaxFloat1FanInUNIFORM() { float[] expected = {0.9266439F, 0.8190767F, 1.1268647F, 0.6596042F}; for (TestSession.Mode tfMode : tfModes) try (TestSession session = TestSession.createTestSession(tfMode)) { @@ -141,7 +141,7 @@ public void testCalltestSoftmaxFloat_1_FAN_IN_UNIFORM() { } @Test - public void testCalltestSoftmaxDouble_1_FAN_IN_UNIFORM() { + public void testCalltestSoftmaxDouble1FanInUNIFORM() { double[] expected = { 0.06468193804916589, 0.44170328686673477, 0.06711059208157763, 0.6278720842445181 }; From 505d0d640fe92e734aaa89a9e113e1a6433166ef Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Fri, 2 Oct 2020 16:39:54 -0400 Subject: [PATCH 53/55] Change snake case to camel case --- .../tensorflow/framework/initializers/Identity.java | 12 ++++++------ .../framework/initializers/Orthogonal.java | 12 ++++++------ .../framework/initializers/VarianceScaling.java | 8 ++++---- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java index e92e418b5f2..34e6cd790f4 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Identity.java @@ -75,24 +75,24 @@ public Operand call(Operand dims, DataType dtype) { throw new IllegalArgumentException("2D matrix required, got " + shape.numDimensions()); } boolean isSquare = shape.size(0) == shape.size(1); - long diag_size = Math.min(shape.size(0), shape.size(1)); - Shape diagShape = Shape.of(diag_size); + long diagSize = Math.min(shape.size(0), shape.size(1)); + Shape diagShape = Shape.of(diagSize); Operand op; Operand zero = tf.dtypes.cast(tf.constant(0), dtype); - Operand diag_ones = + Operand diagOnes = tf.fill(tf.constant(diagShape.asArray()), tf.dtypes.cast(tf.constant(1.0), dtype)); if (isSquare) { op = tf.linalg.matrixDiag( - diag_ones, + diagOnes, tf.constant(0), // don't cast here, expecting TInt32 tf.constant((int) shape.size(0)), tf.constant((int) shape.size(1)), zero); } else { - Operand zero_matrix = tf.zeros(dims, dtype); - op = tf.linalg.matrixSetDiag(zero_matrix, diag_ones, tf.constant(0)); + Operand zeroMatrix = tf.zeros(dims, dtype); + op = tf.linalg.matrixSetDiag(zeroMatrix, diagOnes, tf.constant(0)); } return tf.math.mul(op, tf.dtypes.cast(tf.constant(gain), dtype)); diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java index 5da86f3dcea..48e2c56d5be 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/Orthogonal.java @@ -94,18 +94,18 @@ public Operand call(Operand dims, DataType dtype) { "The tensor to initialize must be at least two-dimensional, got " + dimsShape.numDimensions()); } - long num_rows = 1; + long numRows = 1; int i = 0; - for (; i < dimsShape.numDimensions() - 1; i++) num_rows *= dimsShape.size(i); - long num_cols = dimsShape.size(i); - Shape flat_shape = Shape.of(Math.max(num_rows, num_cols), Math.min(num_rows, num_cols)); + for (; i < dimsShape.numDimensions() - 1; i++) numRows *= dimsShape.size(i); + long numCols = dimsShape.size(i); + Shape flatShape = Shape.of(Math.max(numRows, numCols), Math.min(numRows, numCols)); long[] seeds = {seed, 0}; @SuppressWarnings("unchecked") DataType numdType = (DataType) dtype; @SuppressWarnings("unchecked") Operand op = (Operand) - tf.random.statelessRandomNormal(tf.constant(flat_shape), tf.constant(seeds), numdType); + tf.random.statelessRandomNormal(tf.constant(flatShape), tf.constant(seeds), numdType); Qr.Options qrOptions = Qr.fullMatrices(false); Qr qrOp = tf.linalg.qr(op, qrOptions); @@ -114,7 +114,7 @@ public Operand call(Operand dims, DataType dtype) { Operand diagOp = tf.linalg.matrixDiagPart(ro, tf.constant(0), tf.dtypes.cast(tf.constant(0), dtype)); Operand qop = tf.math.mul(qo, tf.math.sign(diagOp)); - if (num_rows < num_cols) qop = tf.linalg.transpose(qop, null); + if (numRows < numCols) qop = tf.linalg.transpose(qop, null); return tf.math.mul(qop, tf.dtypes.cast(tf.constant(this.gain), dtype)); } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java index bc5c427df36..fd33adadd5c 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/initializers/VarianceScaling.java @@ -166,12 +166,12 @@ private double[] computeFans(Shape shape) { fanIn = dims[0]; fanOut = dims[1]; } else { - double receptive_field_size = 1.; + double receptiveFieldSize = 1.; for (int i = dims.length - 2; i >= 0; i--) { - receptive_field_size *= dims[i]; + receptiveFieldSize *= dims[i]; } - fanIn = dims[dims.length - 2] * receptive_field_size; - fanOut = dims[dims.length - 1] * receptive_field_size; + fanIn = dims[dims.length - 2] * receptiveFieldSize; + fanOut = dims[dims.length - 1] * receptiveFieldSize; } return new double[] {fanIn, fanOut}; From c4a7bfbfae81614d5cb36e8a7e8abdde977e037f Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Fri, 2 Oct 2020 17:25:24 -0400 Subject: [PATCH 54/55] Moved isCompatibleWith to Shape --- .../java/org/tensorflow/ndarray/Shape.java | 179 ++++++++++++------ .../framework/utils/ShapeUtils.java | 81 -------- 2 files changed, 124 insertions(+), 136 deletions(-) diff --git a/ndarray/src/main/java/org/tensorflow/ndarray/Shape.java b/ndarray/src/main/java/org/tensorflow/ndarray/Shape.java index 6073a575696..4a6ef6c8db6 100644 --- a/ndarray/src/main/java/org/tensorflow/ndarray/Shape.java +++ b/ndarray/src/main/java/org/tensorflow/ndarray/Shape.java @@ -52,10 +52,10 @@ public static Shape scalar() { /** * Create a Shape representing a scalar or an N-dimensional value. * - *

    Creates a Shape representing a scalar or an N-dimensional value (N being at least 1), - * with the provided size for each dimension. A -1 indicates that the size of the corresponding - * dimension is unknown. If no sizes are provided, a Shape representing a scalar is created. - * For example: + *

    Creates a Shape representing a scalar or an N-dimensional value (N being at least 1), with + * the provided size for each dimension. A -1 indicates that the size of the corresponding + * dimension is unknown. If no sizes are provided, a Shape representing a scalar is created. For + * example: * *

    {@code
        * // A 2-element vector.
    @@ -84,11 +84,11 @@ public static Shape of(long... dimensionSizes) {
       /**
        * Returns the total number of elements a Tensor with this Shape would have.
        *
    -   * 

    If {@link Shape#isUnknown()} is true or {@link Shape#hasUnknownDimension()} is true, - * {@link Shape#UNKNOWN_SIZE} is returned. + *

    If {@link Shape#isUnknown()} is true or {@link Shape#hasUnknownDimension()} is true, {@link + * Shape#UNKNOWN_SIZE} is returned. * * @return The total number of elements a Tensor with this shape would have if it can be - * calculated, else {@link Shape#UNKNOWN_SIZE}. + * calculated, else {@link Shape#UNKNOWN_SIZE}. */ public long size() { if (size == null) { @@ -104,12 +104,11 @@ public long size() { * an unknown size, {@link Shape#UNKNOWN_SIZE} is returned. * * @param i the index of the dimension to get the size for. If this Shape has a known number of - * dimensions, it must be < {@link Shape#numDimensions()}. The index may be negative, - * in which case the position is counted from the end of the shape. E.g.: - * {@code size(-1)} returns the size of the last dimension, {@code size(-2)} the size of - * the second to last dimension etc. + * dimensions, it must be < {@link Shape#numDimensions()}. The index may be negative, in which + * case the position is counted from the end of the shape. E.g.: {@code size(-1)} returns the + * size of the last dimension, {@code size(-2)} the size of the second to last dimension etc. * @return The size of the dimension with the given index if known, {@link Shape#UNKNOWN_SIZE} - * otherwise. + * otherwise. */ public long size(int i) { if (dimensionSizes == null) { @@ -163,8 +162,8 @@ public boolean isUnknown() { } /** - * Returns a defensive copy of the this Shape's axes. Changes to the returned array to not - * change this Shape's state. Returns null if {@link Shape#isUnknown()} is true. + * Returns a defensive copy of the this Shape's axes. Changes to the returned array to not change + * this Shape's state. Returns null if {@link Shape#isUnknown()} is true. */ public long[] asArray() { if (this.dimensionSizes == null) { @@ -182,15 +181,17 @@ public int hashCode() { /** * Equals implementation for Shapes. Two Shapes are considered equal iff: * - *

      - *
    • the number of dimensions is defined and equal for both - *
    • the size of each dimension is defined and equal for both + *

      + * + *

        + *
      • the number of dimensions is defined and equal for both + *
      • the size of each dimension is defined and equal for both *
      * *

      If either Shape has unknown dimensions (even if they are the same in both) or if either - * shape has an unknown number of dimensions (even if both return {@code true} for - * {@link Shape#isUnknown()}), they are not considered equal! However, a shape will always - * equal itself, even if it is unknown or contains unknown dimensions. + * shape has an unknown number of dimensions (even if both return {@code true} for {@link + * Shape#isUnknown()}), they are not considered equal! However, a shape will always equal itself, + * even if it is unknown or contains unknown dimensions. */ @Override public boolean equals(Object obj) { @@ -229,17 +230,17 @@ public Shape head() { } /** - * Returns an n-dimensional Shape with the dimensions matching the first n dimensions - * of this shape + * Returns an n-dimensional Shape with the dimensions matching the first n dimensions of this + * shape * * @param n the number of leading dimensions to get, must be <= than {@link Shape#numDimensions()} - * @return an n-dimensional Shape with the first n dimensions matching the first n dimensions - * of this Shape + * @return an n-dimensional Shape with the first n dimensions matching the first n dimensions of + * this Shape */ public Shape take(int n) { if (n > numDimensions()) { - throw new ArrayIndexOutOfBoundsException("Cannot take " + n + - " dimensions, shape has only " + numDimensions() + "."); + throw new ArrayIndexOutOfBoundsException( + "Cannot take " + n + " dimensions, shape has only " + numDimensions() + "."); } long[] newDimensions = new long[n]; System.arraycopy(dimensionSizes, 0, newDimensions, 0, n); @@ -253,18 +254,18 @@ public Shape tail() { } /** - * Returns an n-dimensional Shape with the dimensions matching the last n dimensions - * of this Shape. + * Returns an n-dimensional Shape with the dimensions matching the last n dimensions of this + * Shape. * - * @param n the number of trailing dimensions to get, must be <= than - * {@link Shape#numDimensions()} + * @param n the number of trailing dimensions to get, must be <= than {@link + * Shape#numDimensions()} * @return an n-dimensional shape with the dimensions matching the last n dimensions of this - * Shape, never null + * Shape, never null */ public Shape takeLast(int n) { if (n > numDimensions()) { - throw new ArrayIndexOutOfBoundsException("Cannot take last " + n + - " dimensions, shape has only " + numDimensions() + "."); + throw new ArrayIndexOutOfBoundsException( + "Cannot take last " + n + " dimensions, shape has only " + numDimensions() + "."); } long[] newDimensions = new long[n]; System.arraycopy(dimensionSizes, numDimensions() - n, newDimensions, 0, n); @@ -276,8 +277,8 @@ public Shape takeLast(int n) { * {@link Shape#isUnknown()} must be {@code false}. * * @param firstDimension the dimension to prepend - * @return a new shape with the given dimension first, followed by this Shape's dimensions, - * never null + * @return a new shape with the given dimension first, followed by this Shape's dimensions, never + * null */ public Shape prepend(long firstDimension) { long[] newDimensions = new long[dimensionSizes.length + 1]; @@ -288,8 +289,8 @@ public Shape prepend(long firstDimension) { } /** - * Returns a new Shape, with a new last dimension added. In order for this call to succeed, - * {@link Shape#isUnknown()} must be {@code false}. + * Returns a new Shape, with a new last dimension added. In order for this call to succeed, {@link + * Shape#isUnknown()} must be {@code false}. * * @param lastDimension the dimension to append * @return a new Shape with this Shape's dimensions followed by the given dimension, never null @@ -303,38 +304,36 @@ public Shape append(long lastDimension) { } /** - * Returns a new Shape, with another Shape's dimensions prepended. - * For both this Shape and the other Shape, {@link Shape#isUnknown()} must return false. - * E.g. {@code Shape.of(3,4).prepend(Shape.of(1,2)) => Shape.of(1,2,3,4) } + * Returns a new Shape, with another Shape's dimensions prepended. For both this Shape and the + * other Shape, {@link Shape#isUnknown()} must return false. E.g. {@code + * Shape.of(3,4).prepend(Shape.of(1,2)) => Shape.of(1,2,3,4) } * * @param other another Shape, must not be {@code null}, must not be unknown - * @return A new Shape consisting of the given Shapes's dimensions followed by this Shape's - * dimensions, never null + * @return A new Shape consisting of the given Shape's dimensions followed by this Shape's + * dimensions, never null */ public Shape prepend(Shape other) { long[] newDimensions = new long[other.dimensionSizes.length + dimensionSizes.length]; - System.arraycopy(other.dimensionSizes, 0, - newDimensions, 0, other.dimensionSizes.length); - System.arraycopy(dimensionSizes, 0, - newDimensions, other.dimensionSizes.length, dimensionSizes.length); + System.arraycopy(other.dimensionSizes, 0, newDimensions, 0, other.dimensionSizes.length); + System.arraycopy( + dimensionSizes, 0, newDimensions, other.dimensionSizes.length, dimensionSizes.length); return Shape.of(newDimensions); } /** - * Returns a new Shape, with another Shapes' dimensions appended. - * For both this Shape and the other Shape, {@link Shape#isUnknown()} must return false. - * E.g. @code Shape.of(3,4).append(Shape.of(1,2)) => Shape.of(3,4,1,2) } + * Returns a new Shape, with another Shapes' dimensions appended. For both this Shape and the + * other Shape, {@link Shape#isUnknown()} must return false. E.g. @code + * Shape.of(3,4).append(Shape.of(1,2)) => Shape.of(3,4,1,2) } * * @param other another Shape, must not be {@code null}, must not be unknown - * @return A new Shape consisting of this Shapes's dimensions followed by the given Shape's - * dimensions + * @return A new Shape consisting of this Shape's dimensions followed by the given Shape's + * dimensions */ public Shape append(Shape other) { long[] newDimensions = new long[dimensionSizes.length + other.dimensionSizes.length]; - System.arraycopy(dimensionSizes, 0, - newDimensions, 0, dimensionSizes.length); - System.arraycopy(other.dimensionSizes, 0, - newDimensions, dimensionSizes.length, other.dimensionSizes.length); + System.arraycopy(dimensionSizes, 0, newDimensions, 0, dimensionSizes.length); + System.arraycopy( + other.dimensionSizes, 0, newDimensions, dimensionSizes.length, other.dimensionSizes.length); return Shape.of(newDimensions); } @@ -351,4 +350,74 @@ private static long computeSize(long[] dimensionSizes) { } return computedSize; } + + /** + * Determines whether another shape is compatible with this one. + * + *

      + * + *

      Two possibly-partially-defined shapes are compatible if there exists a fully-defined shape + * that both shapes can represent. Thus, compatibility allows the shape inference code to reason + * about partially-defined shapes. For example: + * + *

        + *
      • Shape.unknown() is compatible with all shapes. + *
      • Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) is compatible with all two-dimensional + * shapes, such as Shape(32, 784), and also Shape.unknown(). It is + * not compatible with, for example, Shape(UNKNOWN_SIZE) or + * Shape(UNKNOWN_SIZE, UNKNOWN_SIZE, UNKNOWN_SIZE). + *
      • Shape(32, UNKNOWN_SIZE) is compatible with all two-dimensional shapes with + * size 32 in the 0th dimension, and also Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) and + * Shape.unknown(). It is not compatible with, for example, Shape(32) + * , Shape(32, UNKNOWN_SIZE, 1) or Shape(64, UNKNOWN_SIZE). + *
      • Shape(32, 784) is compatible with itself, and also + * Shape(32, UNKNOWN_SIZE), Shape(UNKNOWN_SIZE, 784), + * Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) and Shape.unknown(). It is not + * compatible with, for example, Shape(32, 1, 784) or Shape(UNKNOWN_SIZE) + * . + *
      + * + *

      The compatibility relation is reflexive and symmetric, but not transitive. For example, + * Shape(32, 784) is compatible with Shape.unknown(), and + * Shape.unknown() is compatible with Shape(4, 4), but Shape(32, 784) + * is not compatible with Shape(4, 4). + * + *

      Compatibility is not the same as broadcasting. Compatible shapes must have the same number + * of dimensions and for each dimension pair, one dimension has to equal the other dimensions or + * at least one of the dimensions in the pair has to be UNKNOWN_SIZE. + * + *

      Broadcasting allows different dimensions, but paired dimensions have to either be equal, or + * one dimension must be 1. If one shape has less dimensions than another shape, the smaller shape + * is "stretched" with dimensions of 1. + * + * @param shape The other shape + * @return true, if the two shapes are compatible. + */ + public boolean isCompatibleWith(Shape shape) { + if (!this.isUnknown() && !shape.isUnknown()) { + if (numDimensions() != shape.numDimensions()) { + return false; + } + for (int i = 0; i < numDimensions(); i++) { + if (!isCompatible(size(i), shape.size(i))) { + return false; + } + } + } + return true; + } + + /** + * Test to see if two shape dimensions are compatible. + * + *

      The dimensions are compatible if either dimension is Shape.UNKNOWN_SIZE or both + * dimensions are equal + * + * @param dim the first dimension + * @param otherDim the second dimension + * @return true, if both dimensions are compatible + */ + public static boolean isCompatible(long dim, long otherDim) { + return dim == Shape.UNKNOWN_SIZE || otherDim == Shape.UNKNOWN_SIZE || dim == otherDim; + } } diff --git a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java index ec1fce0f67d..122de9f21ae 100644 --- a/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java +++ b/tensorflow-framework/src/main/java/org/tensorflow/framework/utils/ShapeUtils.java @@ -123,73 +123,6 @@ public static Shape getShape(Tensor tensor) { return data.shape(); } - /** - * Determines whether two shapes are compatible. - * - *

      - * - *

      Two possibly-partially-defined shapes are compatible if there exists a fully-defined shape - * that both shapes can represent. Thus, compatibility allows the shape inference code to reason - * about partially-defined shapes. For example: - * - *

        - *
      • Shape.unknown() is compatible with all shapes. - *
      • Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) is compatible with all two-dimensional - * shapes, such as Shape(32, 784), and also Shape.unknown(). It is - * not compatible with, for example, Shape(UNKNOWN_SIZE) or - * Shape(UNKNOWN_SIZE, UNKNOWN_SIZE, UNKNOWN_SIZE). - *
      • Shape(32, UNKNOWN_SIZE) is compatible with all two-dimensional shapes with - * size 32 in the 0th dimension, and also Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) and - * Shape.unknown(). It is not compatible with, for example, Shape(32) - * , Shape(32, UNKNOWN_SIZE, 1) or Shape(64, UNKNOWN_SIZE). - *
      • Shape(32, 784) is compatible with itself, and also - * Shape(32, UNKNOWN_SIZE), Shape(UNKNOWN_SIZE, 784), - * Shape(UNKNOWN_SIZE, UNKNOWN_SIZE) and Shape.unknown(). It is not - * compatible with, for example, Shape(32, 1, 784) or Shape(UNKNOWN_SIZE) - * . - *
      - * - *

      The compatibility relation is reflexive and symmetric, but not transitive. For example, - * Shape(32, 784) is compatible with Shape.unknown(), and - * Shape.unknown() is compatible with Shape(4, 4), but Shape(32, 784) - * is not compatible with Shape(4, 4). - * - *

      Compatibility is not the same as broadcasting. Compatible shapes must have the same number - * of dimensions and for each dimension pair, one dimension has to equal the other dimensions or - * at least one of the dimensions in the pair has to be UNKNOWN_SIZE. - * - *

      Broadcasting allows different dimensions, but paired dimensions have to either be equal, or - * one dimension must be 1. If one shape has less dimensions than another shape, the smaller shape - * is "stretched" with dimensions of 1. See {@link org.tensorflow.op.Ops#broadcastTo}. - * - * @param a The first shape - * @param b The second shape - * @return true, if the two shapes are compatible. - */ - public static boolean isCompatibleWith(Shape a, Shape b) { - if (isUnknownShape(a) && isUnknownShape(b)) { - if (a.numDimensions() != b.numDimensions()) { - return false; - } - for (int i = 0; i < a.numDimensions(); i++) { - if (!isCompatible(a.size(i), b.size(i))) { - return false; - } - } - } - return true; - } - - /** - * Determines if a shape is an unknown shape as provided in Shape.unknown(). - * - * @param a the shape to test. - * @return true if the shape is an unknown shape - */ - public static boolean isUnknownShape(Shape a) { - return a.equals(Shape.unknown()); - } - /** * Reduces the shape by eliminating trailing Dimensions. * @@ -215,18 +148,4 @@ public static Shape reduce(Shape shape, int axis) { newArray[axis - 1] = prod; return Shape.of(newArray); } - - /** - * Test to see if two shape dimensions are compatible. - * - *

      The dimensions are compatible if either dimension is Shape.UNKNOWN_SIZE or both - * dimensions are equal - * - * @param dim the first dimension - * @param otherDim the second dimension - * @return true, if both dimensions are compatible - */ - public static boolean isCompatible(long dim, long otherDim) { - return dim == Shape.UNKNOWN_SIZE || otherDim == Shape.UNKNOWN_SIZE || dim == otherDim; - } } From 9229789c69aafa3a0a73a7c672e346b627cfa904 Mon Sep 17 00:00:00 2001 From: Jim Clarke Date: Sat, 3 Oct 2020 07:58:30 -0400 Subject: [PATCH 55/55] Moved isCompatibleWith to Shape --- .../org/tensorflow/ndarray/ShapeTest.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/ndarray/src/test/java/org/tensorflow/ndarray/ShapeTest.java b/ndarray/src/test/java/org/tensorflow/ndarray/ShapeTest.java index 5f69571e6fc..d2e3e432a2c 100644 --- a/ndarray/src/test/java/org/tensorflow/ndarray/ShapeTest.java +++ b/ndarray/src/test/java/org/tensorflow/ndarray/ShapeTest.java @@ -16,10 +16,10 @@ */ package org.tensorflow.ndarray; -import static org.junit.jupiter.api.Assertions.*; - import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.*; + public class ShapeTest { @Test @@ -135,4 +135,36 @@ public void testShapeModification() { internalShape[0] = 42L; assertEquals(2L, one.size(0)); } + + @Test + public void testShapeCompatible() { + Shape a = Shape.unknown(); + Shape b = Shape.of(2, 2); + assertTrue(a.isCompatibleWith(b)); + assertTrue(b.isCompatibleWith(a)); + + a = Shape.of(2, 2); + assertTrue(a.isCompatibleWith(b)); + assertTrue(b.isCompatibleWith(a)); + + a = Shape.of(2, -1); + assertTrue(a.isCompatibleWith(b)); + assertTrue(b.isCompatibleWith(a)); + + a = Shape.of(-1, 2); + assertTrue(a.isCompatibleWith(b)); + assertTrue(b.isCompatibleWith(a)); + + a = Shape.of(-1, -1); + assertTrue(a.isCompatibleWith(b)); + assertTrue(b.isCompatibleWith(a)); + + a = Shape.of(1, 2); + assertFalse(a.isCompatibleWith(b)); + assertFalse(b.isCompatibleWith(a)); + + a = Shape.of(1, 2, 3); + assertFalse(a.isCompatibleWith(b)); + assertFalse(b.isCompatibleWith(a)); + } }