【问题标题】:Tensor 'embedding_input' has invalid shape '[None, None]'张量“embedding_input”的形状无效“[None, None]”
【发布时间】:2019-06-11 19:58:54
【问题描述】:

我正在尝试创建一个 tensorflow lite 文本多类分类模型。我主要是从这里复制代码:https://colab.research.google.com/github/tensorflow/docs/blob/master/site/en/tutorials/keras/basic_text_classification.ipynb

在 tensorflow 中似乎一切正常,但是当我尝试将保存 h5 模型转换为 Tensorflow Lite 时,我收到此错误:

ValueError: None is only supported in the 1st dimension. Tensor 'embedding_input' has invalid shape '[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)

我猜是嵌入层的问题?我能做些什么来解决它?

【问题讨论】:

  • 你在哪里定义你引用的张量'embedding_input'?
  • 我没有在任何地方声明...我假设它来自model.add(keras.layers.Embedding(vocab_size, 16))
  • 好的。 vocab_size 是什么意思?
  • 字典中的单词数,已添加到帖子

标签: python tensorflow keras deep-learning tensorflow-lite


【解决方案1】:

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

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

另见类似问题:Tensorflow - h5 model to tflite conversion error

【讨论】:

    猜你喜欢
    • 2020-07-04
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2021-08-25
    • 1970-01-01
    相关资源
    最近更新 更多