什么比例的数据馈送给自动编码器,以便在时间序列上进行异常检测

2024-05-28 20:28:36 发布

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

作为一个对自动编码器和深入学习的noob,我努力做到以下几点。 我正在尝试使用自动编码器对振动数据集执行异常检测,从nasa的引用集开始

每个数据集由单个文件组成,这些文件是以特定间隔记录的1秒振动信号快照。每个文件包含20480个点,采样率设置为20 kHz。

因此,该数据集既包含新轴承和完好轴承的数据,也包含出现损坏的轴承的数据。你知道吗

我使用了Keras+Tensorflow的例子,最近的IBM example,它构建了一个11层的自动编码器。你知道吗

# design network
model = Sequential()
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(LSTM(50,input_shape=(timesteps,dim),return_sequences=True))
model.add(Dense(3))model.compile(loss='mae', optimizer='adam')

def train(data):
    data.shape = (s_t, timesteps, dim)
    model.fit(data, data, epochs=50, batch_size=72, validation_data=(data,   data), verbose=0, shuffle=False,callbacks=[LossHistory()])
    data.shape =  (samples, dim)

def score(data):
    data.shape = (s_t, timesteps, dim)
    yhat =  model.predict(data)
    yhat.shape = (samples, dim)
    return yhat

IBM的文章中说:

“LSTM希望其输入包含时间窗口”

然后,将3轴*3000个样本的示例时间序列划分为3*10个300个样本的块。你知道吗

在实际的nasa数据集上尝试自动编码器时,对于一个完整的轴承或轴承上有实际故障的文件,使用OK数据,我很难找到,如何:

  1. 将我的20480示例文件塑造成适合网络培训的片段或批

  2. 决定第一层应该有多少个神经元

  3. 确定epochsbatch_size

  4. 在神经元的数量和训练次数之间找到一个很好的平衡点,作为一个合理的折衷,这样就可以进行实验,而不需要花几个小时来重复。

当用几个实验性的选择的维度进行实验时,我能够通过编码器改善损失,但在尝试输入一组检测到的实际缺陷之前,可能会达到一个或多个局部极小值。 one experimental setting

我可能会猜测,像上面这样的数据集可以被视为音频片段,例如训练神经网络识别某个振动信号的内容,并映射到已知类,比如振动信号的shazam,但我不确定相似性是否足够重叠。你知道吗

通常使用FFT内容识别轴承损坏,但我看不到自动编码器在频率箱上工作,因为LSTM预计仅在时间序列数据上更优越。你知道吗

任何关于如何在上述方面取得进展的线索,将不胜感激;-)


Tags: 文件数据addtrueinputdatamodelreturn
1条回答
网友
1楼 · 发布于 2024-05-28 20:28:36

为了对频率数据使用LSTM,计算短时傅里叶变换。在Python中可以使用librosa.sftf()。你将得到一个新的时间序列,在时间上降低采样率(比如10ms),序列中的每一帧都是这个小时间窗口中的频率内容(傅立叶系数)。你知道吗

相关问题 更多 >

    热门问题