【问题标题】:Issues with embeddings for categorical variables in KerasKeras 中分类变量的嵌入问题
【发布时间】:2018-04-20 19:25:08
【问题描述】:

所以我有一个包含 1000 行和 6 列的数据框。 三列是分类变量,两列是连续的。最后一列是我试图预测的值为 1 和 0。

我正在尝试使用 keras 为分类变量创建嵌入,为每个连续变量创建一个密集层,将它们连接起来并将模型拟合到数据。

我做的第一件事是对分类变量进行标签编码。

然后我循环分类变量如下创建一个模型并附加到一个列表如下:-

models_concat = []

for k in df[categorical_columns]:

s = Sequential()

s.add(Embedding(len(df[k].unique()), 5, input_length = 1, embeddings_regularizer = l2(1e-2)))

s.add(Flatten())

models_concat.append(s)

对于连续变量:-

for i in df[cont_vars]:

s = Sequential()

s.add(Dense(1, input_dim = 1))

models_concat.append(s)

然后我尝试如下连接它们并构建网络:-

model_emb = Sequential()

model_emb.add(Merge(models_concat, mode='concat'))

model_emb.add(Dropout(0.02))

model_emb.add(Dense(units=100, kernel_initializer= trunc_normal))

model_emb.add(Dropout(0.25))

model_emb.add(BatchNormalization())

model_emb.add(Activation('relu'))

model_emb.add(Dense(units=100, kernel_initializer = trunc_normal))

model_emb.add(Dropout(0.2))

model_emb.add(BatchNormalization())

model_emb.add(Activation('relu'))

model_emb.add(Dense(units=50, kernel_initializer = trunc_normal))

model_emb.add(Dropout(0.1))

model_emb.add(BatchNormalization())

model_emb.add(Activation('relu'))

model_emb.add(Dense(units=1, kernel_initializer = trunc_normal))

model_emb.add(Activation('sigmoid'))

model_emb.compile(optimizer='adagrad',loss='binary_crossentropy',metrics=['accuracy'])

但是当我尝试如下拟合模型时:-

model_emb.fit(train_x,train_y,epochs = 20,validation_split = 0.3,batch_size = 64)

我收到以下错误:-

ValueError: 模型需要 5 个输入数组,但只收到一个 大批。找到:形状为 (1000, 5) 的数组。

关于发生了什么以及如何纠正此问题的任何想法。

P.S -> 我不确定这种方法是不是正确的方法,我试图在本文中尝试使用分类中的嵌入:-

https://arxiv.org/pdf/1604.06737.pdf

谢谢。

【问题讨论】:

  • 很难理解,for 循环是否会产生多个输入层?
  • 我的回答对您有帮助吗?

标签: python machine-learning deep-learning keras embedding


【解决方案1】:

这应该就像将您的训练数据分成 5 个 numpy.arrays 的列表一样简单(因为您的模型有 5 个不同的输入)。试试下面的代码:

train_x = [train_x[:, [i]] for i in range(5)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-20
    • 2019-01-13
    • 2021-09-02
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多