featureInputLayer
説明
特徴入力層は、特徴データをニューラル ネットワークに入力し、データ正規化を適用します。特徴 (空間次元または時間次元のないデータ) を表す数値スカラーのデータ セットがある場合は、この層を使用します。
イメージ入力の場合、imageInputLayer
を使用します。
作成
プロパティ
特徴入力
InputSize
— 特徴数
正の整数
データに含まれる各観測値の特徴数。正の整数として指定します。
イメージ入力の場合、imageInputLayer
を使用します。
Normalization
— データ正規化
"none"
(既定値) | "zerocenter"
| "zscore"
| "rescale-symmetric"
| "rescale-zero-one"
| 関数ハンドル
データが入力層を通じて順伝播されるたびに適用するデータ正規化。次のいずれかに指定します。
"zerocenter"
—Mean
によって指定された平均を減算します。"zscore"
—Mean
によって指定された平均を減算し、StandardDeviation
で除算します。"rescale-symmetric"
—Min
およびMax
によってそれぞれ指定された最小値と最大値を使用して、範囲 [-1, 1] に入力を再スケーリングします。"rescale-zero-one"
—Min
およびMax
によってそれぞれ指定された最小値と最大値を使用して、範囲 [0, 1] に入力を再スケーリングします。"none"
— 入力データを正規化しません。関数ハンドル — 指定した関数を使用してデータを正規化します。関数は、
Y = f(X)
という形式でなければなりません。ここで、X
は入力データ、出力Y
は正規化データです。
入力データが複素数値で、SplitComplexInputs
オプションが 0
(false
) の場合、Normalization
オプションは、"zerocenter"
、"zscore"
、"none"
、または関数ハンドルでなければなりません。 (R2024a 以降)
R2024a より前: 複素数値のデータをネットワークに入力するには、SplitComplexInputs
オプションが 1
(true
) でなければなりません。
ヒント
既定では、ソフトウェアは、関数 trainnet
の使用時に正規化統計量を自動的に計算します。学習時に時間を節約するため、正規化に必要な統計量を指定し、trainingOptions
で ResetInputNormalization
オプションを 0
(false
) に設定します。
FeatureInputLayer
オブジェクトは、このプロパティを文字ベクトルまたは関数ハンドルとして格納します。
NormalizationDimension
— 正規化の次元
"auto"
(既定値) | "channel"
| "all"
正規化の次元。次のいずれかに指定します。
"auto"
– 学習オプションが0
(false
) の場合、いずれかの正規化統計量 (Mean
、StandardDeviation
、Min
、またはMax
) を指定し、統計量に一致する次元に対して正規化を行います。そうでない場合、学習時に統計量を再計算し、チャネル単位の正規化を適用します。"channel"
– チャネル単位の正規化。"all"
– スカラーの統計量を使用してすべての値を正規化します。
FeatureInputLayer
オブジェクトは、このプロパティを文字ベクトルとして格納します。
Mean
— ゼロ中心正規化および z スコア正規化の平均
[]
(既定値) | 列ベクトル | 数値スカラー
ゼロ中心正規化および z スコア正規化の平均。特徴ごとの平均から成る 1 行 numFeatures
列のベクトル、数値スカラー、または []
として指定します。
Mean
プロパティを指定するには、Normalization
プロパティが "zerocenter"
または "zscore"
でなければなりません。Mean
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、学習データを使用して平均を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを0
に設定します。
Mean
に複素数値を使用できます。 (R2024a 以降)Mean
が複素数値の場合、SplitComplexInputs
オプションは 0
(false
) でなければなりません。
R2024a より前: 平均を実数部と虚数部に分割し、入力データが実数部と虚数部に分割されるように SplitComplexInputs
オプションを 1
(true
) に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
StandardDeviation
— z スコア正規化の標準偏差
[]
(既定値) | 列ベクトル | 数値スカラー
z スコア正規化の標準偏差。特徴ごとの平均から成る 1 行 numFeatures
列のベクトル、数値スカラー、または []
として指定します。
StandardDeviation
プロパティを指定するには、Normalization
プロパティが "zscore"
でなければなりません。StandardDeviation
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、学習データを使用して標準偏差を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを1
に設定します。
StandardDeviation
に複素数値を使用できます。 (R2024a 以降)StandardDeviation
が複素数値の場合、SplitComplexInputs
オプションは 0
(false
) でなければなりません。
R2024a より前: 標準偏差を実数部と虚数部に分割し、入力データが実数部と虚数部に分割されるように SplitComplexInputs
オプションを 1
(true
) に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
Min
— 再スケーリングの最小値
[]
(既定値) | 列ベクトル | 数値スカラー
再スケーリングの最小値。特徴ごとの最小値から成る 1 行 numFeatures
列のベクトル、数値スカラー、または []
として指定します。
Min
プロパティを指定するには、Normalization
が "rescale-symmetric"
または "rescale-zero-one"
でなければなりません。Min
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、学習データを使用して最小値を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、Normalization
が"rescale-symmetric"
の場合はプロパティを-1
に設定し、"rescale-zero-one"
の場合はプロパティを0
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Max
— 再スケーリングの最大値
[]
(既定値) | 列ベクトル | 数値スカラー
再スケーリングの最大値。特徴ごとの最大値から成る 1 行 numFeatures
列のベクトル、数値スカラー、または []
として指定します。
Max
プロパティを指定するには、Normalization
が "rescale-symmetric"
または "rescale-zero-one"
でなければなりません。Max
が []
の場合、学習時または初期化時にプロパティが自動的に設定されます。
関数
trainnet
は、学習データを使用して最大値を計算し、結果の値を使用します。Initialize
オプションが1
(true
) の場合、関数initialize
および関数dlnetwork
は、プロパティを1
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SplitComplexInputs
— 入力データを実数部と虚数部に分割するためのフラグ
0
(false
) (既定値) | 1
(true
)
この プロパティ は読み取り専用です。
入力データを実数部と虚数部に分割するためのフラグ。次のいずれかの値として指定します。
0
(false
) – 入力データを分割しません。1
(true
) – 入力データを実数部と虚数部に分割します。
SplitComplexInputs
が 1
の場合、層の出力に含まれるチャネル数は、入力データに含まれるチャネル数の 2 倍になります。たとえば、入力データが numChannels
個のチャネルをもつ複素数値の場合、層は 2*numChannels
個のチャネルをもつデータを出力します。このとき、1
~ numChannels
番目のチャネルには入力データの実数部が格納され、numChannels+1
~ 2*numChannels
番目のチャネルには入力データの虚数部が格納されます。入力データが実数の場合、numChannels+1
~ 2*numChannels
番目のチャネルはすべて 0 になります。
入力データが複素数値で、SplitComplexInputs
が 0
(false
) の場合、層は複素数値のデータを次の層に渡します。 (R2024a 以降)
R2024a より前: 複素数値のデータをニューラル ネットワークに入力するには、入力層の SplitComplexInputs
オプションが 1
(true
) でなければなりません。
複素数値のデータをもつネットワークに学習させる方法を説明する例については、複素数値データを使用したネットワークの学習を参照してください。
層
NumInputs
— 入力の数
0 (既定値)
この プロパティ は読み取り専用です。
層の入力の数。この層には入力がありません。
データ型: double
InputNames
— 入力名
{}
(既定値)
この プロパティ は読み取り専用です。
層の入力名。この層には入力がありません。
データ型: cell
NumOutputs
— 出力の数
1
(既定値)
この プロパティ は読み取り専用です。
層からの出力の数。1
として返されます。この層には単一の出力のみがあります。
データ型: double
OutputNames
— 出力名
{'out'}
(既定値)
この プロパティ は読み取り専用です。
出力名。{'out'}
として返されます。この層には単一の出力のみがあります。
データ型: cell
例
特徴入力層の作成
21 個の特徴をもつ観測値について、名前が 'input'
である特徴入力層を作成します。
layer = featureInputLayer(21,'Name','input')
layer = FeatureInputLayer with properties: Name: 'input' InputSize: 21 SplitComplexInputs: 0 Hyperparameters Normalization: 'none' NormalizationDimension: 'auto'
特徴入力層を Layer
配列に含めます。
numFeatures = 21; numClasses = 3; layers = [ featureInputLayer(numFeatures,'Name','input') fullyConnectedLayer(numClasses, 'Name','fc') softmaxLayer('Name','sm') classificationLayer('Name','classification')]
layers = 4x1 Layer array with layers: 1 'input' Feature Input 21 features 2 'fc' Fully Connected 3 fully connected layer 3 'sm' Softmax softmax 4 'classification' Classification Output crossentropyex
イメージ入力層と特徴入力層の結合
入力イメージのサイズ、各観測値の特徴の数、クラスの数、畳み込み層のフィルターのサイズと数を定義します。
imageInputSize = [28 28 1]; numFeatures = 1; numClasses = 10; filterSize = 5; numFilters = 16;
入力が 2 つあるネットワークを作成するには、ネットワークを 2 つの部分で定義して、それらを連結層を使用するなどして結合します。
dlnetwork
オブジェクトを作成します。
net = dlnetwork;
ネットワークの最初の部分を定義します。イメージ分類層を定義し、最後の全結合層の前にフラット化層と連結層を含めます。
layers = [ imageInputLayer(imageInputSize,Normalization="none") convolution2dLayer(filterSize,numFilters,Name="conv") reluLayer fullyConnectedLayer(50) flattenLayer concatenationLayer(1,2,Name="concat") fullyConnectedLayer(numClasses) softmaxLayer]; net = addLayers(net,layers);
ネットワークの 2 番目の部分については、特徴入力層を追加し、それを連結層の 2 番目の入力に結合します。
featInput = featureInputLayer(numFeatures,Name="features"); net = addLayers(net,featInput); net = connectLayers(net,"features","concat/in2")
net = dlnetwork with properties: Layers: [9x1 nnet.cnn.layer.Layer] Connections: [8x2 table] Learnables: [6x3 table] State: [0x3 table] InputNames: {'imageinput' 'features'} OutputNames: {'softmax'} Initialized: 0 View summary with summary.
ネットワークを可視化します。
plot(net)
表形式データを使用したネットワークの学習
数値特徴量のデータ セット (空間次元や時間次元のない表形式データなど) がある場合、特徴入力層を使用して深層ニューラル ネットワークに学習させることができます。
CSV ファイル "transmissionCasingData.csv"
からトランスミッション ケーシング データを読み取ります。
filename = "transmissionCasingData.csv"; tbl = readtable(filename,TextType="String");
関数 convertvars
を使用して、予測のラベルを categorical に変換します。
labelName = "GearToothCondition"; tbl = convertvars(tbl,labelName,"categorical");
カテゴリカル特徴量を使用してネットワークに学習させるには、最初にカテゴリカル特徴量を数値に変換しなければなりません。まず、関数 convertvars
を使用して、すべてのカテゴリカル入力変数の名前を格納した string 配列を指定することにより、カテゴリカル予測子を categorical に変換します。このデータ セットには、"SensorCondition"
と "ShaftCondition"
という名前の 2 つのカテゴリカル特徴量があります。
categoricalPredictorNames = ["SensorCondition" "ShaftCondition"]; tbl = convertvars(tbl,categoricalPredictorNames,"categorical");
カテゴリカル入力変数をループ処理します。各変数について、関数 onehotencode
を使用して categorical 値を one-hot 符号化ベクトルに変換します。
for i = 1:numel(categoricalPredictorNames) name = categoricalPredictorNames(i); tbl.(name) = onehotencode(tbl.(name),2); end
table の最初の数行を表示します。カテゴリカル予測子が複数の列に分割されていることに注意してください。
head(tbl)
SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis SensorCondition ShaftCondition GearToothCondition ________ _________ ______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ ________ ________________ _______________ ______________ __________________ -0.94876 -0.9722 1.3726 0.98387 0.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1429 0.031581 79.931 0 6.75e-06 3.23e-07 162.13 0 1 1 0 No Tooth Fault -0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.037835 70.325 0 5.08e-08 9.16e-08 226.12 0 1 1 0 No Tooth Fault 1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031565 125.19 0 6.74e-06 2.85e-07 162.13 0 1 0 1 No Tooth Fault 1.0227 1.0045 1.4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032088 112.5 0 4.99e-06 2.4e-07 162.13 0 1 0 1 No Tooth Fault 1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.1469 0.03287 108.86 0 3.62e-06 2.28e-07 230.39 0 1 0 1 No Tooth Fault 1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 0.81589 31102 1.0985 0.033427 64.576 0 2.55e-06 1.65e-07 230.39 0 1 0 1 No Tooth Fault 1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034159 98.838 0 1.73e-06 1.55e-07 230.39 0 1 0 1 No Tooth Fault 1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.0353 44.223 0 1.11e-06 1.39e-07 230.39 0 1 0 1 No Tooth Fault
データ セットのクラス名を表示します。
classNames = categories(tbl{:,labelName})
classNames = 2x1 cell
{'No Tooth Fault'}
{'Tooth Fault' }
テスト用のデータを確保します。データの 85% から成る学習セットとデータの残りの 15% から成るテスト セットにデータを分割します。データを分割するには、この例にサポート ファイルとして添付されている関数 trainingPartitions
を使用します。このファイルにアクセスするには、例をライブ スクリプトとして開きます。
numObservations = size(tbl,1); [idxTrain,idxTest] = trainingPartitions(numObservations,[0.85 0.15]); tblTrain = tbl(idxTrain,:); tblTest = tbl(idxTest,:);
関数 trainnet
がサポートする形式にデータを変換します。予測子とターゲットをそれぞれ数値配列と categorical 配列に変換します。特徴量を入力する場合、ネットワークは、観測値に対応する行と特徴量に対応する列をもつデータを必要とします。データのレイアウトがこれとは異なる場合、このレイアウトになるようにデータを前処理するか、データ形式を使用してレイアウト情報を指定します。詳細については、Deep Learning Data Formatsを参照してください。
predictorNames = ["SigMean" "SigMedian" "SigRMS" "SigVar" "SigPeak" "SigPeak2Peak" ... "SigSkewness" "SigKurtosis" "SigCrestFactor" "SigMAD" "SigRangeCumSum" ... "SigCorrDimension" "SigApproxEntropy" "SigLyapExponent" "PeakFreq" ... "HighFreqPower" "EnvPower" "PeakSpecKurtosis" "SensorCondition" "ShaftCondition"]; XTrain = table2array(tblTrain(:,predictorNames)); TTrain = tblTrain.(labelName); XTest = table2array(tblTest(:,predictorNames)); TTest = tblTest.(labelName);
特徴入力層を使用してネットワークを定義し、特徴の数を指定します。また、z スコア正規化を使用してデータを正規化するように入力層を構成します。
numFeatures = size(XTrain,2);
numClasses = numel(classNames);
layers = [
featureInputLayer(numFeatures,Normalization="zscore")
fullyConnectedLayer(16)
layerNormalizationLayer
reluLayer
fullyConnectedLayer(numClasses)
softmaxLayer];
学習オプションを指定します。
L-BFGS ソルバーを使用して学習させます。このソルバーは、ネットワークが小さくデータがメモリに収まるタスクに適しています。
CPU を使用して学習させます。ネットワークとデータが小さいため、CPU の方がより適しています。
学習の進行状況をプロットに表示します。
詳細出力を非表示にします。
options = trainingOptions("lbfgs", ... ExecutionEnvironment="cpu", ... Plots="training-progress", ... Verbose=false);
関数 trainnet
を使用してネットワークに学習させます。分類には、クロスエントロピー損失を使用します。
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
学習済みネットワークを使用してテスト データのラベルを予測します。学習済みネットワークを使用して分類スコアを予測し、関数 onehotdecode
を使用して予測結果をラベルに変換します。
YTest = minibatchpredict(net,XTest); YTest = onehotdecode(YTest,classNames,2);
混同チャートで予測を可視化します。
confusionchart(TTest,YTest)
分類精度を計算します。この精度は、ネットワークが正しく予測するラベルの割合です。
accuracy = mean(YTest == TTest)
accuracy = 1
アルゴリズム
層の出力形式
層配列内または層グラフ内の層は、形式を整えた dlarray
オブジェクトとして後続の層にデータを渡します。dlarray
オブジェクトの形式は文字列で、各文字はデータ内の対応する次元を表します。この形式には次の文字が 1 つ以上含まれています。
"S"
— 空間"C"
— チャネル"B"
— バッチ"T"
— 時間"U"
— 指定なし
たとえば、表形式データを、最初の次元と 2 番目の次元がそれぞれバッチ次元とチャネル次元に対応する 2 次元の配列として表すことができます。この表現は、"BC"
(channel、batch) の形式になります。
ネットワークの入力層は、ネットワークで必要とされるデータのレイアウトを指定します。データのレイアウトが異なる場合、InputDataFormats
学習オプションを使用してレイアウトを指定します。
層は、N 行 c 列の配列をネットワークに入力します。ここで、N および c は、それぞれデータの観測値とチャネルの数です。このレイアウトのデータは、"BC"
(batch、channel) のデータ形式になります。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
コード生成では、複素数の入力がサポートされておらず、
'SplitComplexInputs'
オプションもサポートされていません。
GPU コード生成
GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。
GPU Coder™ を使用して CUDA® または C++ コードを生成するには、最初に深層ニューラル ネットワークを構築して学習させなければなりません。ネットワークの学習と評価が完了したら、コード ジェネレーターを構成してコードを生成し、NVIDIA® または ARM® GPU プロセッサを使用するプラットフォームに畳み込みニューラル ネットワークを展開できます。詳細については、GPU Coder を使用した深層学習 (GPU Coder)を参照してください。
コード生成では、複素数の入力がサポートされておらず、
'SplitComplexInputs'
オプションもサポートされていません。
バージョン履歴
R2020b で導入R2024a: 複素数値の出力
ニューラル ネットワークへの入力が複素数値の場合、SplitComplexIputs
が 0
(false
) のとき、層は複素数値のデータを後続の層に渡します。
入力データが複素数値で、SplitComplexInputs
オプションが 0
(false
) の場合、Normalization
オプションは、"zerocenter"
、"zscore"
、"none"
、または関数ハンドルでなければなりません。層の Mean
プロパティおよび StandardDeviation
プロパティでは、正規化オプション "zerocenter"
および "zscore"
に複素数値のデータを使用することもできます。
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)