Keras 嵌入层不接受输入
Keras Embedding Layer not accepting input
我正在尝试创建一个预测模型,该模型采用滞后特征和嵌入来预测接下来 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]
Returns 10 个相似对象。 Returns none 如果我粘贴了任何随机值。
尝试了以下操作:
1. ucode_array[20:25].值
2. ucode_array[20:25].values.tolist()
gensim 版本:3.4.0
TensorFlow 版本:1.12.0
检查这个,
使用 float
将字符串转换为浮点数。我想这会解决你的问题。
通常,我们必须向 training
进程提供数值。
确保将所有 object
和 strings
转换为嵌入将解决问题。
记下我们之前的基本预处理操作,以供其他人发现这有帮助。
示例代码。
tokenizer = Tokenizer()
tokenizer.fit_on_texts(list(model.wv.vocab.keys())
encoded_ucode = tokenizer.texts_to_sequences(ucode_array)
我正在尝试创建一个预测模型,该模型采用滞后特征和嵌入来预测接下来 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]
Returns 10 个相似对象。 Returns none 如果我粘贴了任何随机值。
尝试了以下操作: 1. ucode_array[20:25].值 2. ucode_array[20:25].values.tolist()
gensim 版本:3.4.0 TensorFlow 版本:1.12.0
检查这个,
使用 float
将字符串转换为浮点数。我想这会解决你的问题。
通常,我们必须向 training
进程提供数值。
确保将所有 object
和 strings
转换为嵌入将解决问题。
记下我们之前的基本预处理操作,以供其他人发现这有帮助。
示例代码。
tokenizer = Tokenizer()
tokenizer.fit_on_texts(list(model.wv.vocab.keys())
encoded_ucode = tokenizer.texts_to_sequences(ucode_array)