如何将注意层应用于LSTM模型

2024-06-02 08:45:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个语音情感识别机的训练

我希望对模型应用一个注意层。指令page很难理解

def bi_duo_LSTM_model(X_train, y_train, X_test,y_test,num_classes,batch_size=68,units=128, learning_rate=0.005, epochs=20, dropout=0.2, recurrent_dropout=0.2):
    
    class myCallback(tf.keras.callbacks.Callback):

        def on_epoch_end(self, epoch, logs={}):
            if (logs.get('acc') > 0.95):
                print("\nReached 99% accuracy so cancelling training!")
                self.model.stop_training = True

    callbacks = myCallback()

    model = tf.keras.models.Sequential()
    model.add(tf.keras.layers.Masking(mask_value=0.0, input_shape=(X_train.shape[1], X_train.shape[2])))
    model.add(tf.keras.layers.Bidirectional(LSTM(units, dropout=dropout, recurrent_dropout=recurrent_dropout,return_sequences=True)))
    model.add(tf.keras.layers.Bidirectional(LSTM(units, dropout=dropout, recurrent_dropout=recurrent_dropout)))
    #     model.add(tf.keras.layers.Bidirectional(LSTM(32)))
    model.add(Dense(num_classes, activation='softmax'))

    adamopt = tf.keras.optimizers.Adam(lr=learning_rate, beta_1=0.9, beta_2=0.999, epsilon=1e-8)
    RMSopt = tf.keras.optimizers.RMSprop(lr=learning_rate, rho=0.9, epsilon=1e-6)
    SGDopt = tf.keras.optimizers.SGD(lr=learning_rate, momentum=0.9, decay=0.1, nesterov=False)

    model.compile(loss='binary_crossentropy',
                  optimizer=adamopt,
                  metrics=['accuracy'])

    history = model.fit(X_train, y_train,
                        batch_size=batch_size,
                        epochs=epochs,
                        validation_data=(X_test, y_test),
                        verbose=1,
                        callbacks=[callbacks])

    score, acc = model.evaluate(X_test, y_test,
                                batch_size=batch_size)

    yhat = model.predict(X_test)

    return history, yhat

如何将其应用于我的模型

而且use_scalecausaldropout都是参数吗

如果在attention layer中有一个dropout,那么既然在LSTM层中有dropout,我们该如何处理它呢


Tags: testaddsizemodelratelayerstfbatch
1条回答
网友
1楼 · 发布于 2024-06-02 08:45:30

注意力可以解释为软向量检索

  • 您有一些查询向量。对于每个查询,您都希望检索一些

  • ,以便计算它们的加权

  • 其中,权重是通过将查询与键进行比较获得的(键的数量必须与值的数量相同,并且通常是相同的向量)

在序列到序列模型中,查询是解码器状态,键和值是解码器状态

在分类任务中,您没有这样的显式查询。最简单的方法是训练一个“通用”查询,用于从隐藏状态收集相关信息(类似于最初描述的in this paper

如果将问题作为序列标签来处理,将标签不是指定给整个序列,而是指定给各个时间步,则可能需要使用“自我关注”层

相关问题 更多 >