基于CNN的刀具剩余使用寿命预测(初学者+matlab代码实现)

1.代码实现

 
clear
clc
load('D1.mat')
life = (314:-1:0)';
life1 = (314:-1:0)';
life  = [life;life1];
life  = [life;life1];
life  = [life;life1];
life  = [life;life1];

for f= 1:size(C1,2)
    Ti(:,f) = normalize(C1(:,f)); 
    d(1,f) = corr(life,Ti(:,f),'type','Spearman');
end
% 相关性系数
      d = abs(d);           %   将相关系数绝对值
    [j main_feature] = find(d>=0.8);
%    % ±0.80-±1.00  高度相关   
     M = length(main_feature);
 for k = 1:M  
     p = main_feature(1,k);
     c1(:,k) = C1(:,p);    %    提取降维特征
     c2(:,k) = C2(:,p);
     c3(:,k) = C3(:,p);
     c4(:,k) = C4(:,p);
     c5(:,k) = C5(:,p);
     c6(:,k) = C6(:,p); 
     L1(:,k) = l1(:,p);
     L2(:,k) = l2(:,p);
     L3(:,k) = l3(:,p);
     L4(:,k) = l4(:,p);
     L5(:,k) = l5(:,p);
     L6(:,k) = l6(:,p);
 end   
% 数据集划分
 
% % 划分数据集
% 训练集
train_x = c5';
train_y = life';

% 测试集
test_x = L5';
test_y = life1';

% %标准化  
method=@mapminmax;
% method=@mapstd;
[train_x,train_ps]=method(train_x);
test_x=method('apply',test_x,train_ps);
[train_y,output_ps]=method(train_y);
test_y=method('apply',test_y,output_ps);

% % % 数据的一个转换,转换成MATLAB的CNN的输入数据形式,是4-D形式的,最后一维就是样本数
trainD=reshape(train_x,[105,1,1,1575]);%训练集输入
testD=reshape(test_x,[105,1,1,315]);%测试集输入
targetD = train_y;%训练集输出
targetD_test  = test_y;%测试集输出
%% 神经网络构建

layers = [
    imageInputLayer([105 1 1]) %输入层参数设置
    convolution2dLayer(3,16,'Padding','same')%卷积层的核大小、数量,填充方式
    reluLayer%relu激活函数
%     fullyConnectedLayer(34) % 384 全连接层神经元
%     fullyConnectedLayer(34) % 384 全连接层神经元
    fullyConnectedLayer(1) % 输出层神经元
    regressionLayer];%添加回归层,用于计算损失值
 
% 设置迭代次数 batchsize 学习率啥的
options = trainingOptions('adam', ...
    'MaxEpochs',20, ...
    'MiniBatchSize',16, ...
    'InitialLearnRate',0.0005, ...
    'GradientThreshold',1, ...
    'Verbose',false,...
    'Plots','training-progress',...
    'ValidationData',{testD,targetD_test'});
%这里要吐槽一下,输入数据都是最后一维为样本数,偏偏输出要第一维为样本数,所以targetD和targetD_test都取了转置 
 
% 训练
net = trainNetwork(trainD,targetD',layers,options);
% 预测
YPred = predict(net,testD);
 
% 结果
YPred=double(YPred');%输出是n*1的single型数据,要转换为1*n的double是数据形式
% 反归一化
predict_value=method('reverse',YPred,output_ps);predict_value=double(predict_value);
true_value=method('reverse',targetD_test,output_ps);true_value=double(true_value);
% 模型评估
 
figure
plot(true_value,'k')
hold on
plot(predict_value,'r')
legend('实际值','CNN预测值')
grid on
set(gcf,'color','white')
    set(gca, 'box', 'off')
%     set(gca, 'YTick', []); % 清除X轴的记号点
%      set(gca, 'XTick', []); % 清除X轴的记号点
%     axis off;  % 去掉坐标轴
 
 
rmse=sqrt(mean((true_value-predict_value).^2));
disp(['根均方差(RMSE):',num2str(rmse)])
mae=mean(abs(true_value-predict_value));
disp(['平均绝对误差(MAE):',num2str(mae)])
mape=mean(abs((true_value-predict_value)./true_value));
disp(['平均相对百分误差(MAPE):',num2str(mape*100),'%'])
% % % 
clearvars -except CNN2

2.预测结果

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个使用MATLAB实现CNN-LSTM剩余寿命预测模型的简单代码示例,供您参考: ```matlab % 加载数据 load('data.mat'); % data.mat 包含输入数据和目标数据 % 划分训练集和测试集 train_ratio = 0.8; train_size = floor(train_ratio * size(data, 1)); train_data = data(1:train_size, :); test_data = data(train_size+1:end, :); % 构建模型 input_size = 10; % 输入维度 num_filters = 16; % 卷积核数量 filter_size = 3; % 卷积核大小 num_hidden_units = 32; % LSTM隐藏单元数量 output_size = 1; % 输出维度 layers = [ sequenceInputLayer(input_size) convolution2dLayer(filter_size, num_filters, 'Padding', 'same') batchNormalizationLayer reluLayer maxPooling2dLayer(2, 'Stride', 2) sequenceFoldingLayer('Method', 'last') lstmLayer(num_hidden_units, 'OutputMode', 'last') fullyConnectedLayer(output_size) regressionLayer ]; % 模型训练 options = trainingOptions('adam', ... 'MaxEpochs', 50, ... 'MiniBatchSize', 32, ... 'ValidationData', {test_data(:, 1:end-1), test_data(:, end)}, ... 'ValidationFrequency', 5, ... 'Verbose', false); net = trainNetwork(train_data(:, 1:end-1), train_data(:, end), layers, options); % 预测测试集结果 y_pred = predict(net, test_data(:, 1:end-1)); % 计算误差 mse = mean((y_pred - test_data(:, end)).^2); rmse = sqrt(mse); disp(['RMSE: ' num2str(rmse)]); ``` 这里使用MATLAB深度学习工具箱中的`trainNetwork`函数来训练模型,`predict`函数来进行预测,以及`mean`和`sqrt`函数来计算误差。该示例仅供参考,实际应用中需要根据数据和模型的情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值