Keras
我用aMLP
和 a训练了两个神经网络Bidirectional LSTM
。
我的任务是预测句子中的单词顺序,因此对于每个单词,神经网络必须输出一个实数。当处理一个包含 N 个单词的句子时,将输出中的 N 个实数排序,以获得表示单词位置的整数。
我在数据集上使用相同的数据集和相同的预处理。唯一不同的是,在LSTM
数据集中我添加了填充以获得相同长度的序列。
在预测阶段,LSTM
我排除了从填充向量创建的预测,因为我在训练阶段屏蔽了它们。
MLP架构:
mlp = keras.models.Sequential()
# add input layer
mlp.add(
keras.layers.Dense(
units=training_dataset.shape[1],
input_shape = (training_dataset.shape[1],),
kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
activation='relu')
)
# add hidden layer
mlp.add(
keras.layers.Dense(
units=training_dataset.shape[1] + 10,
input_shape = (training_dataset.shape[1] + 10,),
kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
bias_initializer='zeros',
activation='relu')
)
# add output layer
mlp.add(
keras.layers.Dense(
units=1,
input_shape = (1, ),
kernel_initializer=keras.initializers.RandomUniform(minval=-0.05, maxval=0.05, seed=None),
bias_initializer='zeros',
activation='linear')
)
双向 LSTM 架构:
model = tf.keras.Sequential()
model.add(Masking(mask_value=0., input_shape=(timesteps, features)))
model.add(Bidirectional(LSTM(units=20, return_sequences=True), input_shape=(timesteps, features)))
model.add(Dropout(0.2))
model.add(Dense(1, activation='linear'))
使用 LSTM 可以更好地解决该任务,它应该可以很好地捕获单词之间的依赖关系。
但是,用MLP
我取得了很好的成绩,但用LSTM
的结果却很糟糕。
由于我是初学者,有人能理解我的LSTM
架构有什么问题吗?我快疯了。
提前致谢。