keras中的model.predict使用通用句子编码器给出形状误差

时间:2019-01-15 09:40:39

标签: python-3.x tensorflow keras

我正在使用keras model.predict预测情绪。我正在使用通用句子嵌入。在进行预测时,出现以下错误。 请提供您的宝贵见解。 问候。

我已经为两组输入运行了代码。例如,输入1,即获得预测。虽然不适用于输入2。

Input 1 is the form : {(a1,[sents1]),....}
Input 2:{((a1,a2),[sents11])),...}

用于预测的输入是从中提取的[sents1],[sents11]等。

我可以在(Keras model.predict function giving input shape error)中看到相关的问题。但是我不知道它是否解决了。此外,input1正在工作。

import tensorflow as tf
import keras.backend as K
from keras import layers
from keras.models import Model
import numpy as np

def UniversalEmbedding(x):
    return embed(tf.squeeze(tf.cast(x, tf.string)), signature="default", as_dict=True)["default"]

input_text = layers.Input(shape=(1,), dtype=tf.string)
embedding = layers.Lambda(UniversalEmbedding, output_shape=(embed_size,))(input_text)
dense = layers.Dense(256, activation='relu')(embedding)
pred = layers.Dense(category_counts, activation='softmax')(dense)
model = Model(inputs=[input_text], outputs=pred)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
sents1=list(input2.items())

with tf.Session() as session:
      K.set_session(session)
      session.run(tf.global_variables_initializer())
      session.run(tf.tables_initializer())
#      model.load_weights(.//)
      for i,ch in enumerate(sents1):
          new_text=ch[1]
          if len(new_text)>1:
              new_text = np.array(new_text, dtype=object)[:, np.newaxis]
              predicts = model.predict(new_text, batch_size=32)
  

InvalidArgumentError:输入必须是向量,形状为:[] [[{{node   lambda_2 / module_1_apply_default / tokenize / StringSplit}} =   StringSplit [skip_empty = true,   _device =“ / job:localhost / replica:0 / task:0 / device:CPU:0”](lambda_2 / module_1_apply_default / RegexReplace_1,   lambda_2 / module_1_apply_default / tokenize / Const)]]

1 个答案:

答案 0 :(得分:0)

尝试删除句子开头的结尾空格。 new_text.strip() 通过分割空格来使用预处理的句子,从尾随空格创建一些空列表,这些列表无法嵌入。 (希望这个答案还不算太晚)

也可能是句子中缺少文本的一些缺失值。需要排除这些。