我正在进行图像检索任务(不涉及面孔),我正在尝试的一件事就是在CNN模型中换出softmax图层并使用LMNN分类器。为此,我对模型进行了微调,然后在完全连接的层上提取了特征。我现在有大约3000张图片。完全连接的层提供4096昏暗的矢量。所以我的最终矢量是一个3000x4096矢量,有大约700个类(每个类有2个以上的图像)。我相信这是一个非常大的尺寸尺寸,LMNN算法将永远采取(它确实需要永远)。 如何减少尺寸?我尝试了PCA,但没有过多地压缩尺寸(降至3000x3000)。我在想256/512/1024昏暗的矢量应该能够提供帮助。如果我要添加另一个图层来减小尺寸,请说一个新的完全连接的图层我是否需要再次微调我的网络?关于如何做到这一点的输入将是伟大的! 我目前还在尝试扩充我的数据以获得每个类更多的图像并增加我的数据集的大小。
谢谢。
答案 0 :(得分:2)
PCA应该让您进一步减少数据 - 您应该能够指定所需的维度 - 请参阅the wikipedia article。
与PCA一样,您可以尝试t-distributed stochastic neighbor embedding(t-SNE)。我非常喜欢Wattenberg, et al.'s article - 如果你想深入了解它是如何工作的以及一些陷阱,那么值得一读。
在神经网络中,降低维数的标准方法是添加更多更小的层,如您所建议的那样。因为他们只能在训练期间学习,所以你需要重新进行微调。理想情况下,如果您对模型结构进行更改,则会重新运行整个培训过程,但如果您有足够的数据,则可能仍然可以。
要在TensorFlow中添加新图层,您需要添加一个完全连接的图层,其输入是3000个元素图层的输出,输出大小是所需的元素数量。如果您想逐渐下降(例如3000 - > 1024 - > 512),您可以重复此操作。然后,您将再次进行训练(或微调)。
最后,我做了一个快速搜索,发现这篇论文声称通过随机抽样支持LMNN而不是大型数据集。您可以使用它来节省一些令人头疼的问题:Fast LMNN Algorithm through Random Sampling