基于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.预测结果

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值