Tensorflow中的Triplet,Siamese和Softmax

时间:2017-02-22 18:50:25

标签: python machine-learning tensorflow

我想比较两种不同大型图像数据集的以下CNN类型的性能。目标是测量两个图像之间的相似性,这两个图像在训练期间都没有看到。我可以访问2个GPU和16个CPU核心。

  1. 三联CNN(输入:三张图像,标签:编码到位)
  2. Siamese CNN(输入:两张图片,标签:一个二进制标签)
  3. 用于特征学习的Softmax CNN(输入:一个图像,标签:一个整数标签)
  4. 对于Softmax,我可以以二进制格式存储数据(顺序存储标签和图像)。然后用TensorFlow阅读器阅读。

    要对Triplet和Siamese Networks使用相同的方法,我必须提前生成组合并将它们存储到磁盘。这将导致创建文件和磁盘空间所需的时间都很大。怎么能在飞行中完成?

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

1 个答案:

答案 0 :(得分:1)

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

最好的方法是使用现有批次中的tf.nn.embedding_lookup()itertools组合来创建对的索引,但对于一个天真的非最佳解决方案,您可以查看gen_batches_siamese.py脚本在my github repository。我重新实现了咖啡暹罗的例子。 显然它比使用tensorflow队列效率低,但我的建议是在转到纯张量流解决方案之前先尝试这个基线。