Exception in thread "main" org.tensorflow.exceptions.TensorFlowException: No gradient defined for op: SelectV2.
Open
Nobody has claimed this yet.
- Dominant language
- Java
- Stars
- 928
- Forks
- 227
- PR merge metrics
- No merged PRs in 30d
Description
env :
tensorflow-java : 0.5.0-SNAPSHOT
scala :2.12.11
java : jdk 15
Hi :
when I defined a tf Variable named embeddings ,and want to do some operation with it, invoke the callone method
def clipByNormTF[T <: TNumber](someNums: Operand[T], clipNormBias: Operand[T], axis: Operand[TInt32], tf: Ops): Output[TFloat32] = {
try {
val l2sum = tf.reduceSum(tf.math.square(tf.dtypes.cast(someNums, classOf[TFloat64])), axis, ReduceSum.keepDims(true))
val pred = tf.math.greater(l2sum, tf.constant(0.0))
println("Here will crash !!! please ")
val l2sumSafe = tf.select(pred, l2sum, tf.onesLike(l2sum))
val l2norm = tf.select(pred, tf.math.sqrt(l2sumSafe), l2sum)
val intermediate = tf.math.mul(tf.dtypes.cast(someNums, classOf[TFloat64]), tf.dtypes.cast(clipNormBias, classOf[TFloat64]))
val valuesClip = tf.identity(tf.math.divNoNan(intermediate, tf.math.maximum(l2norm, tf.dtypes.cast(clipNormBias, classOf[TFloat64]))))
if (someNums.shape().isCompatibleWith(intermediate.shape())) {
println(s"match the shape ${someNums.shape().get(0)} ${someNums.shape().get(1)} || ${intermediate.shape().get(0)} ${intermediate.shape().get(1)}")
tf.dtypes.cast(valuesClip, classOf[TFloat32]).asOutput()
} else {
println(s"can not match the shape ${someNums.shape().get(0)} ${someNums.shape().get(1)} || ${intermediate.shape().get(0)} ${intermediate.shape().get(1)}")
throw new Exception("bad shape")
}
}
def callOne(tf: Ops, input: Operand[T]): Operand[TFloat32] = {
println(s"Embedding Layer ${this.layerName} input compute shape ${input.shape().asArray().mkString("|")}")
val inputZ = tf.dtypes.cast(input, classOf[TInt32])
val gatherResult = tf.gather(this.embeddings, inputZ, tf.constant(0))
val gr = tf.dtypes.cast(gatherResult, classOf[TFloat32])
val result = clipByNormTF(gr, tf.constant(this.maxNormBias), tf.constant(Array(1, 0)), tf)
println(s"Embedding Layer call result shape ${this.layerName} compute output shape ${result.shape().asArray().mkString("|")}")
result
}
meet to error console
Exception in thread "main" org.tensorflow.exceptions.TensorFlowException: No gradient defined for op: SelectV2. Please see https://www.tensorflow.org/code/tensorflow/cc/gradients/README.md for instructions on how to add C++ gradients.
at org.tensorflow.internal.c_api.AbstractTF_Status.throwExceptionIfNotOK(AbstractTF_Status.java:101)
at org.tensorflow.Graph.addGradients(Graph.java:1152)
at org.tensorflow.Graph.addGradients(Graph.java:703)
at org.tensorflow.op.core.Gradients.create(Gradients.java:104)
at org.tensorflow.op.core.Gradients.create(Gradients.java:125)
at org.tensorflow.op.Ops.gradients(Ops.java:2814)
I do not know why , feel appreciate help me ,thanks
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided clipByNormTF and callOne code and the stack trace through Graph.addGradients, Gradients.create, and Ops.gradients. Reproduce the SelectV2 failure with tensorflow-java 0.5.0-SNAPSHOT, Scala 2.12.11, and JDK 15; done means the gradient behavior or an appropriate fix is verified.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, scala
- Domain
- machine-learning
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 30/100