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)
所以,我决定试用 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)