如何将 2 张图像发送到 Tensorflow 中的 1 个网络并计算对比损失?

How to send 2 images into 1 network in Tensorflow and calculate contrastive loss?

我目前需要做一些与 https://github.com/tensorflow/tensorflow/issues/6776

非常相似的事情

例如,我有一批图像 A、B、C ....,我将为它们生成一个增强批次作为 a、b、c .....

然后我会将 A(B 或 C)发送到 Inception 网络以获得输出张量 "output_1",我需要将 a(b 或 c)发送到同一个 Inception 网络以获得输出张量 "output_2",我将使用 ||"output1- output2"||作为对比损失。

此时此刻,我不确定人们通常如何在 Tensorflow 中处理此类操作。我在网上搜索并没有找到答案(虽然我猜它与网络"reuse"有关)。

这是我的源代码的样子(我很抱歉,因为我可以在这里粘贴一个简化版本):

class MyModel:
    ......
    def define_my_net(self):
        self.inputs_from_bloader = tf.placeholder(...)
        self.input = self.inputs_from_bloader
        self.output = slim.conv2d(self.input,...)
    ......
    def update(sess, inputs):
        feed_dict = utility.build_feed_dict(self.inputs_from_bloader, inputs)
        sess.run([my_op_list], feed_dict = feed_dict)
     ......

def train():
    data = importlib.import_module('some.datasets.reader')
    data = data.DataReader()
    model = importlib.import_module('MyModel')
    model.MyModel()
    model.define_my_net()      ### This is where network is defined
    batch = data.get_batch()    ### This is where A,B,C and a,b,c are generated.  
    model.update(sess, batch)    ### This is where training is done

我想我可以从 "batch=data.get_batch" 输出像 AaBbCc 这样的批处理或将其更改为 "batch1, batch2 = data.get_batch",但我不知道如何将 batch1 和 batch2 传递到定义的网络中,因为它可能涉及对框架的一些架构修改。

如果你觉得上面的源代码太乱,再举个简单的例子也不胜感激。

您可以实例化您的网络两次。这些实例化通常称为"towers"。两座塔将使用相同的变量,但具有不同的输入和操作。

根据你使用的高级API,你应该寻找一些控制变量reuse的标志,这样当你建造第二座塔时,它不会创建新的变量。例如,在此处搜索 reuse https://www.tensorflow.org/guide/variables