尝试重新创建 Adhikari 等人的 BiLSTM 模型。 2019 年 (LSTM_reg) 在 Tensorflow 中
Trying to recreate BiLSTM model from Adhikari et al. 2019 (LSTM_reg) in Tensorflow
我正在尝试在 TensorFlow 中从 this paper 重新创建此模型 LSTM_reg 以用于解决我的问题。我想出了以下代码:
def get_model(lr=0.001):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(nb_words, output_dim=embed_size, weights=[embedding_matrix], input_length = maxlen, trainable=False))
model.add(tf.keras.layers.Dropout(0.2)) # embedding dropouts
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(256, return_sequences=True, recurrent_dropout=0.2, activation = 'tanh'))) # weight drop on recurrent layers using recurrent_dropout
model.add(tf.keras.layers.MaxPooling1D(pool_size=2, padding = 'valid'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(20))
model.add(tf.keras.layers.Activation('sigmoid'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam', metrics = ['accuracy', tfa.metrics.F1Score(num_classes = 20)])
return model
我做对了吗?在训练我的数据集时得到了一些非常奇怪的值,因此想知道我的实现。这个模型有一个 pytorch 实现 here。但是我不确定我是否正确地复制了这个。
我能看到的一个主要区别是这篇论文使用了全局最大池化,而你只使用了内核大小为 2 的最大池化:
def get_model(lr=0.001):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(nb_words, output_dim=embed_size, weights=[embedding_matrix], input_length = maxlen, trainable=False))
model.add(tf.keras.layers.Dropout(0.2)) # embedding dropouts
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(256, return_sequences=True, recurrent_dropout=0.2, activation = 'tanh'))) # weight drop on recurrent layers using recurrent_dropout
model.add(tf.keras.layers.GlobalMaxPooling1D())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(20))
model.add(tf.keras.layers.Activation('sigmoid'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam', metrics = ['accuracy', tfa.metrics.F1Score(num_classes = 20)])
return model
我显然没有你的数据,所以请确保参数设置正确:https://keras.io/api/layers/pooling_layers/global_max_pooling1d/。
另一个变化是你分享的pytorch repo在LSTM之后有一个ReLU(我不知道为什么)。您可以尝试将其添加进去,看看是否有帮助。
我正在尝试在 TensorFlow 中从 this paper 重新创建此模型 LSTM_reg 以用于解决我的问题。我想出了以下代码:
def get_model(lr=0.001):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(nb_words, output_dim=embed_size, weights=[embedding_matrix], input_length = maxlen, trainable=False))
model.add(tf.keras.layers.Dropout(0.2)) # embedding dropouts
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(256, return_sequences=True, recurrent_dropout=0.2, activation = 'tanh'))) # weight drop on recurrent layers using recurrent_dropout
model.add(tf.keras.layers.MaxPooling1D(pool_size=2, padding = 'valid'))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(20))
model.add(tf.keras.layers.Activation('sigmoid'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam', metrics = ['accuracy', tfa.metrics.F1Score(num_classes = 20)])
return model
我做对了吗?在训练我的数据集时得到了一些非常奇怪的值,因此想知道我的实现。这个模型有一个 pytorch 实现 here。但是我不确定我是否正确地复制了这个。
我能看到的一个主要区别是这篇论文使用了全局最大池化,而你只使用了内核大小为 2 的最大池化:
def get_model(lr=0.001):
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Embedding(nb_words, output_dim=embed_size, weights=[embedding_matrix], input_length = maxlen, trainable=False))
model.add(tf.keras.layers.Dropout(0.2)) # embedding dropouts
model.add(tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(256, return_sequences=True, recurrent_dropout=0.2, activation = 'tanh'))) # weight drop on recurrent layers using recurrent_dropout
model.add(tf.keras.layers.GlobalMaxPooling1D())
model.add(tf.keras.layers.Dense(512, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(20))
model.add(tf.keras.layers.Activation('sigmoid'))
model.compile(loss = 'categorical_crossentropy' , optimizer = 'adam', metrics = ['accuracy', tfa.metrics.F1Score(num_classes = 20)])
return model
我显然没有你的数据,所以请确保参数设置正确:https://keras.io/api/layers/pooling_layers/global_max_pooling1d/。
另一个变化是你分享的pytorch repo在LSTM之后有一个ReLU(我不知道为什么)。您可以尝试将其添加进去,看看是否有帮助。