Tensorflow 将带有TFLiteConverter的Keras模型转换为量化tflite版本会导致NOTYPE错误
当转换并对keras模型进行8位量化时,我遇到了一个奇怪的错误,这在图像数据集上并没有发生Tensorflow 将带有TFLiteConverter的Keras模型转换为量化tflite版本会导致NOTYPE错误,tensorflow,keras,quantization,google-coral,tensorflow-lite,Tensorflow,Keras,Quantization,Google Coral,Tensorflow Lite,当转换并对keras模型进行8位量化时,我遇到了一个奇怪的错误,这在图像数据集上并没有发生 import tensorflow.python.keras.backend as K import tensorflow as tf from tensorflow import keras from tensorflow.keras.models import load_model import numpy as np x_train = np.array([[0.6171875 0.597916
import tensorflow.python.keras.backend as K
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import load_model
import numpy as np
x_train = np.array([[0.6171875 0.59791666],[0.6171875 0.59791666],[0.6171875 0.59791666]])
y_train = np.array([[0.6171875 0.59791666],[0.6171875 0.59791666],[0.6171875 0.59791666]])
def representative_dataset_gen():
for i in range(1):
# Get sample input data as a numpy array in a method of your choosing.
sample = np.array([0.5,0.6])
sample = np.expand_dims(sample, axis=0)
yield [sample]
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(2,)),
tf.keras.layers.Dense(12, activation='relu'),
tf.keras.layers.Dense(2, activation='softmax')
])
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=1)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter = tf.lite.TFLiteConverter.from_keras_model(model)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.float32
converter.inference_output_type = tf.float32
converter.representative_dataset = representative_dataset_gen
tflite_quant_model = converter.convert()
这将导致错误
ValueError:无法设置tensor:为输入1获取了NotType类型的值,但应为FLOAT32类型,名称:稠密\u 1\u输入
这个过程过去在使用图像数据时起作用,但现在发生了这种情况。尝试了不同的TF版本,包括每夜TF2.1。显然,问题与输入张量的数据类型有关,默认情况下,输入张量为Float64,而不是预期的Float32。因为tflite不知道Float64,所以它将其作为NOTYPE处理,这很容易混淆 对float32的强制转换解决了这个问题
sample=sample.astypenp.float32显然,问题与输入张量的数据类型有关,默认情况下,输入张量是Float64,而不是预期的float32。因为tflite不知道Float64,所以它将其作为NOTYPE处理,这很容易混淆 对float32的强制转换解决了这个问题
sample=sample.astypenp.float32非常感谢你刚刚救了我的命。为什么tensorflow没有说FLOAT64不受支持,它将在internet t.t.上的任何地方作为NOTYPE提出。再次感谢您,非常感谢您刚刚救了我的命。为什么tensorflow没有说FLOAT64不受支持,它将在internet t.t.上的任何地方作为NOTYPE提出。再次感谢