如何在 Tensorflow 中使用没有 类 的预训练模型?

How to use pre-trained models without classes in Tensorflow?

我正在尝试使用 tf.keras.applications.ResNet50 等预训练网络,但我有两个问题:

我只想获取网络末端的顶部嵌入层,因为我不想做任何图像分类。因此,我认为不需要 类 号码。

我的目标是用 resnet 网络的输出制作一个三元组损失网络。

非常感谢!

  • ResNet50 有一个参数 include_top 正是为了这个目的——将它设置为 False 以跳过最后一个完全连接的层。 (然后输出一个长度为2048的特征向量)。
  • 减小图像大小的最佳方法是对图像重新采样,例如使用专用函数 tf.image.resample_images.

    • 此外,我一开始没有注意到您的输入图像只有三个通道,谢谢@Daniel。我建议您使用 tf.tile:

      在 GPU 上构建 3 通道灰度图像(而不是在使用 numpy 的主机上)以避免将数据传输到 GPU 内存的三倍
      im3 = tf.tile(im, (1, 1, 1, 3))
      

作为对其他答案的补充。您还需要使您的图像具有三个通道,虽然从技术上讲这不是 Resnet 的最佳输入,但它是最简单的解决方案(如果您访问源代码并自己更改输入形状,则更改 Resnet 模型也是一个选项)。

使用numpy打包三个通道的图片:

images3ch = np.concatenate([images,images,images], axis=-1)