% آموزش شبکه عصبی برای تشخیص قطعات معیوب
% فرض شده است که دادههای آموزشی در یک پوشه با نام 'dataset' و درون آن دو زیر پوشه
% بنامهای 'defective' و 'non_defective' قرار دارند
% لود دادههای آموزشی
dataFolder = 'dataset';
imds = imageDatastore(dataFolder, 'IncludeSubfolders',true, 'LabelSource', 'foldernames');
% تقسیم داده به بخشهای آموزش و اعتبارسنجی
[imdsTrain, imdsValidation] = splitEachLabel(imds, 0.7, 'random', 'Seed', 42);
% تعریف معماری شبکه عصبی کانولوشنال
layers = [
imageInputLayer([32 32 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(2)
softmaxLayer
classificationLayer
];
% تنظیمات آموزش شبکه
options = trainingOptions('sgdm', ...
'MaxEpochs',10, ...
'ValidationData',imdsValidation, ...
'ValidationFrequency',30, ...
'Verbose',false, ...
'MiniBatchSize', 128);
% آموزش شبکه
net = trainNetwork(imdsTrain, layers, options);
% ذخیره شبکه آموزش دیده
save('defect_detection_net.mat', 'net');