如何在 Tensorflow 中使用没有 类 的预训练模型?
How to use pre-trained models without classes in Tensorflow?
我正在尝试使用 tf.keras.applications.ResNet50
等预训练网络,但我有两个问题:
我只想获取网络末端的顶部嵌入层,因为我不想做任何图像分类。因此,我认为不需要 类 号码。
tf.keras.applications.ResNet50
采用默认参数 'classes=1000'
- 有什么方法可以省略这个参数吗?
我输入的图片是 128*128*1
像素而不是 224*224*3
- 修复输入数据形状的最佳方法是什么?
我的目标是用 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)
我正在尝试使用 tf.keras.applications.ResNet50
等预训练网络,但我有两个问题:
我只想获取网络末端的顶部嵌入层,因为我不想做任何图像分类。因此,我认为不需要 类 号码。
tf.keras.applications.ResNet50
采用默认参数'classes=1000'
- 有什么方法可以省略这个参数吗?
我输入的图片是
128*128*1
像素而不是224*224*3
- 修复输入数据形状的最佳方法是什么?
我的目标是用 resnet
网络的输出制作一个三元组损失网络。
非常感谢!
ResNet50
有一个参数include_top
正是为了这个目的——将它设置为False
以跳过最后一个完全连接的层。 (然后输出一个长度为2048的特征向量)。减小图像大小的最佳方法是对图像重新采样,例如使用专用函数
tf.image.resample_images
.此外,我一开始没有注意到您的输入图像只有三个通道,谢谢@Daniel。我建议您使用
在 GPU 上构建 3 通道灰度图像(而不是在使用 numpy 的主机上)以避免将数据传输到 GPU 内存的三倍tf.tile
:im3 = tf.tile(im, (1, 1, 1, 3))
作为对其他答案的补充。您还需要使您的图像具有三个通道,虽然从技术上讲这不是 Resnet 的最佳输入,但它是最简单的解决方案(如果您访问源代码并自己更改输入形状,则更改 Resnet 模型也是一个选项)。
使用numpy打包三个通道的图片:
images3ch = np.concatenate([images,images,images], axis=-1)