有一段时间没有更新博客了,今天写一篇以前研究的LSTM应用于轴承故障诊断
数据集来源与处理方式与这篇文章里相同https://blog.csdn.net/FUCCKL/article/details/88169151
模型结构很简单
def create_model():
model = Sequential()
#输入数据的shape为(n_samples, timestamps, features)
#隐藏层设置为20, input_shape元组第二个参数1意指features为1
model.add(LSTM(units=20,input_shape=(train_x.shape[1], train_x.shape[2])))
#model.add(Dropout(0.2))
#后接全连接层,直接输出单个值,故units为10
model.add(Dense(units=10))
model.add(Activation('softmax'))#选用非线性激活函数
model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.001), metrics=['accuracy'])#损失函数为平均均方误差,优化器为Adam,学习率为0.001
return model
训练模型并验证
model = create_model()
history =model.fit(train_x, train_y, epochs=1000, batch_size=100, validation_data=(test_x,test_y))#训练模型并进行测试
后10次迭代验证准确率为:
[0.9733333388964335, 0.9466666777928671, 0.9333333373069763, 0.9900000095367432, 0.9933333396911621, 0.9900000095367432, 0.9733333388964335, 0.9900000095367432, 0.9900000095367432, 0.996666669845581]
history训练和验证准确率曲线为:
history训练和验证loss曲线为:
由曲线可以看出用LSTM做故障诊断,很不稳定,但是经过一定次数的迭代后在某次迭代后还是可以达到很好的效果。
我在研究的过程中经过多次的参数调整,LSTM准确率始终无法达到稳定,感兴趣的朋友可以探讨一下