【发布时间】: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