tensorflow / tensorflow/java

Exception in thread "main" org.tensorflow.exceptions.TensorFlowException: No gradient defined for op: SelectV2.

Abierto
#437 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Java
Estrellas
928
Forks
227
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Comienza con el código proporcionado de clipByNormTF y callOne y el stack trace a través de Graph.addGradients, Gradients.create y Ops.gradients. Reproduce el fallo de SelectV2 con tensorflow-java 0.5.0-SNAPSHOT, Scala 2.12.11 y JDK 15; se considera terminado cuando se haya verificado el comportamiento del gradiente o una solución adecuada.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
java, scala
Área
machine-learning
Tipo de issue
Error
Dificultad
4/5
Tiempo estimado
3-5 días
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
30/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.