メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

functionLayer

    説明

    関数層は、指定された関数を層の入力に適用します。

    タスクに必要な層が Deep Learning Toolbox™ に用意されていない場合、functionLayer を使用して関数層を作成することで、新しい層を定義することができます。関数層は、追加のプロパティ、学習可能なパラメーター、または状態を必要としない演算のみをサポートします。この機能を必要とする層については、層をカスタム層として定義してください。詳細については、カスタム深層学習層の定義を参照してください。

    作成

    説明

    layer = functionLayer(fun) は、関数層を作成し、PredictFcn プロパティを設定します。

    layer = functionLayer(fun,Name=Value) は、1 つ以上の名前と値の引数を使用して、オプションのプロパティを設定します。たとえば、functionLayer(fun,NumInputs=2,NumOutputs=3) は、ネットワークに 2 つの入力と 3 つの出力があることを指定します。複数の名前と値の引数を指定できます。

    プロパティ

    すべて展開する

    関数

    この プロパティ は読み取り専用です。

    層の入力に適用する関数。関数ハンドルとして指定します。

    指定する関数は [Y1,...,YM] = fun(X1,...,XN) の構文でなければなりません。ここで、入力と出力は dlarray オブジェクトで、M および N はそれぞれ NumOutputs プロパティと NumInputs プロパティに対応します。

    入力 X1, …, XN は、InputNames で与えられた名前をもつ層入力に対応します。出力 Y1, …, YM は、OutputNames で与えられた名前をもつ層出力に対応します。

    層の作成時、指定した関数にアクセスできない場合、NumInputs プロパティおよび NumOutputs プロパティを指定しなければなりません。

    予測関数の入力と出力は複素数値にすることができます。 (R2024a 以降)層が複素数値データを出力する場合、ニューラル ネットワークで層を使用するときに、後続の層または損失関数が複素数値入力をサポートしていることを確認しなければなりません。

    R2024a より前: 予測関数の入力と出力は複素数であってはなりません。層の予測関数に複素数が含まれる場合は、すべての出力を実数値に変換してから返します。

    dlarray 入力をサポートしている関数の一覧については、dlarray をサポートする関数の一覧を参照してください。

    ヒント

    層の使用時には、指定した関数に必ずアクセスできるようにしなければなりません。たとえば、複数のライブ スクリプトで層を必ず再利用できるようにするには、関数を個別のファイルに保存します。

    データ型: function_handle

    この プロパティ は読み取り専用です。

    形式を整えた dlarray オブジェクトに関数が作用するかどうかを表すフラグ。0 (false) または 1 (true) として指定します。

    データ型: logical

    この プロパティ は読み取り専用です。

    層の関数が dlaccelerate による高速化をサポートするかどうかを表すフラグ。0 (false) または 1 (true) として指定します。

    ヒント

    Acceleratable1 (true) に設定すると、dlnetwork による学習と推論 (予測) の性能が大幅に向上します。

    シンプルな関数のほとんどが dlaccelerate による高速化をサポートしています。詳細については、Deep Learning Function Acceleration for Custom Training Loopsを参照してください。

    データ型: logical

    層の名前。文字ベクトルまたは string スカラーとして指定します。Layer 配列入力の場合、trainnet 関数および dlnetwork 関数は、名前のない層に自動的に名前を割り当てます。

    FunctionLayer オブジェクトは、このプロパティを文字ベクトルとして格納します。

    データ型: char | string

    この プロパティ は読み取り専用です。

    層についての 1 行の説明。string スカラーまたは文字ベクトルとして指定します。この説明は、Layer 配列を表示するとき、および analyzeNetwork 関数を使用するときに表示されます。

    層の説明を指定しない場合、層の演算が表示されます。

    データ型: char | string

    この プロパティ は読み取り専用です。

    入力の数。正の整数として指定します。

    層の入力の数は固定でなければなりません。PredictFcnvarargin による可変個の入力引数をサポートしている場合、NumInputs を使用して層の入力の数を指定しなければなりません。

    NumInputs を指定しない場合、NumInputsnargin(PredictFcn) に設定されます。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    この プロパティ は読み取り専用です。

    層の入力名。string 配列または文字ベクトルの cell 配列として指定します。

    InputNames を指定せず、NumInputs1 である場合、InputNames{'in'} に設定されます。InputNames を指定せず、NumInputs1 より大きい場合、InputNames{'in1',...,'inN'} に設定されます。ここで、N は入力の数です。

    データ型: string | cell

    この プロパティ は読み取り専用です。

    層の出力の数。正の整数として指定します。

    層の出力の数は固定でなければなりません。PredictFcn が可変個の出力引数をサポートしている場合、NumOutputs を使用して層の出力の数を指定しなければなりません。

    NumOutputs を指定しない場合、NumOutputsnargout(PredictFcn) に設定されます。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    この プロパティ は読み取り専用です。

    層の出力の名前。文字ベクトルの string 配列または cell 配列として指定します。

    OutputNames を指定せず、NumOutputs1 である場合、OutputNames{'out'} に設定されます。OutputNames を指定せず、NumOutputs1 より大きい場合、OutputNames{'out1',...,'outM'} に設定されます。ここで、M は出力の数です。

    データ型: string | cell

    すべて折りたたむ

    入力にソフトサイン演算を適用する関数層オブジェクトを作成します。ソフトサイン演算は、関数 f(x)=x1+|x| で表されます。

    layer = functionLayer(@(X) X./(1 + abs(X)))

    関数層として指定されたソフトサイン層を層配列に含めます。この層に "softsign" という説明があることを指定します。

    layers = [
        imageInputLayer([28 28 1])
        convolution2dLayer(5,20)
        functionLayer(@(X) X./(1 + abs(X)),Description="softsign")
        maxPooling2dLayer(2,Stride=2)
        fullyConnectedLayer(10)
        softmaxLayer]

    "CB" (チャネル、バッチ) という形式の入力データを "SBC" (空間、バッチ、チャネル) という形式に再構築する関数層を作成します。形式を整えたデータに層が作用することを指定するには、Formattable オプションを true に設定します。層の関数が dlaccelerate による高速化をサポートすることを指定するには、Acceleratable オプションを true に設定します。

    layer = functionLayer(@(X) dlarray(X,"SBC"),Formattable=true,Acceleratable=true)
    layer = 
      FunctionLayer with properties:
    
                 Name: ''
           PredictFcn: @(X)dlarray(X,"SBC")
          Formattable: 1
        Acceleratable: 1
    
       Learnable Parameters
        No properties.
    
       State Parameters
        No properties.
    
      Show all properties
    
    

    "SB" という形式に入力を再構築する関数層を層配列に含めます。層の説明を "channel to spatial" に設定します。

    layers = [
        featureInputLayer(10)
        functionLayer(@(X) dlarray(X,"SBC"),Formattable=true,Acceleratable=true,Description="channel to spatial")
        convolution1dLayer(3,16)]
    layers = 
      3×1 Layer array with layers:
    
         1   ''   Feature Input     10 features
         2   ''   Function          channel to spatial
         3   ''   1-D Convolution   16 3 convolutions with stride 1 and padding [0  0]
    

    このネットワークでは、1 次元畳み込み層により、入力データの "S" (空間) 次元に沿って畳み込みが行われます。この演算は、ネットワークの入力データの "C" (チャネル) 次元に沿った畳み込みと同等です。

    層配列を dlnetwork オブジェクトに変換し、"CB" という形式をもつデータのランダム配列を渡します。

    dlnet = dlnetwork(layers);
    
    X = rand(10,64);
    dlX = dlarray(X,"CB");
    
    dlY = forward(dlnet,dlX);

    出力データのサイズと形式を表示します。

    size(dlY)
    ans = 1×3
    
         8    16    64
    
    
    dims(dlY)
    ans = 
    'SCB'
    

    アルゴリズム

    すべて展開する

    拡張機能

    すべて展開する

    バージョン履歴

    R2021b で導入

    すべて展開する