keras 如何减少回归模型输出中的离群值?

fsi0uk1n  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(148)

我使用Keras模型进行回归,输入是传感器测量值,输出是传感器的姿态。此模型由CuDNNLSTM和CNN组成。我需要减少输出中异常值的数量或范围。
平均误差是合理的和低的,但在输出中有这么多的离群值。平均误差在1左右,但正如你在箱线图中所看到的,有时我会得到180个错误(最大可能的错误)。

训练数据没有离群值,并且已经过预处理。
如何减少输出中的异常值?是否有任何特定的网络拓扑或层可以处理此问题?
我尝试了归一化输入或添加高斯噪声,但它们都对输出中的离群值数量没有任何影响。此外,我尝试了所有可能的损失函数(超过38个),这是最好的结果。
模型为:

Acc = Input((window_size, 3), name='acc')
Gyro = Input((window_size, 3), name='gyro')
AGconcat = concatenate([Acc, Gyro], axis=2, name='AGconcat')

fs = Input((1,), name='fs')
ACNN = Conv1D(filters=133,
                kernel_size = 11,
                padding = 'same',
                activation = tfa.activations.mish,
                name= 'ACNN')(Acc)
ACNN = Conv1D(filters=109,
                kernel_size = 11,
                padding = 'same',
                activation = tfa.activations.mish,
                name= 'ACNN1')(ACNN)
ACNN = MaxPooling1D(pool_size=3,
                    name = 'MaxPooling1D')(ACNN)
ACNN = Flatten(name='ACNNF')(ACNN)

GCNN = Conv1D(filters=142,
                kernel_size = 11,
                padding = 'same',
                activation = tfa.activations.mish,
                name= 'GCNN')(Gyro)
GCNN = Conv1D(filters=116,
                kernel_size = 11,
                padding = 'same',
                activation = tfa.activations.mish,
                name= 'GCNN1')(GCNN)
GCNN = MaxPooling1D(pool_size=3,
                    name = 'GyroMaxPool1D')(GCNN)
GCNN = Flatten(name='GCNNF')(GCNN)

AGconLSTM =Bidirectional(CuDNNGRU(128, return_sequences=True, 
                                    #return_state=True,
                                    go_backwards=True,
                                    name='BiLSTM1'))(AGconcat)
                                    
FlattenAG = Flatten(name='FlattenAG')(AGconLSTM)
AG = concatenate([ACNN, GCNN,FlattenAG])
AG = Dense(units=256,
                activation= tfa.activations.mish)(AG)
Fdense = Dense(units=256,
                activation= tfa.activations.mish,
                name= 'Fdense')(fs)
AG = Flatten(name='AGF')(AG)
x = concatenate([AG, Fdense])
x = Dense(units=256,
                    activation= tfa.activations.mish)(x)
x = Flatten(name='output')(x)
output = Dense(4, activation='linear', name='quat')(x)
u7up0aaq

u7up0aaq1#

你可以尝试权重衰减和正则化。对于最后一行,你可以添加以下内容:

quat = Lambda(lambda x: k.l2_normalize(x, axis=1), name='QuatNorm')(quat)

相关问题