在 Tensorflow 中实现暹罗网络

2024-01-26

我想实现一个连体卷积神经网络,其中两个图像在卷积层中共享权重,然后在通过全连接层之前进行连接。我尝试过一种实现,但它似乎是一个“黑客”解决方案。特别是,我已将张量上的操作定义为简单的 Python 函数,并且我不确定这是否允许。

这是我尝试过的代码:

images = tf.placeholder(tf.float32, shape=[None, 64 * 64])
# Convolutional layers
# ...
# ...
# Results in pool3_flat, which is the flattened output of the third convolutional layer
pool3_flat = tf.reshape(pool3, [-1, 8 * 8 * 128])

# Now, merge the image pairs, where each pair is composed of adjacent images in the batch, with a stride of 2
def merge_pairs():
  # Create a tensor to store the merged image pairs
  # The batch size is 128, therefore there will be 64 pairs (64 in the first dimension of this tensor)
  merged_pairs = tf.Variable(tf.zeros([64, 8 * 8 * 128]))
  # Split the images into 64 pairs
  pairs = tf.split(0, 64, pool3_flat)
  # For each pair, concatenate the two images across dimension 1, and set this tensor in the appropriate row of merged_pairs
  for pair_num, pair in enumerate(pairs):
      merged_pair = tf.concat(1, pair)
      merged_pairs[pair_num] = merged_pair
  return merged_pairs


# Proceed with operations on the merged_pair tensor, as if the batch size is 64
fc4 = tf.matmul(merge_pairs(), weights4)
# ...
# ...

虽然它可以编译并且运行良好,但结果并不真正符合预期。所以,我想知道是否有更好的方法来使用 TensorFlow 中的内置操作来实现 Siamese 网络?


您可以利用tf.pack https://www.tensorflow.org/versions/r0.7/api_docs/python/array_ops.html#pack and tf.解包 https://www.tensorflow.org/versions/r0.7/api_docs/python/array_ops.html#unpack,有点像:

pairs = tf.pack(tf.split(0, 64, pool3_flat))
left, right = tf.unpack(tf.transpose(pairs, perm=[1,0,2]))
merged_pairs = tf.concat(1, [left, right])

一种更简洁的方法是从一开始就将各对分开,以便您可以定义两个网络并在每个网络中使用相同的可训练变量。

你会得到类似的东西(跳过卷积层):

image_left = tf.placeholder(tf.float32, shape=[None, 64, 64, 1])
image_right = tf.placeholder(tf.float32, shape=[None, 64, 64, 1])

