Keras和TensorFlow Hub版本的MobileNetV2之间的区别

冰雪奇缘

我正在研究一种迁移学习方法,使用keras.applicationsTensorFlow Hub上的MobileNetV2和TensorFlow Hub上可用的MobileNetV2时得到了截然不同的结果这对我来说似乎很奇怪,因为这两个版本都在此处此处声明从同一检查点mobilenet_v2_1.0_224提取其权重这样可以再现差异,您可以在这里找到Colab Notebook

!pip install tensorflow-gpu==2.1.0
import tensorflow as tf
import numpy as np
import tensorflow_hub as hub
from tensorflow.keras.applications.mobilenet_v2 import MobileNetV2

def create_model_keras():
  image_input = tf.keras.Input(shape=(224, 224, 3))
  out = MobileNetV2(input_shape=(224, 224, 3),
                  include_top=True)(image_input)
  model = tf.keras.models.Model(inputs=image_input, outputs=out)
  model.compile(optimizer='adam', loss=["categorical_crossentropy"])
  return model

def create_model_tf():
  image_input = tf.keras.Input(shape=(224, 224 ,3))
  out = hub.KerasLayer("https://tfhub.dev/google/tf2-preview/mobilenet_v2/classification/4",
                      input_shape=(224, 224, 3))(image_input)
  model = tf.keras.models.Model(inputs=image_input, outputs=out)
  model.compile(optimizer='adam', loss=["categorical_crossentropy"])
  return model

当我尝试预测随机批次时,结果不相等:

keras_model = create_model_keras()
tf_model = create_model_tf()
np.random.seed(42)
data = np.random.rand(32,224,224,3)
out_keras = keras_model.predict_on_batch(data)
out_tf = tf_model.predict_on_batch(data)
np.array_equal(out_keras, out_tf)

版本的输出keras.applications总和为1,但TensorFlow Hub的版本不输出。这两个版本的形状也不同:TensorFlow Hub具有1001个标签,keras.applications具有1000个标签

np.sum(out_keras[0]), np.sum(out_tf[0])

版画 (1.0000001, -14.166359)

这些差异的原因是什么?我想念什么吗?

编辑18.02.2020

正如Szymon Maszke指出的那样,TFHub版本返回logits。这就是为什么我向以下添加一个Softmax层的原因create_model_tfout = tf.keras.layers.Softmax()(x)

arnoegw提到,TfHub版本需要将图像标准化为[0,1],而keras版本需要将图像标准化为[-1,1]。当我在测试图像上使用以下预处理时:

from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
img = tf.keras.preprocessing.image.load_img("/content/panda.jpeg", target_size=(224,224))
img = tf.keras.preprocessing.image.img_to_array(img)
img = preprocess_input(img)
img = tf.io.read_file("/content/panda.jpeg")
img = tf.image.decode_jpeg(img)
img = tf.image.convert_image_dtype(img, tf.float32)
img = tf.image.resize(img, (224,224))

两者都能正确预测相同的标签,并且满足以下条件: np.allclose(out_keras, out_tf[:,1:], rtol=0.8)

编辑2 18.02.2020在我写这之前,不可能将格式互相转换。这是由错误引起的。

有一些已记录的差异:

  • 就像Szymon所说的那样,TF Hub版本返回logits(在softmax函数将其转化为概率之前),这是一种常见的做法,因为可以从logit上以更大的数值稳定性计算出交叉熵损失。

  • TF Hub模型假定float32输入的范围为[0,1],tf.image.decode_jpeg(...)后面是tf.image.convert_image_dtype(..., tf.float32)Keras代码使用特定于模型的范围(可能为[-1,+ 1])。

  • TF Hub模型在返回其所有1001输出类时更完整地反映了原始SLIM检查点。如从文档链接的ImageNetLabels.txt中所述,添加的类0是“背景”(又名“材料”)。这就是对象检测用来指示图像背景的对象,而不是任何已知类别的对象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用CPU的“ Keras后端+ Tensorflow”和“来自Tensorflow的Keras”之间有什么区别(在Tensorflow 2.x中)

来自分类Dev

Conda,Tensorflow和Keras版本不匹配问题

来自分类Dev

“导入 keras”和“导入 tensorflow.keras”有什么区别

来自分类Dev

TensorFlow中的feature_column.embedding_column和keras.layers.Embedding之间的区别

来自分类Dev

您能解释keras模型中的tensorflow加载和hdf5加载之间的区别吗

来自分类Dev

python中keras和tensorflow.keras之间的意外性能差异

来自分类Dev

如何将特征提取器网络(例如 mobilenetv2)添加到 tensorflow 的对象检测 API

来自分类Dev

