【发布时间】:2021-08-09 14:38:45
【问题描述】:
假设,我有两个特征:x1 和 x2。这里,x1 是词索引向量,x2 是数值向量。 x1 和 x2 的长度等于 50。每个 x1 和 x2 有 6000 行。我将这两者合二为一,例如
X = np.array([np.row_stack((x1[i], x2[i])) for i in range(x1.shape[0])])
我最初的 LSTM 模型是
X_input = Input(shape = (50, 2), name = "X_seq")
X_hidden1 = LSTM(units = 256, dropout = 0.25, return_sequences = True)(X_input)
X_hidden2 = LSTM(units = 256, dropout = 0.25, return_sequences = True)(X_hidden1)
X_hidden3 = LSTM(units = 128, dropout = 0.25)(X_hidden2)
X_dense = Dense(units = 128, activation = 'relu')(X_hidden3)
X_dense_dropout = Dropout(0.25)(X_dense)
concat = tf.keras.layers.concatenate(inputs = [X_dense_dropout])
output = Dense(units = num_category, activation = 'softmax', name = "output")(concat)
model = tf.keras.Model(inputs = [X_input], outputs = [output])
model.compile(optimizer = 'adam', loss = "sparse_categorical_crossentropy", metrics = ["accuracy"])
但是,我知道我需要一个嵌入层来处理输入层下方的X[0,:]。因此,我将上面的代码修改为
X_input = Input(shape = (50, 2), name = "X_seq")
x1_embedding = Embedding(input_dim = max_pages, output_dim = embedding_dim, input_length = max_length)(X_input[0,:])
X_concat = tf.keras.layers.concatenate(inputs = [x1_embedding, X_input[1,:]])
X_hidden1 = LSTM(units = 256, dropout = 0.25, return_sequences = True)(X_concat)
X_hidden2 = LSTM(units = 256, dropout = 0.25, return_sequences = True)(X_hidden1)
X_hidden3 = LSTM(units = 128, dropout = 0.25)(X_hidden2)
X_dense = Dense(units = 128, activation = 'relu')(X_hidden3)
X_dense_dropout = Dropout(0.25)(X_dense)
concat = tf.keras.layers.concatenate(inputs = [X_dense_dropout])
output = Dense(units = num_category, activation = 'softmax', name = "output")(concat)
model = tf.keras.Model(inputs = [X_input], outputs = [output])
model.compile(optimizer = 'adam', loss = "sparse_categorical_crossentropy", metrics = ["accuracy"])
Python 显示错误
ValueError: A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got inputs shapes: [(None, 2, 15), (None, 2)]
有什么建议吗?非常感谢
【问题讨论】:
-
x1_embedding是一个 3 维矩阵(Keras 自动为批量大小添加一个额外的维度,因此none但X_input[:,1]是 2 维,即所有行和索引 = 1 列. 你可能想做类似X_input[:,:,1]的事情来获得批量维度
标签: python tensorflow machine-learning keras deep-learning