lstm轴承寿命预测
生活随笔
收集整理的這篇文章主要介紹了
lstm轴承寿命预测
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.讀取數(shù)據(jù)集
import numpy as np import torch from torch import nn import matplotlib.pyplot as plt import pandas as pd from torch.autograd import Variableall_date = pd.read_csv(u"D:/故障診斷數(shù)據(jù)集/西交軸承數(shù)據(jù)/XJTU-SY_Bearing_Datasets/Data/XJTU-SY_Bearing_Datasets/35Hz12kN/Bearing1_1/all.csv") all_date['RUL'] = np.arange(0, 1,1/len(all_date)) all_dateNd = all_date.values2.搭建lstm網(wǎng)絡
class LstmRNN(nn.Module):"""Parameters:- input_size: feature size- hidden_size: number of hidden units- output_size: number of output- num_layers: layers of LSTM to stack"""def __init__(self, input_size, hidden_size=1, output_size=4, num_layers=1):super().__init__()self.lstm = nn.LSTM(input_size, hidden_size, num_layers) # utilize the LSTM model in torch.nnself.forwardCalculation = nn.Linear(hidden_size, output_size)def forward(self, _x):x, _ = self.lstm(_x) # _x is input, size (seq_len, batch, input_size)s, b, h = x.shape # x is output, size (seq_len, batch, hidden_size)x = x.view(s * b, h)x = self.forwardCalculation(x)x = x.view(s, b, -1)return x3.數(shù)據(jù)處理和網(wǎng)絡訓練
if __name__ == '__main__':# create databasedata_len = len(all_dateNd)data_x = all_dateNd[:,0:2] #二維輸入data_y = all_dateNd[:,2] #輸出 dataset = np.zeros((data_len, 3)) #用一個dataset表示輸入輸出dataset[:, 0] = data_x[:,0]dataset[:, 1] = data_x[:,1]dataset[:, 2] = data_ydataset = dataset.astype('float32')# choose dataset for training and testingtrain_data_ratio = 0.1 # 數(shù)據(jù)量太大,僅使用10%做訓練train_data_len = int(data_len * train_data_ratio)train_x = dataset[:train_data_len, 0:2]train_y = dataset[:train_data_len, 2]INPUT_FEATURES_NUM = 2 #輸入是2維:水平和垂直振動信號OUTPUT_FEATURES_NUM = 1 #輸出是一維:壽命# test_x = dataset[train_data_len:, 0:2]# test_y = dataset[train_data_len:, 2]# ----------------- train -------------------train_x_tensor = train_x.reshape(-1, 14, INPUT_FEATURES_NUM) # 每14個做一個batchtrain_y_tensor = train_y.reshape(-1, 14, OUTPUT_FEATURES_NUM) # set batch size to 14# transfer data to pytorch tensortrain_x_tensor = torch.from_numpy(train_x_tensor) #數(shù)組轉tensortrain_y_tensor = torch.from_numpy(train_y_tensor)train_x_tensor_GPU = train_x_tensor.cuda() #用GPU訓練train_y_tensor_GPU = train_y_tensor.cuda()DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") #用GPU訓練網(wǎng)絡lstm_model = LstmRNN(INPUT_FEATURES_NUM, 16, output_size=OUTPUT_FEATURES_NUM, num_layers=1).to(DEVICE) # 16 hidden unitsprint('LSTM model:', lstm_model)print('model.parameters:', lstm_model.parameters)loss_function = nn.MSELoss()optimizer = torch.optim.Adam(lstm_model.parameters(), lr=0.01)max_epochs = 100000for epoch in range(max_epochs):output = lstm_model(train_x_tensor_GPU)loss = loss_function(output, train_y_tensor_GPU)loss.backward()optimizer.step()optimizer.zero_grad()if loss.item() < 1e-4:print('Epoch [{}/{}], Loss: {:.5f}'.format(epoch + 1, max_epochs, loss.item()))print("The loss value is reached")output = output.view(-1, OUTPUT_FEATURES_NUM).data.cpu().numpy()plt.plot(output, 'b')breakelif (epoch + 1) % 100 == 0:print('Epoch: [{}/{}], Loss:{:.5f}'.format(epoch + 1, max_epochs, loss.item()))# prediction on training datasetpredictive_y_for_training = lstm_model(train_x_tensor_GPU)predictive_y_for_training = predictive_y_for_training.view(-1, OUTPUT_FEATURES_NUM).data.cpu().numpy()4.繪圖
predictive_y_for_training = lstm_model(train_x_tensor_GPU) predictive_y_for_training = predictive_y_for_training.view(-1, OUTPUT_FEATURES_NUM).data.cpu().numpy() #tensor轉numpy數(shù)組plt.figure() plt.plot(train_y, 'b') plt.plot(output, 'y--') plt.plot(predictive_y_for_training, 'y--')plt.show()總結
以上是生活随笔為你收集整理的lstm轴承寿命预测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 时区 不正确_Java中的时区
- 下一篇: 去掉UUID的小横线,如果你觉得不爽的话