首页 文章

在TensorFlow Lite中运行Keras模型时的不同预测

提问于
浏览
1

尝试使用预训练的Keras图像分类器测试TensorFlow Lite,在将H5转换为tflite格式后,我的预测会变得更糟 . 这是预期的行为(例如权重量化),错误还是我在使用解释器时忘记了什么?

示例

from imagesoup import ImageSoup
from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input, decode_predictions
from tensorflow.keras.preprocessing.image import load_img, img_to_array

# Load an example image.
ImageSoup().search('terrier', n_images=1)[0].to_file('image.jpg')
i = load_img('image.jpg', target_size=(224, 224))
x = img_to_array(i)
x = x[None, ...]
x = preprocess_input(x)

# Classify image with Keras.
model = ResNet50()
y = model.predict(x)
print("Keras:", decode_predictions(y))

# Convert Keras model to TensorFlow Lite.
model.save(f'{model.name}.h5')
converter = tf.contrib.lite.TocoConverter.from_keras_model_file
tflite_model = converter(f'{model.name}.h5').convert()
with open(f'{model.name}.tflite', 'wb') as f:
    f.write(tflite_model)

# Classify image with TensorFlow Lite.
f = tf.contrib.lite.Interpreter(f'{model.name}.tflite')
f.allocate_tensors()
i = f.get_input_details()[0]
o = f.get_output_details()[0]
f.set_tensor(i['index'], x)
f.invoke()
y = f.get_tensor(o['index'])
print("TensorFlow Lite:", decode_predictions(y))

Keras:[[('n02098105','soft-coated_wheaten_terrier',0.70274395),('n02091635','otterhound',0.0885325),('n02090721','Irish_wolfhound',0.06422518),('n02093991','Irish_terrier ',0.040120784),('n02111500','Great_Pyrenees',0.03408164)]] TensorFlow Lite:[[('n07753275','pineapple',0.94529104),('n03379051','football_helmet',0.033994876),('n03891332 ','parking_meter',0.011431991),('n04522168','vase',0.0029440755),('n02094114','Norfolk_terrier',0.0022089847)]]

2 回答

  • 0

    TensorFlow 1.10中的 from_keras_model_file 中有一个错误 . 它是在this commit的8月9日夜间版本中修复的 .

    每晚都可以通过 pip install tf-nightly 安装 . 此外,它将在TensorFlow 1.11中修复 .

  • 0

    您是否确保将学习阶段设置为0以避免在预测阶段中出现Dropout和其他非确定性层?

    https://www.tensorflow.org/api_docs/python/tf/keras/backend/learning_phase

相关问题