1 介绍
使用西储大学的轴承数据集,其实用哪个都行,可能最后的精度会不一样,先读取数据,然后使用傅里叶转换为图像,然后搭建cnn模型,将图像大小转换为模型使用的大小,例如resnet50,输入大小就是224*224。同样提供python版本。
2 数据处理
总共10个类别
对每个数据进行采样,设置2000个样本,每个样本取连续的300个点
matlab
% 采样,每个数据采集N条样本,每条样本M长度
M = 2000;
N = 300;
image_index = 1;
sample_all_data = zeros(3, N, M);
for i = 1:10
sample_class_data = zeros(N, M);
data = all_data{i};
% 数据采样
random_sequence = randperm(length(data) - M);
selected_numbers = random_sequence(1:N);
% 对于每个采样的数据,使用fft变换
for j = 1:N
start_index = selected_numbers(j);
sample_data = data(start_index: start_index+M-1);
sample_class_data(j,:) = sample_data;
file_path = "images\" +num2str(i) +"\"+ num2str(image_index)+".jpg";
% 进行fft变换
process_data(sample_data, file_path)
image_index = image_index + 1;
end
sample_all_data(i,:,:) = sample_class_data;
end
3 fft变换
使用matlab中的变换,转换为频谱图,然后保存,结果如下所示
matlab
[S, f, t] = spectrogram(sample_data);
4 cnn模型
搭建一个普通的模型就行,因为这个数据集识别准确率特别高,最后都能到100%
matlab
% 设置图像文件夹路径
data_folder = 'images';
% 创建图像数据存储器
imds = imageDatastore(data_folder, ...
'IncludeSubfolders', true, 'LabelSource', 'foldernames');
[train_imds, test_imds] = splitEachLabel(imds, 0.7, 'randomized');
% 构建 CNN 模型
layers = [
imageInputLayer([224 224 3])
convolution2dLayer(3, 16, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
convolution2dLayer(3, 32, 'Padding', 'same')
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
convolution2dLayer(3, 64, 'Padding', 'same')
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer
classificationLayer
];
详情加Q 596520206 同样提供python版本