TensorFlow v1和v2中Keras的ZeroPadding2D的区别?

来自分类Dev

RStudio Server Pro版本1.2.5033-1上TensorFlow(和Keras)的解决方法

来自分类Dev

Keras的BatchNormalization和PyTorch的BatchNorm2d之间的区别?

来自分类Dev

Identity下版本和版本之间的区别

来自分类Dev

Identity下版本和版本之间的区别

来自分类Dev

如何在具有tensorflow2和keras的多GPU上训练模型?

来自分类Dev

TensorFlow V2.x和tf.keras的所有随机种子是什么?

来自分类Dev

keras Tensorflow 2中GRU和LSTM层中的num_units-混淆含义

来自分类Dev

mysql和mysqldump之间版本错误的区别?

来自分类Dev

Windows 10中keras-gpu,tensorflow,cudatoolkit和cuDNN之间的最新版本兼容性是什么?

来自分类Dev

TensorFlow 2-tf.keras:如何使用tf.data API和TFRecords训练像MTCNN这样的tf.keras多任务网络

来自分类Dev

Tensorflow和Keras:LSTM在seq2seq问题上表现不佳,解决方案清晰

来自分类Dev

Redmine 3.x和2.x版本之间有什么区别

来自分类Dev

错误“ Keras需要TensorFlow 2.2或更高版本”

来自分类Dev

Tensorflow和Keras预测阈值

来自分类Dev

tensorflow_hub 和 tensorflow 1.10 的问题

来自分类Dev

每日版本和普通版本的VLC之间的区别

来自分类Dev

Tensorflow/Keras - 如何公开类别之间的关系?

来自分类Dev

Keras 和 tensorflow 的串联和拟合误差

来自分类Dev

对于tensorflow 2.x,如何在CPU和GPU版本之间切换?

来自分类Dev

在Tensorflow中,变量和张量之间有什么区别?

来自分类Dev

`[[[$ a -lt 2]]`和`((($ a <2))`之间的区别

Related 相关文章

  1. 1

    使用CPU的“ Keras后端+ Tensorflow”和“来自Tensorflow的Keras”之间有什么区别(在Tensorflow 2.x中)

  2. 2

    Conda,Tensorflow和Keras版本不匹配问题

  3. 3

    “导入 keras”和“导入 tensorflow.keras”有什么区别

  4. 4

    TensorFlow中的feature_column.embedding_column和keras.layers.Embedding之间的区别

  5. 5

    您能解释keras模型中的tensorflow加载和hdf5加载之间的区别吗

  6. 6

    python中keras和tensorflow.keras之间的意外性能差异

  7. 7

    如何将特征提取器网络(例如 mobilenetv2)添加到 tensorflow 的对象检测 API

  8. 8

    TensorFlow v1和v2中Keras的ZeroPadding2D的区别?

  9. 9

    RStudio Server Pro版本1.2.5033-1上TensorFlow(和Keras)的解决方法

  10. 10

    Keras的BatchNormalization和PyTorch的BatchNorm2d之间的区别?

  11. 11

    Identity下版本和版本之间的区别

  12. 12

    Identity下版本和版本之间的区别

  13. 13

    如何在具有tensorflow2和keras的多GPU上训练模型?

  14. 14

    TensorFlow V2.x和tf.keras的所有随机种子是什么?

  15. 15

    keras Tensorflow 2中GRU和LSTM层中的num_units-混淆含义

  16. 16

    mysql和mysqldump之间版本错误的区别?

  17. 17

    Windows 10中keras-gpu,tensorflow,cudatoolkit和cuDNN之间的最新版本兼容性是什么?

  18. 18

    TensorFlow 2-tf.keras:如何使用tf.data API和TFRecords训练像MTCNN这样的tf.keras多任务网络

  19. 19

    Tensorflow和Keras:LSTM在seq2seq问题上表现不佳,解决方案清晰

  20. 20

    Redmine 3.x和2.x版本之间有什么区别

  21. 21

    错误“ Keras需要TensorFlow 2.2或更高版本”

  22. 22

    Tensorflow和Keras预测阈值

  23. 23

    tensorflow_hub 和 tensorflow 1.10 的问题

  24. 24

    每日版本和普通版本的VLC之间的区别

  25. 25

    Tensorflow/Keras - 如何公开类别之间的关系?

  26. 26

    Keras 和 tensorflow 的串联和拟合误差

  27. 27

    对于tensorflow 2.x,如何在CPU和GPU版本之间切换?

  28. 28

    在Tensorflow中,变量和张量之间有什么区别?

  29. 29

    `[[[$ a -lt 2]]`和`((($ a <2))`之间的区别

热门标签

归档