【发布时间】:2019-07-28 19:55:20
【问题描述】:
假设我们有一个数据框,其中有一个类别列,其中包含 7 个类别 - 周一、周二、周三、周四、周五、周六和周日。假设我们有 100 个数据点,我们希望将分类数据作为嵌入层的输入,并使用 Keras 训练嵌入层。我们如何真正实现它?您可以通过代码示例分享一些直觉吗?
我已经尝试过这段代码,但它给了我一个错误,上面写着“ValueError:“input_length”为 1,但接收到的输入具有形状(无,26)”。我参考了这个博客https://medium.com/@satnalikamayank12/on-learning-embeddings-for-categorical-data-using-keras-165ff2773fc9,但我不知道如何在我的特殊情况下使用它。
from sklearn.preprocessing import LabelEncoder
l_encoder=LabelEncoder()
l_encoder.fit(X_train["Weekdays"])
encoded_weekdays_train=l_encoder.transform(X_train["Weekdays"])
encoded_weekdays_test=l_encoder.transform(X_test["Weekdays"])
no_of_unique_cat=len(X_train.school_state.unique())
embedding_size = min(np.ceil((no_of_unique_cat)/2),50)
embedding_size = int(embedding_size)
vocab = no_of_unique_cat+1
#Get the flattened LSTM output for categorical text
input_layer2 = Input(shape=(embedding_size,))
embedding = Embedding(input_dim=vocab, output_dim=embedding_size, input_length=1, trainable=True)(input_layer2)
flatten_school_state = Flatten()(embedding)
我想知道如果是 7 个类别,input_layer2 的形状是什么?词汇大小、输出尺寸和输入长度应该是多少?谁能解释或更正我的代码?您的见解将非常有帮助。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-46-e28d41acae85> in <module>
1 #Get the flattened LSTM output for input text
2 input_layer2 = Input(shape=(embedding_size,))
----> 3 embedding = Embedding(input_dim=vocab, output_dim=embedding_size, input_length=1, trainable=True)(input_layer2)
4 flatten_school_state = Flatten()(embedding)
~/anaconda3/lib/python3.7/site-packages/keras/engine/base_layer.py in __call__(self, inputs, **kwargs)
472 if all([s is not None
473 for s in to_list(input_shape)]):
--> 474 output_shape = self.compute_output_shape(input_shape)
475 else:
476 if isinstance(input_shape, list):
~/anaconda3/lib/python3.7/site-packages/keras/layers/embeddings.py in compute_output_shape(self, input_shape)
131 raise ValueError(
132 '"input_length" is %s, but received input has shape %s' %
--> 133 (str(self.input_length), str(input_shape)))
134 elif s1 is None:
135 in_lens[i] = s2
ValueError: "input_length" is 1, but received input has shape (None, 26)
【问题讨论】:
标签: keras nlp lstm categorical-data word-embedding