Keras-レイヤー

前に学習したように、KerasレイヤーはKerasモデルの主要な構成要素です。各層は入力情報を受け取り、計算を行い、最後に変換された情報を出力します。1つのレイヤーの出力は、その入力として次のレイヤーに流れます。この章では、レイヤーの詳細を学びましょう。

前書き

Kerasレイヤーには shape of the input (input_shape) 入力データの構造を理解するには、 initializer各入力の重みを設定し、最後にアクティベーターを使用して出力を変換し、非線形にします。その間に、制約は生成される入力データの重みを制限および指定し、正則化は最適化プロセス中に重みにペナルティを動的に適用することによってレイヤー(およびモデル)を最適化しようとします。

要約すると、Kerasレイヤーは、完全なレイヤーを作成するために最小限の詳細を必要とします。

  • 入力データの形状
  • 層内のニューロン/ユニットの数
  • Initializers
  • Regularizers
  • Constraints
  • Activations

次の章で基本的な概念を理解しましょう。基本的な概念を理解する前に、Sequential model APIを使用して単純なKerasレイヤーを作成し、Kerasモデルとレイヤーがどのように機能するかを理解しましょう。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 
from keras import regularizers 
from keras import constraints 

model = Sequential() 

model.add(Dense(32, input_shape=(16,), kernel_initializer = 'he_uniform', 
   kernel_regularizer = None, kernel_constraint = 'MaxNorm', activation = 'relu')) 
model.add(Dense(16, activation = 'relu')) 
model.add(Dense(8))

どこ、

  • Line 1-5 必要なモジュールをインポートします。

  • Line 7 SequentialAPIを使用して新しいモデルを作成します。

  • Line 9 新しいを作成します Dense レイヤーを作成してモデルに追加します。 DenseKerasが提供するエントリーレベルのレイヤーであり、必要なパラメーターとしてニューロンまたはユニットの数(32)を受け入れます。レイヤーが最初のレイヤーの場合、提供する必要がありますInput Shape, (16,)同様に。それ以外の場合は、前のレイヤーの出力が次のレイヤーの入力として使用されます。他のすべてのパラメーターはオプションです。

    • 最初のパラメーターは、ユニット(ニューロン)の数を表します。

    • input_shape 入力データの形状を表します。

    • kernel_initializer 使用する初期化子を表します。 he_uniform 関数は値として設定されます。

    • kernel_regularizer を表す regularizer使用する。値として設定されているものはありません。

    • kernel_constraint 使用する制約を表します。 MaxNorm 関数は値として設定されます。

    • activation使用するアクティベーションを表します。relu関数が値として設定されます。

  • Line 10 2番目を作成します Dense 16ユニットのレイヤーとセット relu 活性化関数として。

  • Line 11 8ユニットの最終的な高密度レイヤーを作成します。

レイヤーの基本概念

レイヤーの基本的な概念と、Kerasが各概念をどのようにサポートしているかを理解しましょう。

入力形状

機械学習では、テキスト、画像、動画など、あらゆる種類の入力データが最初に数値の配列に変換されてから、アルゴリズムに入力されます。入力番号は、1次元配列、2次元配列(行列)、または多次元配列の場合があります。を使用して寸法情報を指定できますshape、整数のタプル。例えば、(4,2) 4行2列の行列を表します。

>>> import numpy as np 
>>> shape = (4, 2) 
>>> input = np.zeros(shape) 
>>> print(input) 
[
   [0. 0.] 
   [0. 0.] 
   [0. 0.] 
   [0. 0.]
] 
>>>

同様に、 (3,4,2) 4x2行列の3つのコレクション(2行4列)を持つ3次元行列。

>>> import numpy as np 
>>> shape = (3, 4, 2) 
>>> input = np.zeros(shape) 
>>> print(input)
[
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] 
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]] 
   [[0. 0.] [0. 0.] [0. 0.] [0. 0.]]
]
>>>

モデルの最初のレイヤー(またはモデルの入力レイヤー)を作成するには、入力データの形状を指定する必要があります。

イニシャライザー

機械学習では、すべての入力データに重みが割り当てられます。 Initializersモジュールは、これらの初期重量を設定するためのさまざまな機能を提供します。いくつかのKeras Initializer 機能は以下の通りです−

ゼロ

生成します 0 すべての入力データに対して。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Zeros() 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

どこ、 kernel_initializer モデルのカーネルの初期化子を表します。

もの

