畳み込みニューラル ネットワークの層の指定
深層学習モデルはさまざまな方法で構築およびカスタマイズできます。たとえば、事前学習済みモデルをインポートして適応したり、ネットワークを最初から構築したり、深層学習モデルを関数として定義したりできます。
大抵の場合、さまざまなタイプの深層学習モデルを層のニューラル ネットワークとして指定し、関数 trainnet を使用して学習させることができます。層の一覧およびその作成方法については、深層学習層の一覧を参照してください。
層が直列に接続されたシンプルなニューラル ネットワークの場合、アーキテクチャを層の配列として指定できます。たとえば、28×28 のグレースケール イメージを 10 個のクラスに分類するニューラル ネットワークを作成するには、次の層配列を指定します。
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(5,20)
batchNormalizationLayer
reluLayer
fullyConnectedLayer(10)
softmaxLayer];分岐をもつニューラル ネットワークなど、より複雑な構造のニューラル ネットワークの場合は、ニューラル ネットワークを dlnetwork オブジェクトとして指定できます。関数 addLayers および関数 connectLayers をそれぞれ使用して、層を追加および結合できます。たとえば、224×224 の RGB イメージと 64×64 のグレースケール イメージのペアを 10 個のクラスに分類する多入力ネットワークを作成するには、次のニューラル ネットワークを指定します。
net = dlnetwork;
layers = [
imageInputLayer([224 224 3])
convolution2dLayer(5,128)
batchNormalizationLayer
reluLayer
flattenLayer
concatenationLayer(1,2,Name="cat")
fullyConnectedLayer(10)
softmaxLayer];
net = addLayers(net,layers);
layers = [
imageInputLayer([64 64 1])
convolution2dLayer(5,128)
batchNormalizationLayer
reluLayer
flattenLayer(Name="flatten2")];
net = addLayers(net,layers);
net = connectLayers(net,"flatten2","cat/in2");figure plot(net)
層のネットワークとして指定できないモデルの場合は、モデルを関数として定義できます。関数として定義される深層学習モデルの学習を行う方法を示す例については、モデル関数を使用したネットワークの学習を参照してください。
参考
trainnet | trainingOptions | dlnetwork