如何在张量流中实现过滤器?
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 并且我必须在我的输入上应用该模型两次:
先计算loss,验证是否大于0
仅次于 运行 优化器:这是出错的时候。前面说了,我用的是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才知道的。
我有一个以三个图像作为输入的卷积神经网络:
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 并且我必须在我的输入上应用该模型两次:
先计算loss,验证是否大于0
仅次于 运行 优化器:这是出错的时候。前面说了,我用的是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才知道的。