生成します 1 すべての入力データに対して。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Ones() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

絶え間ない

定数値を生成します(たとえば、 5)すべての入力データに対してユーザーが指定します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Constant(value = 0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

どこ、 value 定数値を表す

RandomNormal

入力データの正規分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomNormal(mean=0.0, 
stddev = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

どこ、

  • mean 生成するランダム値の平均を表します

  • stddev 生成するランダム値の標準偏差を表します

  • seed 乱数を生成するための値を表します

RandomUniform

入力データの一様分布を使用して値を生成します。

from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

どこ、

  • minval 生成するランダム値の下限を表します

  • maxval 生成するランダム値の上限を表します

切断正規

入力データの切断正規分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.TruncatedNormal(mean = 0.0, stddev = 0.05, seed = None
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

VarianceScaling

レイヤーの入力形状と出力形状、および指定されたスケールに基づいて値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.VarianceScaling(
   scale = 1.0, mode = 'fan_in', distribution = 'normal', seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   skernel_initializer = my_init))

どこ、

  • scale 倍率を表す

  • mode のいずれかを表す fan_in, fan_out そして fan_avg

  • distribution のいずれかを表す normal または uniform

VarianceScaling

それは見つけます stddev 以下の式を使用して正規分布の値を求め、次に正規分布を使用して重みを求めます。

stddev = sqrt(scale / n)

どこ n 表す、

  • モードの入力ユニットの数= fan_in

  • モードの出力ユニット数= fan_out

  • モードの入力ユニットと出力ユニットの平均数= fan_avg

同様に、以下の式を使用して一様分布の限界を見つけ、次に一様分布を使用して重みを見つけます。

limit = sqrt(3 * scale / n)

lecun_normal

入力データのlecun正規分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None)
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

それは見つけます stddev 以下の式を使用して、正規分布を適用します

stddev = sqrt(1 / fan_in)

どこ、 fan_in 入力ユニットの数を表します。

lecun_uniform

入力データのlecun一様分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.lecun_uniform(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

それは見つけます limit 以下の式を使用して、一様分布を適用します

limit = sqrt(3 / fan_in)

どこ、

  • fan_in 入力ユニットの数を表します

  • fan_out 出力ユニットの数を表します

glorot_normal

入力データのglorot正規分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.glorot_normal(seed=None) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

それは見つけます stddev 以下の式を使用して、正規分布を適用します

stddev = sqrt(2 / (fan_in + fan_out))

どこ、

  • fan_in 入力ユニットの数を表します

  • fan_out 出力ユニットの数を表します

glorot_uniform

入力データのglorot一様分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.glorot_uniform(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

それは見つけます limit 以下の式を使用して、一様分布を適用します

limit = sqrt(6 / (fan_in + fan_out))

どこ、

  • fan_in 入力ユニットの数を表します。

  • fan_out 出力ユニットの数を表します

he_normal

入力データの正規分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.RandomUniform(minval = -0.05, maxval = 0.05, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

以下の式を使用してstddevを見つけ、正規分布を適用します。

stddev = sqrt(2 / fan_in)

どこ、 fan_in 入力ユニットの数を表します。

he_uniform

入力データの一様分布を使用して値を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.he_normal(seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

それは見つけます limit 以下の式を使用して、一様分布を適用します。

limit = sqrt(6 / fan_in)

どこ、 fan_in 入力ユニットの数を表します。

直交

ランダムな直交行列を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Orthogonal(gain = 1.0, seed = None) 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init))

どこ、 gain 行列の増倍率を表します。

身元

単位行列を生成します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Identity(gain = 1.0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), kernel_initializer = my_init)
)

制約

機械学習では、最適化フェーズでパラメーター(重み)に制約が設定されます。<> Constraintsモジュールは、レイヤーに制約を設定するためのさまざまな関数を提供します。いくつかの制約関数は次のとおりです。

NonNeg

重みを非負になるように制約します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import initializers 

my_init = initializers.Identity(gain = 1.0) model.add(
   Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_initializer = my_init)
)

どこ、 kernel_constraint レイヤーで使用される制約を表します。

UnitNorm

重みを単位ノルムに制限します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.UnitNorm(axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

MaxNorm

重みを、指定された値以下の基準に制限します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.MaxNorm(max_value = 2, axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

どこ、

  • max_value 上限を表す

  • は、拘束が適用される寸法を表します。たとえば、形状(2、3、4)では、軸0は1次元、1は2次元、2は3次元を示します。

MinMaxNorm

指定された最小値と最大値の間のノルムになるように重みを制約します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import constraints 

my_constrain = constraints.MinMaxNorm(min_value = 0.0, max_value = 1.0, rate = 1.0, axis = 0) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_constraint = my_constrain))

