Tensorflow 将带有TFLiteConverter的Keras模型转换为量化tflite版本会导致NOTYPE错误

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

当转换并对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.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提出。再次感谢