pool_left = tf.nn.max_pool(image_left, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')
pool_right = tf.nn.max_pool(image_left, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')

pool_flat_left = tf.reshape(pool_left, [-1, 32*32])
pool_flat_right = tf.reshape(pool_right, [-1, 32*32])

然后简单地在维度 1 中左右连接。

concat_layer = tf.concat(1, [pool_flat_left, pool_flat_right])

这样您也可以稍后改变批量大小。 确保每个尺寸(左和右)使用相同的权重和偏差。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Tensorflow 中实现暹罗网络 的相关文章

随机推荐

  • 如何在 Bucardo Postgresql multi master 中处理序列

    我们正在三个不同的 Postgresql 服务器上设置一个数据库 将来可能会在更多服务器上 目前使用 bucardo 多主组同步所有表 我们不同步序列 我们尝试过 我们注意到当同时写入发生在不同服务器上的同一个表中时 布卡多会让我们丢失数据
  • 用户是否已经“喜欢”Facebook 帖子

    我已经尝试解决这个问题有一段时间了 并且慢慢意识到我拨打的电话并不是我想要的电话 我目前正在获取用户新闻源并添加一个 喜欢 按钮 但如果他们已经喜欢它 则应该说 不喜欢 我打电话给 me likes 并获得了一些数据 我通过比较新闻源中的每
  • 如何避免单元测试中的Thread.sleep?

    假设我有以下应该测试的方法 Autowired private RoutingService routingservice public void methodToBeTested Object objectToRoute initiali
  • WPF 图像源与 StringFormat 绑定

    我是 WPF 和 MVVM 的新手 本周开始尝试 并尝试在运行时绑定图像资源 我尝试显示的项目包含一个枚举属性 该属性指示项目的类型或状态 public class TraceEvent
  • 如何从服务器执行 GraphQL 查询

    我正在使用 graphql express 创建一个端点 我可以在其中执行 graphql 查询 虽然我将 Sequelize 与 SQL 数据库一起使用 但直接从 graphql 之外的服务器使用它感觉不对resolve功能 如何从定义它
  • VB 2010 - 具有标签名称值的变量

    我正在使用 VB 2010 Express 并且我的表单中有一个名为 lblTitle 的标签 下一个代码不起作用 我知道 但我该如何做这样的事情呢 Dim bla As String bla lblTitle bla Text Hello
  • 检查 Android 中的 VPN 连接是否处于活动状态?

    我的非 root Android 4 4 设备上有一个第三方 VPN 应用程序 并且想要编写一个后台服务来监视 VPN 连接并在 VPN 连接已断开时提醒用户 有没有办法做到这一点 我找不到任何使用 VPNService API 的方法 感
  • 在 Apache Camel 应用程序中,单元测试如何注入模拟端点来代替真实端点?

    我正在实施一个消息翻译模式 http camel apache org message translator html使用 Apache Camel 使用来自 RESTful 端点的消息并将它们发送到 AMQP 端点 封闭的应用程序基于 S
  • “showkeyboard”事件来自哪里?

    我正在使用 PhoneGap 我需要在 Android 手机上捕获 键盘正在显示 事件 我发现一些线程说要使用 showkeyboard 事件 例如这个 显示隐藏键盘在 Android PhoneGap 中无法正常工作 https stac
  • 摆脱签名 Java Applet 安全对话框

    这可能是一个荒谬的问题 我有一个签名的小程序 它只能在客户端的计算机文件系统上读写 我可以从像 Verysign 或 Thawte 等知名机构购买数字证书来签署小程序 如果我使用上述权限签署小程序 我可以摆脱 Java 插件持有的这种不明确
  • 使用 python3 中现有的超类实例初始化子类

    我正在用 python 编写我自己版本的套接字类 我想知道是否有办法not使用它初始化子类 init 方法 而是使用初始化它套接字类的现有实例 基本上 我想做的是从套接字类继承 并覆盖accept 方法返回我自己的类的对象而不是套接字类 为
  • 使用ansible下载大文件

    我想用 ansible 下载一个大文件 10 GB 根据连接情况 这需要半个小时 并且经常因 unarchive 或 get url 失败 如何在出现错误时恢复并取得某种进展 从而理想地实现这一目标 我认为没有任何方法可以在 Ansible
  • “useLegacyV2RuntimeActivationPolicy”在 .NET 4 配置中起什么作用?

    在将使用 SlimDX 因此具有非托管代码 的项目转换为 NET 4 0 时 我遇到了以下错误 混合模式程序集是针对运行时版本 v2 0 50727 构建的 如果没有附加配置信息 则无法在 4 0 运行时中加载 谷歌搜索给了我解决方案 即将
  • SQL 查询具有自定义文件扩展名的平面文件时出错

    我正在寻找一种查询平面文件的方法custom直接通过 SQL 扩展文件 通常使用类似的东西 SELECT FROM Text DATABASE C Flatfiles S7121070 ppis csv 它与 txt csv 和 tab 配
  • 使用 PEG.js 解析缩进级别

    我基本上有同样的问题Python 风格缩进的 PEG https stackoverflow com questions 4205442 peg for python style indentation 但我想得到更多关于这个答案 http
  • 如何检查变量是否在 Octave 中定义?

    当编写加载数据的脚本时 每次等待它加载都是浪费时间 如何检查变量是否已定义 您可以使用existOctave 中的函数来完成这项工作 它可用于检查给定名称作为变量 内置函数 文件或目录是否存在 在您的情况下 要检查变量是否存在 您可以使用如
  • C ++在for循环中初始化2个不同的迭代器[重复]

    这个问题在这里已经有答案了 可能的重复 我可以在 for 循环的初始化中声明不同类型的变量吗 https stackoverflow com questions 8644707 can i declare variables of diff
  • 如何覆盖 javascript 本机对象的内置方法

    假设我们有窗口对象的警报方法 我想用漂亮的警报框来增强它 另外 我想保存现有的警报方法 以便我们可以在应用程序结束后切换回来 类似这样的东西 但它在 Firefox 控制台中抛出错误 window prototype alert funct
  • pip 可以与 Visual Studio 中的 Python 工具一起使用吗?

    我正在与一些同学合作构建一个 python 应用程序 并希望使用 Visual Studio 智能感知的 训练轮 他们在 mac 和 linux 上使用 python 所以理想情况下我们的源代码控制存储库将仅包含 py我们编写的源文件 以及
  • 在 Tensorflow 中实现暹罗网络

    我想实现一个连体卷积神经网络 其中两个图像在卷积层中共享权重 然后在通过全连接层之前进行连接 我尝试过一种实现 但它似乎是一个 黑客 解决方案 特别是 我已将张量上的操作定义为简单的 Python 函数 并且我不确定这是否允许 这是我尝试过