tensorflow lite 推理 returns 所有 nan

tensorflow lite inference returns all nan

所以,我决定试用 tensorflow lite。我创建了我的张量流模型:

import numpy as np
import tensorflow as tf
from matplotlib import pyplot as plt
tf.__version__

输出:

'2.3.0'

正在加载数据集

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

建筑模型

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

predictions = model(x_train[:1]).numpy()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])
history = model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

这给出了

[nan, 0.09799999743700027]

整个训练期间的损失仍然存在 'nan' ...现在我将模型转换为 tflite 模型

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS # enable TensorFlow Lite ops.
]
tflite_model = converter.convert()

with open('newmodel.tflite', 'wb') as f:
    f.write(tflite_model)

现在推论:我使用了来自测试集的随机图像

image = np.array([x_test[3]], dtype=np.float32)

interpreter = tf.lite.Interpreter("model.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()[0]
_, height, width, = input_details['shape']
tensor_index = input_details['index']
interpreter.set_tensor(tensor_index, image)
interpreter.invoke()
output = interpreter.tensor(interpreter.get_output_details()[0]['index'])
output()

这给出了输出: array([[nan, nan, nan, nan, nan, nan, nan, nan, nan, nan]], dtype=float32)

我已经尝试了很多不同的东西,比如在不同的机器上放入功能块,np.squeeze 和 运行,但输出仍然是 nan。我哪里出错了?

看来你的执行有问题。现在我可以在 Tensorflow 2.5 中执行训练而不会出现任何问题,如下所示

import numpy as np
import tensorflow as tf
print(tf.__version__)
from matplotlib import pyplot as plt

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

predictions = model(x_train[:1]).numpy()
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
model.compile(optimizer='adam',
              loss=loss_fn,
              metrics=['accuracy'])
history = model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test,  y_test, verbose=2)

converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS # enable TensorFlow Lite ops.
]
tflite_model = converter.convert()

with open('newmodel.tflite', 'wb') as f:
    f.write(tflite_model)

image = np.array([x_test[3]], dtype=np.float32)

#interpreter = tf.lite.Interpreter("model.tflite") 
interpreter = tf.lite.Interpreter("newmodel.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()[0]
_, height, width, = input_details['shape']
tensor_index = input_details['index']
interpreter.set_tensor(tensor_index, image)
interpreter.invoke()
output = interpreter.tensor(interpreter.get_output_details()[0]['index'])
output()

输出:

2.5.0
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 0s 0us/step
Epoch 1/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2971 - accuracy: 0.9138
Epoch 2/5
1875/1875 [==============================] - 4s 2ms/step - loss: 0.1432 - accuracy: 0.9577
Epoch 3/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.1080 - accuracy: 0.9682
Epoch 4/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0865 - accuracy: 0.9731
Epoch 5/5
1875/1875 [==============================] - 3s 2ms/step - loss: 0.0739 - accuracy: 0.9769
313/313 - 0s - loss: 0.0806 - accuracy: 0.9741
[0.0806254968047142, 0.9740999937057495]

INFO:tensorflow:Assets written to: /tmp/tmpqyhpmxnb/assets


array([[10.962509  , -9.535783  , -3.5547743 , -9.498501  ,  0.26378444,
        -3.641434  , -0.20065163,  1.7456708 , -6.428345  , -2.605583  ]],
      dtype=float32)