gpt4 book ai didi

python - Tensorflow 中的 Triplet、Siamese 和 Softmax

转载 作者:行者123 更新时间:2023-11-28 18:24:29 26 4
gpt4 key购买 nike

我想比较以下类型的 CNN 对于两个不同的大型图像数据集的性能。目标是测量两幅图像之间的相似性,这两幅图像在训练期间都没有出现过。我可以使用 2 个 GPU 和 16 个 CPU 内核。

  1. Triplet CNN(输入:三张图像,标签:按位置编码)
  2. Siamese CNN(输入:两张图片,标签:一个二进制标签)
  3. 用于特征学习的 Softmax CNN(输入:一张图像,标签:一个整数标签)

对于 Softmax,我可以以二进制格式存储数据(顺序存储标签和图像)。然后使用 TensorFlow 阅读器阅读它。

要对 Triplet 和 Siamese Networks 使用相同的方法,我必须提前生成组合并将它们存储到磁盘。这将导致创建文件所需的时间和磁盘空间的大量开销。如何即时完成?

另一种简单的方法是使用 feed_dict,但这会很慢。因此,如果可以并行运行我用于 feed_dict 的相同函数并将结果转换为 TensorFlow 张量作为最后一步,那么问题就会得到解决。但据我所知,这样的转换不存在,因此必须首先使用 TensorFlow 阅读器读取文件,然后使用 TensorFlow 方法完成整个过程。这是正确的吗?

最佳答案

简短的回答是使用 numpy 在线创建对/三元组,无需将其转换为张量,因为 feed_dict 参数已经接受 numpy 数组。

最好的方法是使用 tf.nn.embedding_lookup() 结合 itertoolsitertools 来创建对的索引,但对于一个天真的非-最佳解决方案您可以查看 my github repository 中的 gen_batches_siamese.py 脚本.我在哪里重新实现了 caffe siamese 示例。显然它会比使用 tensorflow 队列效率低,但我的建议是在使用纯 tensorflow 解决方案之前先尝试这个基线。

关于python - Tensorflow 中的 Triplet、Siamese 和 Softmax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42399866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com