どこ、 rate 重み制約が適用される速度を表します。

レギュラライザー

機械学習では、正規化子が最適化フェーズで使用されます。最適化中にレイヤーパラメータにいくつかのペナルティが適用されます。Keras正則化モジュールは、レイヤーにペナルティを設定するための以下の関数を提供します。正則化は、レイヤーごとにのみ適用されます。

L1正則化

L1ベースの正則化を提供します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l1(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_regularizer = my_regularizer))

どこ、 kernel_regularizer 重み制約が適用される速度を表します。

L2正則化

L2ベースの正則化を提供します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l2(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,), 
   kernel_regularizer = my_regularizer))

L1およびL2正則化

L1とL2の両方に基づく正則化を提供します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
from keras import regularizers 

my_regularizer = regularizers.l2(0.) 
model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,),
   kernel_regularizer = my_regularizer))

アクティベーション

機械学習では、活性化関数は特定のニューロンが活性化されているかどうかを調べるために使用される特別な関数です。基本的に、活性化関数は入力データの非線形変換を行うため、ニューロンがよりよく学習できるようになります。ニューロンの出力は、活性化関数に依存します。

単一知覚の概念を思い出すと、パーセプトロン(ニューロン)の出力は、すべての入力の合計に対応する重みと全体的なバイアス(利用可能な場合)を掛けたものを受け入れる活性化関数の結果です。

result = Activation(SUMOF(input * weight) + bias)

したがって、活性化関数は、モデルの学習を成功させる上で重要な役割を果たします。Kerasはアクティベーションモジュールで多くのアクティベーション機能を提供します。モジュールで利用可能なすべてのアクティベーションについて学びましょう。

線形

線形関数を適用します。何もしません。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'linear', input_shape = (784,)))

どこ、 activation層の活性化関数を指します。関数の名前で簡単に指定でき、レイヤーは対応するアクティベーターを使用します。

elu

指数線形単位を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'elu', input_shape = (784,)))

セル

スケーリングされた指数線形単位を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'selu', input_shape = (784,)))

relu

正規化線形ユニットを適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'relu', input_shape = (784,)))

ソフトマックス

Softmax関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softmax', input_shape = (784,)))

softplus

Softplus関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softplus', input_shape = (784,)))

ソフトサイン

Softsign関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'softsign', input_shape = (784,)))

タン

双曲線正接関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 
model = Sequential() 
model.add(Dense(512, activation = 'tanh', input_shape = (784,)))

シグモイド

シグモイド関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'sigmoid', input_shape = (784,)))

hard_sigmoid

ハードシグモイド関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'hard_sigmoid', input_shape = (784,)))

指数関数的

指数関数を適用します。

from keras.models import Sequential 
from keras.layers import Activation, Dense 

model = Sequential() 
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
シニア番号 レイヤーと説明
1

密な層

Dense layer 通常の深く接続されたニューラルネットワーク層です。

2

ドロップアウトレイヤー

Dropout 機械学習の重要な概念の1つです。

3

レイヤーをフラット化

Flatten 入力をフラット化するために使用されます。

4

レイヤーの形状を変更する

Reshape 入力の形状を変更するために使用されます。

5

レイヤーを並べ替える

Permute パターンを使用して入力の形状を変更するためにも使用されます。

6

RepeatVectorレイヤー

RepeatVector 設定した回数、n回の入力を繰り返すために使用します。

7

ラムダレイヤー

Lambda 式または関数を使用して入力データを変換するために使用されます。

8

畳み込みレイヤー

Kerasには、一般に畳み込みニューラルネットワーク(CNN)と呼ばれる畳み込みベースのANNを作成するための多くのレイヤーが含まれています。

9

プーリングレイヤー

これは、時間データに対して最大プーリング操作を実行するために使用されます。

10

ローカルに接続されたレイヤー

ローカルに接続されたレイヤーはConv1Dレイヤーに似ていますが、違いはConv1Dレイヤーの重みが共有されているが、ここでは重みが共有されていないことです。

11

レイヤーをマージ

入力のリストをマージするために使用されます。

12

埋め込みレイヤー

入力層に埋め込み操作を実行します。