我试图在keras的一个功能上运行一个嵌入式层,然后将其余的作为CNN的输入:
X_train_array = [X_train_cnn['orguuid'], (X_train_cnn.drop('orguuid', axis=1))]
X_val_array = [X_val_cnn['orguuid'], (X_val_cnn.drop('orguuid', axis=1))]
n_steps = 3
n_features = 7
n_latent_factors_orgs = 5
org_input = keras.layers.Input(shape=[1])
org_embedding = keras.layers.Embedding(n_orgs + 1, n_latent_factors_orgs,
embeddings_initializer='he_normal',
embeddings_regularizer=l2(1e-6))(org_input)
org_vec = keras.layers.Flatten()(org_embedding)
org_vec = keras.layers.Dropout(0.2)(org_vec)
other_input = keras.layers.Input(shape=((n_features-1),))
concat = keras.layers.Concatenate()([org_vec, other_input])
concat = keras.layers.Reshape((n_steps, n_features))(concat)
conv_1 = keras.layers.Conv1D(filters=32, kernel_size=2, activation='relu', input_shape=(n_steps, n_features))(concat)
max_pool_1 = keras.layers.MaxPooling1D(pool_size=2)(conv_1)
我得到一个错误Data cardinality is ambiguous: x sizes: 29025, 29025. y sizes: 5805. Please provide data which shares the same first dimension.
,我相信问题是输入数据帧的长度不同,但是重塑后的长度相同。例如,这有效:
X_train_cnn = X_train_cnn.values.reshape((len(X_train)-n_steps+1), n_steps, n_features) #reshaping before input (and so the same with X_val, if you want to validate)
n_steps = 3
n_features = 7
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=2, input_shape=(n_steps, n_features)))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(32))
model.add(Dense(1))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
但是,这不允许我将org
列穿过一个嵌入层,这是我想要的。我该如何解决?