如何在Tensorflow中将两张图片发送到一个网络并计算对比损失?

我目前需要做一些与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中处理这种操作的。我在网上搜索了,没有找到答案(虽然我猜这可能与网络的“重用”有关)。

以下是我的源代码的简化版本(我很抱歉只能在这里粘贴一个简化版本):

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()      ### 这是定义网络的地方    batch = data.get_batch()    ### 这是生成A、B、C和a、b、c的地方      model.update(sess, batch)    ### 这是进行训练的地方

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

如果你觉得上面的源代码太混乱,任何更简单的例子也将受到欢迎。


回答:

你可以实例化你的网络两次。这些实例通常被称为“塔”。两个塔将使用相同的变量,但有不同的输入和操作。

根据你使用的高等级API,你应该寻找一些控制变量reuse的标志,以便在构建你的第二个塔时,不会创建新的变量。例如,在这里搜索reuse https://www.tensorflow.org/guide/variables

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注