如何在张量流中实现过滤器?

How to implement a filter in tensorflow?

我有一个以三个图像作为输入的卷积神经网络:

x_anchor = tf.placeholder('float', [None, 4900], name='x_anchor')
x_positive = tf.placeholder('float', [None, 4900], name='x_positive')
x_negative = tf.placeholder('float', [None, 4900], name='x_negative')

train 函数中,我用实际图像填充占位符:

 input1, input2, input3 = training.next_batch(start,end)
    ....some other operations...
loss_value  = sess.run([cost], feed_dict={x_anchor:input1, x_positive:input2, x_negative:input3})

我在这三个输入上使用三元组损失函数(实际上是上面的 cost 变量):

def triplet_loss(d_pos, d_neg):

    margin = 0.2

    loss = tf.reduce_mean(tf.maximum(0., margin + d_pos - d_neg))

    return loss

如何过滤损失,以便仅使用 loss_value > 0 的图像来训练网络?

我怎样才能实现类似的东西:

if(loss_value for input1, input2, input3 > 0)
  use inputs to train network
else
 do nothing/try another input

目前我尝试过的:

我一张一张地拍摄图像(input1[0]、input2[0]、input3[0]),计算损失,如果损失为正,我将计算(并应用)梯度。但问题是我在我的模型中使用 dropout 并且我必须在我的输入上应用该模型两次:

  1. 先计算loss,验证是否大于0

  2. 仅次于 运行 优化器:这是出错的时候。前面说了,我用的是dropout,所以模型在我输入上的结果是不一样的,所以新的loss有时会是0,即使在step 1确定的loss大于0。

我也尝试使用 tf.py_func 但卡住了。

有一个名为“AutoGraph”的新 TensorFlow 功能。 AutoGraph 将 Python 代码(包括控制流、print() 和其他 Python 原生功能)转换为纯 TensorFlow 图代码。例如:

@autograph.convert()
def huber_loss(a):
  if tf.abs(a) <= delta:
    loss = a * a / 2
  else:
    loss = delta * (tf.abs(a) - delta / 2)
  return loss

由于装饰器,在执行时变成了这段代码:

def tf__huber_loss(a):
  with tf.name_scope('huber_loss'):
    def if_true():
      with tf.name_scope('if_true'):
        loss = a * a / 2
        return loss,
    def if_false():
      with tf.name_scope('if_false'):
        loss = delta * (tf.abs(a) - delta / 2)
        return loss,
    loss = ag__.utils.run_cond(tf.less_equal(tf.abs(a), delta), if_true,
        if_false)
    return loss

你想做的事情可以在使用 tf.cond() 之前实现。

我是通过这个mediumpost才知道的。