【问题标题】:Keras Embedding Layer not accepting inputKeras 嵌入层不接受输入
【发布时间】:2019-12-02 15:51:27
【问题描述】:

我正在尝试创建一个预测模型,该模型采用滞后特征和嵌入来预测未来 10 天的累积值。嵌入层通过使用带有 gensim 的订单篮进行训练。

下面是我的网络:


from keras.layers import Embedding, Flatten, Input, Dense, Dropout, Flatten, Activation

inp = Input(shape=(1, )) #ucode length will be 1  
x = Embedding(len(model.wv.vocab), WV_DIM,
              weights=[model.wv.vectors],
              trainable=False)(inp)
x = Flatten()(x)
x = Dense(32, activation='relu', name='Embedding_out')(x)

features_input = Input(shape=(122,)) ##lag Features
concat = concatenate([features_input, x],name="ConcatenatedwFeatures")
output = Dense(256, activation="relu",name="L1_Relu")(concat) 
output = Dense(128, activation="relu",name="L2_Relu")(output)
output = Dense(1)(output) 

EmbeddingModel = Model(inputs=[inp,features_input], outputs=output)
EmbeddingModel.summary()

adam = optimizers.adam(clipvalue=1.,lr=3e-4) 
EmbeddingModel.compile(loss='mse',
              optimizer=adam,                  
              metrics = ['mae', 'mse'])

hist = EmbeddingModel.fit([ucode_array[20:25],X_train[20:25]], [y_train[20:25]], validation_split=0.05,
                 epochs=10, batch_size=32)
Error:
ValueError: could not convert string to float: 'I33946'


Input Values:
ucode_array=sales_train_grid['ucode']
ucode_array[20:25]

15683    I33946
15685    I33946
15687    I33946
15688    126310
15689    126310
Name: ucode, dtype: object

测试嵌入层中是否存在值:

test1=model.wv.most_similar(positive=['I00731'], topn=10)
display(test1)
[x[0] for x in test1]

返回 10 个相似的对象。如果我粘贴了任何随机值,则不返回。

尝试了以下事情: 1. ucode_array[20:25].values 2. ucode_array[20:25].values.tolist()


gensim 版本:3.4.0 TensorFlow 版本:1.12.0

【问题讨论】:

  • 这只是意味着您的训练数据包含string 值,这些值肯定无法转换为float。将您的输入向量化,我相信它会很好。
  • 我正在尝试使用嵌入向量化。
  • 没关系。只需确保您的 training set 没有任何 stringobject 值。如果有帮助,请告诉我。
  • 解决了它.. 忘记了基础知识:( tokenizer = Tokenizer() tokenizer.fit_on_texts(list(model.wv.vocab.keys())) encoded_ucode = tokenizer.texts_to_sequences(ucode_array) 使用这个encoded_ucode 作为输入1。
  • 我已经提交了答案你可以接受。这将有助于其他人跟随。

标签: python-3.x tensorflow keras embedding


【解决方案1】:

通常,我们必须向training 进程提供数值。 确保将所有 objectstrings 转换为嵌入将解决问题。

在我们实际之前放下基本的预处理操作,以供其他人发现这有帮助。

示例代码。

tokenizer = Tokenizer()
tokenizer.fit_on_texts(list(model.wv.vocab.keys())
encoded_ucode = tokenizer.texts_to_sequences(ucode_array)

【讨论】:

    【解决方案2】:

    检查一下, 使用float 将字符串转换为浮点数。我想这会解决你的问题。

    【讨论】:

      猜你喜欢
      • 2019-01-30
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      相关资源
      最近更新 更多