如何将 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。
我目前需要做一些与 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。