如何验证掩蔽是否正确应用?短序列的LSTM性能下降

2024-09-30 20:24:51 发布

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

我试图了解如何应用掩蔽,并确保我的输出被掩蔽。我使用以下模型来屏蔽输入:

def tdcnn2d_bilstm_mask():
    with tf.device('/gpu:2'):
        inputlayer1 = Input(shape = input_shape1)
        x = TimeDistributed(Conv2D(4, kernel_size=(3, 3), padding='same', activation='relu'))(inputlayer1)
        x = TimeDistributed(MaxPooling2D(pool_size=(2,2)))(x)
        x = TimeDistributed(Conv2D(8, kernel_size=(3, 3), padding='same', activation='relu'))(x)
        x = TimeDistributed(MaxPooling2D(pool_size=(2,2)))(x)
        x = TimeDistributed(Conv2D(8, kernel_size=(3, 3), padding='same', activation='relu'))(x)
        x = TimeDistributed(MaxPooling2D(pool_size=(2,2)))(x)
        x = TimeDistributed(Conv2D(8, kernel_size=(3, 3), padding='same', activation='relu'))(x)
        x = TimeDistributed(MaxPooling2D(pool_size=(2,2)))(x)
        x = TimeDistributed(Flatten())(x)
        mask = Masking(mask_value=0.)(x)
        x = Bidirectional(LSTM(64, dropout=0.5, return_sequences=True))(mask)
        out1 = TimeDistributed(Dense(num_class,activation='softmax'))(x)
        model = keras.Model(inputs = [inputlayer1], outputs = [out1])#, out2, out3])
        opt = Adam(lr=1e-3, decay=1e-3 / 200)
        model.compile(loss = 'categorical_crossentropy', optimizer=opt,metrics = ['accuracy'])
        return model

我的问题是:

  • 如何检查我的输入是否被LSTM适当屏蔽
  • softmax图层是否输出遮罩值的预测
  • 如何比较屏蔽输出与非屏蔽输出

最后一个不相关的问题是:

  • 当我将测试序列划分为较短的序列并尝试预测它们时,我的测试性能会下降很多。原因可能是什么?例如,当我使用整个数据序列(30秒)进行测试时,我得到93%的测试准确率,但当我将测试数据分成0.2秒的块并尝试预测它们时,准确率下降到75%左右。我怎样才能克服这个问题? 提前谢谢

最好的

埃姆雷


Tags: sizemodel序列maskactivationkernel屏蔽relu