python - Tensorflow 中的 Triplet、Siamese 和 Softmax

标签 python machine-learning tensorflow

我想比较以下类型的 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/

相关文章:

image - 卷积神经网络图像输入大小

Tensorflow session 和图形上下文

tensorflow - DMA 和 tensorflow 的打印是什么意思?是否可以设置它们?

python - 如何使用 tensorflow 2.0 计算中位数?

带有重音符号的 Python 转储 json

python - 使用 python-boto 启动 Openstack 实例

Python:如何用第二个数字减去列表中的第一个数字

python - 尝试设置对象属性时“str”对象不可调用

python - Keras 中的自定义损失函数,以屏蔽数组作为输入

r - 如何将RFE选定的变量插入到r中的机器学习模型中?