Python 张量';嵌入输入';具有无效的形状';[无,无]';

Python 张量';嵌入输入';具有无效的形状';[无,无]';,python,tensorflow,keras,deep-learning,tensorflow-lite,Python,Tensorflow,Keras,Deep Learning,Tensorflow Lite,我试图创建一个tensorflow lite文本多类分类模型。我主要从这里复制代码: 在tensorflow中似乎一切正常,但当我尝试将save h5模型转换为tensorflow Lite时,出现以下错误: ValueError:仅在第1维度中支持无。张量“嵌入输入”具有无效形状“[None,None]”。 这就是我的代码的样子: vocab_size = 15000 # of words in dictionary model = keras.Sequential() model.add(

我试图创建一个tensorflow lite文本多类分类模型。我主要从这里复制代码:

在tensorflow中似乎一切正常,但当我尝试将save h5模型转换为tensorflow Lite时,出现以下错误:

ValueError:仅在第1维度中支持无。张量“嵌入输入”具有无效形状“[None,None]”。

这就是我的代码的样子:

vocab_size = 15000 # of words in dictionary

model = keras.Sequential()
model.add(keras.layers.Embedding(vocab_size, 16))
model.add(keras.layers.GlobalAveragePooling1D())
model.add(keras.layers.Dense(16, activation=tf.nn.relu))
model.add(keras.layers.Dense(7, activation=tf.nn.sigmoid))

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

history = model.fit(...)
keras.models.save_model(model, graphFile)

converter = tf.contrib.lite.TFLiteConverter.from_keras_model_file(graphFile)
tflite_model = converter.convert()
open("converted.tflite", "wb").write(tflite_model)

我猜问题在于嵌入层?我能做些什么来修复它?

转换需要知道输入张量的形状。只有第一维度(批次)可以是未知的(
None
)。在某些情况下,Keras不注释已知的张量形状。您可以通过传递
input\u shapes
可选参数来指定输入形状:

converter = tf.contrib.lite.TFLiteConverter.from_keras_model_file(
    graphFile,
    input_shapes={'embedding_input': [1, vocab_size]}
)

另请参阅一个类似的问题:

您在哪里定义了您所指的张量“嵌入输入”?我没有在任何地方声明它…我假设它来自
model.add(keras.layers.embedding(vocab\u size,16))
好的。词汇量是多少呢?#字典中的单词,添加到帖子中