[Dt,A,~] = digitTrain4DArrayData [Dv,B,~] = digitTest4​DArrayData​に入れたときにcas​tでクラス変換をdo​uble型にしたのに​digitTrain​4DArrayDat​aに入れるとカテゴラ​イズ型になってしまう

3 views (last 30 days)
imds = imageDatastore('機械学習500',"IncludeSubfolders",true,"LabelSource","foldernames");
[xtrain,xval] = splitEachLabel(imds,0.5,"randomized");
xtrainimg = augmentedImageDatastore([28 28 1],xtrain,"ColorPreprocessing","gray2rgb");
xvalimg = augmentedImageDatastore([28 28 1],xval,"ColorPreprocessing","gray2rgb");
whos xval;
whos imds;
T = imshow(readimage(imds,1));
whos T
Dt= zeros(128,128,1,2500);
Dv = zeros(128,128,1,2500);
for i=1:numel(xtrainimg.Files)
I = imread (xtrainimg.Files{i});
Dt(:,:,1,i) = I;
II = imread (xvalimg.Files{i});
Dv(:,:,:,i) = II;
end
whos Dt
data = readall(xtrainimg);
trainfiles = data.input;
trainres = data.response;
A = cast(trainres,"unit8")
whos trainres
%size trainres
whos A
data1 = readall(xvalimg);
valfile = data1.input;
valB = data1.response;
B = cast(valB,"unit8")
%ytraining = categorical(data);
%yval = categorical(data1);
[Dt,A,~] = digitTrain4DArrayData
[Dv,B,~] = digitTest4DArrayData
[Dt,A,~] = digitTrain4DArrayData [Dv,B,~] = digitTest4DArrayData 
変数Aに割り建てられた値が使われず反映されていません。Bも同様です。どうやって digitTrain4DArrayData 等に入れたときにA,Bnidouble型で反映させるのかご教示してほしいです。お願いします。
  1 Comment
Atsushi Ueno
Atsushi Ueno on 3 Jul 2022
  • digitTest4DArrayData関数は「深層学習用のデータセット」の内「数字データセット」を読み込みます
  • (MATLABルート)/toolbox/nnet/nndemos/nndatasets/DigitDataset/ 内の数字画像を読み取っています
  • 角度情報(各画像が何度傾いているか)は、別途保存されているcsvファイルから読み込みます
  • splitEachLabel関数は使わず、既存の学習用/検証用の画像リストをtableデータとして読み込みます
  • ラベル(数字情報)はimageDatastore関数でフォルダ名をラベルとして読み込みます
  • (↑csvファイルにもラベルが記録されていますが、何故かそれは使わずimdsから取得しています)
type digitTrain4DArrayData
function [images, digits, angles] = digitTrain4DArrayData % digitTrain4DArrayData Load the digit training set as 4-D array data % % images - Input data as an H-by-W-by-C-by-N array, where H is the % height and W is the width of the images, C is the number % of channels, and N is the number of images. % digits - Categorical vector containing the labels for each % observation. % angles - Numeric vector containing the angle of rotation in % degrees for each image. % Copyright 2016 The MathWorks, Inc. [images, digits, angles] = digitTableToArray(digitTrainTable); end
type digitTableToArray
function [images, digits, angles] = digitTableToArray( aDigitTable ) % digitTableToArray Convert a table containing a digit dataset into a 4-D % array % % Inputs % aDigitTable - A table containing training or test digit dataset. % % Outputs % images - Input data as an H-by-W-by-C-by-N array, where H is the % height and W is the width of the images, C is the number of % channels, and N is the number of images. % digits - Categorical vector containing the label of the digit for each % observation. % angles - Numeric vector containing the angle of rotation in % degrees for each image. % Copyright 2016 The MathWorks, Inc. imagePaths = iGetFullDigitPaths( aDigitTable ); digitImds = imageDatastore( imagePaths, 'LabelSource', 'foldernames' ); [images, digits] = imds2array(digitImds); angles = aDigitTable.angle; end function imagePaths = iGetFullDigitPaths( aDigitTable ) % Base digit path digitPath = fullfile( matlabroot, 'toolbox', 'nnet', 'nndemos', 'nndatasets', 'DigitDataset' ); % Add digit folder to path name imagePaths = strcat(num2str(aDigitTable.digit), filesep, aDigitTable.image); % Add full path imagePaths = cellfun(@(s)strcat(digitPath,filesep,s),imagePaths,'UniformOutput',false); end
type digitTrainTable
function trainTable = digitTrainTable digitTrainCSVPath = fullfile( matlabroot, 'toolbox', 'nnet', 'nndemos', 'nndatasets', 'DigitDataset', 'digitTrain.csv' ); trainTable = readtable( digitTrainCSVPath, 'Delimiter', ',' ); end
trainTable = readtable('/MATLAB/toolbox/nnet/nndemos/nndatasets/DigitDataset/digitTrain.csv')
trainTable = 5000×3 table
image digit angle _________________ _____ _____ {'image2119.png'} 3 -42 {'image2593.png'} 3 -15 {'image6703.png'} 7 -24 {'image6950.png'} 7 -44 {'image6462.png'} 7 13 {'image6667.png'} 7 21 {'image8677.png'} 9 19 {'image8651.png'} 9 -35 {'image6557.png'} 7 -40 {'image6965.png'} 7 23 {'image2437.png'} 3 27 {'image8313.png'} 9 -17 {'image8182.png'} 9 -35 {'image6543.png'} 7 -13 {'image2722.png'} 3 -33 {'image6701.png'} 7 43

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 3 Jul 2022
>変数Aに割り建てられた値が使われず反映されていません。Bも同様です。
コメントに書いた通りdigitTest4DArrayData関数は「数字データセット」を読み込む関数です。DtやAなど「機械学習500」由来のデータが「数字データセット」由来のデータにより上書きされてしまっています。
>どうやって digitTrain4DArrayData 等に入れたときにA,Bnidouble型で反映させるのかご教示してほしいです
⇒単にcategorical型をdouble型に変換するのであれば、質問のプログラムで実行しているのと同様にキャストすれば良いです
% A = cast(trainres,"unit8")
「数字データセット」の"digits"(画像が0-9のどの数字かを示すcategorical型ラベル)をdouble型として得たいのであれば
[images, digits, angles] = digitTrain4DArrayData;
categories(digits)
但し、categorical型は列挙型と同じで、数値に変換すると元の離散カテゴリが持っていた情報が失われてしまいます。数字のラベルは0~9で、MATLABはデフォルトで1ベースなのでこれを数字に変換すると1~10になってしまいます。数値に変換後1を減算すればこれらが一致します。
double(digits) - 1; % categorical型ラベル'0'-'9'を数値0-9に変換

More Answers (0)

Categories

Find more on Convert Image Type in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!