ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

クラウドへの深層学習データのアップロード

この例では、Amazon S3 バケットにデータをアップロードする方法を説明します。クラウドで深層学習を実行するには、データをクラウドにアップロードする必要があります。この例では、CIFAR-10 データセットをコンピューターにダウンロードし、後で MATLAB で使用できるように、Amazon S3 バケットにアップロードする方法を説明します。CIFAR-10 データセットはイメージ分類アルゴリズムのベンチマークによく使用されるラベル付きのイメージ データセットです。この例を実行する前に、Amazon Web Services (AWS) アカウントへのアクセスが必要です。このデータセットが Amazon S3 にアップロードされた後、並列およびクラウドでの深層学習 (Deep Learning Toolbox)のすべての例を試すことができます。

ローカル マシンへの CIFAR-10 のダウンロード

補助関数を使用して、ローカル マシンに CIFAR-10 データセットをダウンロードします。データセットのダウンロード元の URL とダウンロード先のローカル ディレクトリを指定します。次のコードは現在のディレクトリにデータセットのすべてのイメージを含むフォルダーを作成します。

url = 'https://www.cs.toronto.edu/~kriz/cifar-10-matlab.tar.gz';
directory = pwd;
getCIFAR10Data(url,directory);

Amazon S3 バケットへのローカル データセットのアップロード

クラウド上でデータを処理するには、Amazon S3 にアップロードしてから、データ ストアを使用してクラスター内のワーカーから S3 内のデータにアクセスします。CIFAR-10 をローカル マシンから Amazon S3 バケットにアップロードするには、次の手順に従います。

1.Amazon S3 とのファイルの送受信を効率化するために、https://aws.amazon.com/cli/ から AWS コマンド ライン インターフェイス ツールをダウンロードしてインストールします。

2.AWS のアクセス キー ID、シークレット アクセス キー、およびバケットのリージョンをシステム環境変数として指定します。キーを取得するには、AWS アカウント管理者に問い合わせてください。

たとえば、Linux、macOS、Unix の場合:

export AWS_ACCESS_KEY_ID="YOUR_AWS_ACCESS_KEY_ID"
export AWS_SECRET_ACCESS_KEY="YOUR_AWS_SECRET_ACCESS_KEY"
export AWS_REGION="us-east-1"

Windows の場合:

set AWS_ACCESS_KEY_ID="YOUR_AWS_ACCESS_KEY_ID"
set AWS_SECRET_ACCESS_KEY="YOUR_AWS_SECRET_ACCESS_KEY"
set AWS_REGION="us-east-1"

これらの環境変数を恒久的に設定するには、お使いのユーザーまたはシステム環境に設定します。

3.データ用のバケットを作成します。AWS S3 の Web ページを使用するか、次のようなコマンドを使用します。

aws s3 mb s3://mynewbucket

4.次のようなコマンドを使用してデータをアップロードします。

aws s3 cp mylocaldatapath s3://mynewbucket --recursive

以下に例を示します。

aws s3 cp path/to/CIFAR10/in/the/local/machine s3://MyExampleCloudData/cifar10/ --recursive

5.クラウド クラスターを作成した後、AWS 認証情報をクラスター ワーカーにコピーするために MATLAB で [並列]、[クラスター プロファイルの管理] を選択します。クラスター プロファイル マネージャーで、クラウド クラスター プロファイルを選択します。EnvironmentVariables プロパティまでスクロールし、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY、AWS_REGION を追加します。

MATLAB でのデータセットの使用

データを Amazon S3 に保存した後、データ ストアを使用してクラスター ワーカーからデータにアクセスできます。S3 バケットの URL をポイントするデータ ストアを作成します。たとえば、次のサンプル コードは imageDatastore を使用して S3 バケットにアクセスします。's3://MyExampleCloudData/cifar10/train' を S3 バケットの URL に置き換えます。

imds = imageDatastore('s3://MyExampleCloudData/cifar10/train', ...
 'IncludeSubfolders',true, ...
 'LabelSource','foldernames');

いくつかのユースケースで Amazon S3 上の CIFAR-10 の使用方法を説明している並列およびクラウドでの深層学習 (Deep Learning Toolbox)の例をいずれでも試すことができます。

CIFAR-10 をダウンロードする補助関数の定義

CIFAR-10 データセットをダウンロードする補助関数を作成します。この関数は複数のローカル フォルダーを作成し、それらのフォルダーに CIFAR-10 のイメージを保存します。

function getCIFAR10Data(url,directory)
% This a helper function to obtain CIFAR-10 and store it locally.
% The function copies the training and test data sets into a folder called "cifar10" in
% the provided directory.

% Download the MAT files containing the data set in the given
% directory. Use the helperCIFAR10Data helper function for this.
helperCIFAR10Data.download(url,directory);

% Create the training and test directories where the images will be stored.
outputDirectory = fullfile(directory,'cifar10');
trainDirectory = fullfile(outputDirectory,'train');
testDirectory = fullfile(outputDirectory,'test');

mkdir(outputDirectory);
mkdir(trainDirectory);
mkdir(testDirectory);

% Create subdirectories for each of the category folders.
labelNames = {'airplane','automobile','bird','cat','deer','dog', ...
    'frog','horse','ship','truck'};
makeDirectories(trainDirectory,labelNames);
makeDirectories(testDirectory,labelNames);

% The helper function creates several MAT files containing the images. Process
% them and save the images into local folders.
for i = 1:5
    fileToLoad = fullfile('cifar-10-batches-mat', ...
        ['data_batch_' num2str(i) '.mat']);
    saveImagesToFolders(fileToLoad,trainDirectory,labelNames,(i-1)*10000);
end
fileToLoad = fullfile('cifar-10-batches-mat','test_batch.mat');
saveImagesToFolders(fileToLoad,testDirectory,labelNames,0);

    function makeDirectories(outputPath,directoryNames)
        % Creates directories in outputPath with the names in
        % directoryNames.
        for i = 1:numel(directoryNames)
            mkdir(fullfile(outputPath,directoryNames{i}));
        end
    end

    function saveImagesToFolders(inputFilePath,outputPath,labelNames,nameOffset)
        % Loads a MAT file containing images from the data set and saves them
        % to the corresponding category folder.
        % Load the MAT file into variables.
        S = load(inputFilePath);
        data = S.data;
        labels = S.labels;
        % The image data in the MAT files needs to be processed with
        % transpositions, reshaping and permutations.
        data = data';
        data = reshape(data, 32,32,3,[]);
        data = permute(data, [2 1 3 4]);
        % Iterate through all of the images and save them in the directory.
        % Use a name based on the index of the image.
        for i = 1:size(data,4)
            outputFilename = fullfile(outputPath,labelNames{labels(i)+1}, ...
                ['image' num2str(i + nameOffset) '.png']);
            imwrite(data(:,:,:,i),outputFilename);
        end
    end
end
Downloading CIFAR-10 data set (175 MB). This can take a while...

参考

関連するトピック