【问题标题】:tensorflow lite inference returns all nantensorflow lite 推理返回所有 nan
【发布时间】:2021-07-05 15:52:59
【问题描述】:

所以,我决定尝试 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。任何想法我哪里出错了?

【问题讨论】:

    标签: python numpy tensorflow keras tensorflow-lite


    【解决方案1】:

    您的执行似乎有问题。现在我可以在 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)
    

    【讨论】:

    • 我尝试使用tf.__version__ = 2.5.0 它可以工作.. 安装 seaborn tf 时由于某种原因回到 2.3 并且所有 nan 问题都会出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 2021-09-08
    • 2019-11-12
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多