日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人工智能 > 循环神经网络 >内容正文

循环神经网络

matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码...

發(fā)布時(shí)間:2023/12/31 循环神经网络 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近做圖像分類,數(shù)據(jù)集的整理真的好費(fèi)時(shí)間,找到一個(gè)代碼,非常好使,推薦給大家。

實(shí)現(xiàn)的功能是,將一個(gè)文件夾下的每個(gè)子文件夾的一半數(shù)據(jù)分割出來(lái)并保存,生成相應(yīng)的train.txt,test.txt。

自己弄數(shù)據(jù)集,真是非一般的體驗(yàn)呀。雖然說(shuō)這樣算是正在意義上經(jīng)歷一個(gè)完整的項(xiàng)目,被迫學(xué)習(xí)了很多數(shù)據(jù)處理的問(wèn)題。但是搞數(shù)據(jù)真是太蛋疼了。

想了很多方法,但最后發(fā)現(xiàn)其實(shí)自己整理的數(shù)據(jù),最合理的分配訓(xùn)練集和測(cè)試集的方法。就是先把數(shù)據(jù)全部整到一起,然后按一定比例從中隨機(jī)選出訓(xùn)練集和測(cè)試集(這兩個(gè)肯定是不能重復(fù)的),比如這里的25%作為測(cè)試集,75%作為訓(xùn)練集。

編寫這個(gè)程序一開(kāi)始,主要是有些函數(shù)不知道怎么用。編這程序是發(fā)現(xiàn)了即使是matlab編寫程序都要用disp輸出一些信息,這樣更方便查看程序運(yùn)行進(jìn)度。其余就是新學(xué)習(xí)了一些函數(shù),再把之前編寫的程序合起來(lái)。

clear;close all;clc;

%%

%程序?qū)崿F(xiàn)的功能

%1、把指定路徑的數(shù)據(jù)(已按類別放置在不同的文件夾中),隨機(jī)的把其中的75%的劃分為訓(xùn)練集,25%劃分為測(cè)試集

%2、訓(xùn)練集按類別放在指定路徑的train文件夾中,測(cè)試集按類別放在指定路徑的val文件夾中

%3、在train和val文件夾的同級(jí)文件夾按照caffe需求生成對(duì)應(yīng)的train.txt和val.txt的label

%%

%程序中用到的之前不清楚的函數(shù)如下

%1)disp:用來(lái)在界面上顯示一些必要的信息,方便查看程序進(jìn)度。disp(' ')可以起到在界面上換行顯示的作用

%2)str2double:帶起之前一直使用的str2num,matlab的提示是這樣函數(shù)效率更高。而且這兩個(gè)函數(shù)輸出的數(shù)據(jù)類型都是double類型。

%3)randperm(n):生成一個(gè)1到n直接的隨機(jī)數(shù)列

%4)copyfile(a,b):把文件a復(fù)制到路徑b,路徑b帶有最后的\符號(hào)

%

%

%

%%

disp('程序開(kāi)始執(zhí)行');

%%%%%%需要更改的參數(shù)(即兩個(gè)路徑)%%%%%%%%%%%%%%%%%%%%%%%%%%

pathSource='G:\遙感數(shù)據(jù)庫(kù)\1\AID';%AID文件夾下有30個(gè)文件夾

pathDestination='G:\遙感數(shù)據(jù)庫(kù)\deal';%保存分割后數(shù)據(jù)集以及train.txt和test.txt

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%在目標(biāo)路徑創(chuàng)建train、val文件夾

