如何计算tf.py_func ops中的渐变?

时间:2017-10-04 08:40:44

标签: tensorflow

我有一个用于计算矩形之间交叉点的python程序,如下所示:

def clip(subjectPolygon, clipPolygon):
   def inside(p):
      return(cp2[0]-cp1[0])*(p[1]-cp1[1]) > (cp2[1]-cp1[1])*(p[0]-cp1[0])

   def computeIntersection():
      dc = [ cp1[0] - cp2[0], cp1[1] - cp2[1] ]
      dp = [ s[0] - e[0], s[1] - e[1] ]
      n1 = cp1[0] * cp2[1] - cp1[1] * cp2[0]
      n2 = s[0] * e[1] - s[1] * e[0] 
      n3 = 1.0 / (dc[0] * dp[1] - dc[1] * dp[0])
      return [(n1*dp[0] - n2*dc[0]) * n3, (n1*dp[1] - n2*dc[1]) * n3]

   outputList = subjectPolygon
   cp1 = clipPolygon[-1]

   for clipVertex in clipPolygon:
      cp2 = clipVertex
      inputList = outputList
      outputList = []
      s = inputList[-1]

      for subjectVertex in inputList:
         e = subjectVertex
         if inside(e):
            if not inside(s):
               outputList.append(computeIntersection())
            outputList.append(e)
         elif inside(s):
            outputList.append(computeIntersection())
         s = e
      cp1 = cp2
   return(outputList)

def PolygonArea(corners):
    n = len(corners) # of corners
    area = 0.0
    for i in range(n):
        j = (i + 1) % n
        area += corners[i][0] * corners[j][1]
        area -= corners[j][0] * corners[i][1]
    area = abs(area) / 2.0
    return area

我在网络中转发图像,作为输出,它给出了一个矩形。从这个预测的矩形和地面实况矩形(标记数据),我在tf.py_func的帮助下使用上面的程序来计算联合的交集。我使用 IoU 来构造损失函数,然后在优化器中输入。但是,通过这样做我得到错误:

  

ValueError:没有为任何变量提供渐变,请检查图形   对于不支持渐变的ops,变量之间......

它给出了我所有变量的列表。

有没有人知道如何解决问题;也许通过在TF中编写函数或使tf.py_func计算梯度?<​​/ p>

如果感兴趣,这是file,然后导航存储库。

1 个答案:

答案 0 :(得分:0)

您需要自己为py_func定义渐变,有关示例,请参阅this