Conv1D输入尺寸

时间:2020-08-22 21:52:30

标签: python tensorflow

我试图在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列穿过一个嵌入层,这是我想要的。我该如何解决?

0 个答案:

没有答案
相关问题