pathCreDirTrain=[pathDestination,'\','train','\'];

mkdir(pathCreDirTrain);

pathCreDirVal=[pathDestination,'\','val','\'];

mkdir(pathCreDirVal);

%讀取文件夾列表,這種方式讀取會(huì)保留原文件.(在結(jié)構(gòu)體中第一個(gè))和上一層目錄..(在結(jié)構(gòu)體第二個(gè))

dirSourceList=dir(pathSource);

countSourceList=length(dirSourceList);%文件夾個(gè)數(shù)

%拷貝數(shù)據(jù)到目標(biāo)路徑

for numDirList=3:countSourceList

%if(length(dirSourceList(numDirList).name)>=2)%根據(jù)這個(gè)過(guò)濾掉在此文件夾可能的train.txt、val.txt、count.txt文件

%continue;

%end

fileName=dir([pathSource,'\',dirSourceList(numDirList).name]);%讀取子文件夾中的圖片

%統(tǒng)計(jì)子文件夾中的文件個(gè)數(shù)

fileSum=length(fileName);

fileNum=fileSum-2;%為了生成對(duì)應(yīng)于讀取的從3開(kāi)始的文件,只能先減去2,然后生成隨機(jī)數(shù)后加上2

disp(' ');%加入一個(gè)空格,作為在界面顯示中一個(gè)類似于換行的工具

%在程序中增加一些輸出信息,方便查看數(shù)據(jù)內(nèi)容

disp(['原始數(shù)據(jù)子文件夾',num2str(dirSourceList(numDirList).name),'中有圖片:',num2str(fileNum)]);

%由于matlab讀取文件的規(guī)則,在文件列表中肯定最前面會(huì)有.和..這兩個(gè)文件

%所以想到先生成fileSum-2范圍內(nèi)的隨機(jī)數(shù),然后再各項(xiàng)加2,就為真正要找的隨機(jī)數(shù)

numFileList=randperm(fileNum);

numFileList=numFileList+2;

partitionPosition=round(fileNum/2);%這是通過(guò)四舍五入確定的分割位置。這是劃分?jǐn)?shù)據(jù)的比例,2是按一半劃分,如果是4的話,'先拷貝val(前25%)后拷貝train(后75%)'

%在程序中增加一些輸出信息,方便查看數(shù)據(jù)內(nèi)容

% disp(['先拷貝val(前25%)后拷貝train(后75%)']);

%%

%拷貝測(cè)試集數(shù)據(jù)val

%在程序中增加一些輸出信息,方便查看程序執(zhí)行進(jìn)度

disp(['在val文件夾下創(chuàng)建子文件夾',num2str(dirSourceList(numDirList).name)]);

disp(['拷貝',num2str(partitionPosition),'張圖片到val文件夾下子文件夾',num2str(dirSourceList(numDirList).name),'中']);

%不知道這種拷貝東西到別的地方,是先拷貝數(shù)據(jù)量比較多的部分,還是數(shù)據(jù)量比較少的部分,這有什么講究。

%在目標(biāo)val文件夾中,創(chuàng)建對(duì)應(yīng)的子文件夾

pathCreValDir=[pathCreDirVal,dirSourceList(numDirList).name,'\'];

mkdir(pathCreValDir);

%在程序中增加一些輸出信息,方便查看程序執(zhí)行進(jìn)度

disp(['復(fù)制測(cè)試數(shù)據(jù)到val子文件夾',num2str(dirSourceList(numDirList).name),'中']);

%復(fù)制圖片到指定路徑

for picNum=1:partitionPosition%由于是要讀取numFileList中生成的隨機(jī)數(shù)據(jù),所以從1開(kāi)始

copyfile([pathSource,'\',dirSourceList(numDirList).name,'\',fileName(numFileList(picNum)).name], ...

pathCreValDir);

end

%%

%拷貝訓(xùn)練集數(shù)據(jù)train

%在程序中增加一些輸出信息,方便查看程序執(zhí)行進(jìn)度

disp(['在train文件夾下創(chuàng)建子文件夾',num2str(dirSourceList(numDirList).name)]);

disp(['拷貝',num2str(fileNum-partitionPosition),'張圖片到train文件夾下子文件夾',num2str(dirSourceList(numDirList).name),'中']);

%在目標(biāo)train文件夾中,創(chuàng)建對(duì)應(yīng)的子文件夾

pathCreTrainDir=[pathCreDirTrain,dirSourceList(numDirList).name,'\'];

mkdir(pathCreTrainDir);

%在程序中增加一些輸出信息,方便查看程序執(zhí)行進(jìn)度

disp(['復(fù)制訓(xùn)練數(shù)據(jù)到Train子文件夾',num2str(dirSourceList(numDirList).name),'中']);

%復(fù)制圖片到指定路徑

for picNum=partitionPosition+1:fileNum%由于是要讀取numFileList中生成的隨機(jī)數(shù)據(jù),所以從1開(kāi)始

copyfile([pathSource,'\',dirSourceList(numDirList).name,'\',fileName(numFileList(picNum)).name], ...

pathCreTrainDir);

end

end

disp('數(shù)據(jù)拷貝完畢');

%%

%生成label

disp('開(kāi)始生成label');

%考慮到最好寫個(gè)程序,能夠一步完整所有操作。所以在這程序下面加上生成label的功能

%在上面的程序中,已經(jīng)有變量pathCreDirTrain(目標(biāo)Train的路徑)、pathCreDirVal(目標(biāo)Val的路徑)

%先生成train文件夾中的label

disp('開(kāi)始生成trainlabel');

dirTrainList=dir(pathCreDirTrain);%讀取文件夾列表,這種方式讀取會(huì)保留原文件.(在結(jié)構(gòu)體中第一個(gè))和上一層目錄..(在結(jié)構(gòu)體第二個(gè))

countTrainList=length(dirTrainList);%文件夾個(gè)數(shù)

fid = fopen([pathDestination,'\','train.txt'], 'w');%打開(kāi)train文件夾時(shí),對(duì)應(yīng)的文本文件

for numList=3:countTrainList%文件夾從3開(kāi)始

if(length(dirTrainList(numList).name)>=2)%根據(jù)這個(gè)過(guò)濾掉在此文件夾可能的train.txt文件

continue;

end

fileName=dir([pathCreDirTrain,'\',dirTrainList(numList).name]);%讀取子文件夾

fileSum=length(fileName);%統(tǒng)計(jì)子文件夾中的文件個(gè)數(shù)

for fileNum=3:fileSum%文件從3開(kāi)始

fprintf(fid,'%s', [dirTrainList(numList).name,'/',fileName(fileNum).name]);%輸入:子文件/圖片名稱

fprintf(fid,'%s', ' ');%空格間隔符

fprintf(fid,'%d', str2double(dirTrainList(numList).name));%加入label,即文件夾名稱

fprintf(fid,'\n');%換行

end

end

fclose(fid);%關(guān)閉文本文件

fclose('all');%關(guān)閉所有連接,防止沒(méi)關(guān)掉的情況

disp('trainlabel生成完畢');

%在上面的程序中,已經(jīng)有變量pathCreDirTrain(目標(biāo)Train的路徑)、pathCreDirVal(目標(biāo)Val的路徑)

%先生成train文件夾中的label

disp('開(kāi)始生成vallabel');

dirValList=dir(pathCreDirVal);%讀取文件夾列表,這種方式讀取會(huì)保留原文件.(在結(jié)構(gòu)體中第一個(gè))和上一層目錄..(在結(jié)構(gòu)體第二個(gè))

countValList=length(dirValList);%文件夾個(gè)數(shù)

fid = fopen([pathDestination,'\','val.txt'], 'w');%打開(kāi)train文件夾時(shí),對(duì)應(yīng)的文本文件

for numList=3:countValList%文件夾從3開(kāi)始

if(length(dirValList(numList).name)>=2)%根據(jù)這個(gè)過(guò)濾掉在此文件夾可能的train.txt文件

continue;

end

fileName=dir([pathCreDirVal,'\',dirValList(numList).name]);%讀取子文件夾

fileSum=length(fileName);%統(tǒng)計(jì)子文件夾中的文件個(gè)數(shù)

for fileNum=3:fileSum%文件從3開(kāi)始

fprintf(fid,'%s', [dirValList(numList).name,'/',fileName(fileNum).name]);%輸入:子文件/圖片名稱

fprintf(fid,'%s', ' ');%空格間隔符

fprintf(fid,'%d', str2double(dirValList(numList).name));%加入label,即文件夾名稱

fprintf(fid,'\n');%換行

end

end

fclose(fid);%關(guān)閉文本文件

fclose('all');%關(guān)閉所有連接,防止沒(méi)關(guān)掉的情況

disp('vallabel生成完畢');

總結(jié)

以上是生活随笔為你收集整理的matlab划分训练集验证和测试集代码_数据集划分为训练集和测试集并生成标签--matlab代码...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。