【发布时间】:2022-12-10 21:34:35
【问题描述】:
我正在使用 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)
【问题讨论】:
标签: python tensorflow keras deep-learning