Keras-레이어

앞서 배운 것처럼 Keras 레이어는 Keras 모델의 기본 구성 요소입니다. 각 계층은 입력 정보를 수신하고 일부 계산을 수행 한 다음 최종적으로 변환 된 정보를 출력합니다. 한 레이어의 출력은 입력으로 다음 레이어로 흐릅니다. 이 장에서 레이어에 대한 자세한 내용을 알아 보겠습니다.

소개

Keras 레이어에는 shape of the input (input_shape) 입력 데이터의 구조를 이해하려면 initializer각 입력에 대한 가중치를 설정하고 마지막으로 활성기를 설정하여 출력을 비선형으로 변환합니다. 그 사이에 제약 조건은 생성 할 입력 데이터의 가중치 범위를 제한하고 지정하며 정규화는 최적화 프로세스 중에 가중치에 대한 패널티를 동적으로 적용하여 계층 (및 모델)을 최적화하려고 시도합니다.

요약하자면, Keras 레이어는 완전한 레이어를 생성하기 위해 최소한의 세부 정보가 필요합니다.

  • 입력 데이터의 형태
  • 레이어의 뉴런 수 / 단위
  • Initializers
  • Regularizers
  • Constraints
  • Activations

다음 장에서 기본 개념을 이해합시다. 기본 개념을 이해하기 전에 Sequential 모델 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 Sequential API를 사용하여 새 모델을 생성합니다.

  • Line 9 새로운 창조 Dense 레이어를 만들고 모델에 추가합니다. DenseKeras에서 제공하는 엔트리 레벨 계층으로, 필수 매개 변수로 뉴런 또는 단위 수 (32)를 허용합니다. 레이어가 첫 번째 레이어 인 경우 제공해야합니다.Input Shape, (16,)게다가. 그렇지 않으면 이전 레이어의 출력이 다음 레이어의 입력으로 사용됩니다. 다른 모든 매개 변수는 선택 사항입니다.

    • 첫 번째 매개 변수는 단위 (뉴런)의 수를 나타냅니다.

    • input_shape 입력 데이터의 모양을 나타냅니다.

    • kernel_initializer 사용할 이니셜 라이저를 나타냅니다. he_uniform 기능이 값으로 설정됩니다.

    • kernel_regularizer 말하다 regularizer사용될. 없음이 값으로 설정됩니다.

    • kernel_constraint 사용할 제약을 나타냅니다. MaxNorm 기능이 값으로 설정됩니다.

    • activation사용할 활성화를 나타냅니다. relu 함수가 값으로 설정됩니다.

  • Line 10 두 번째 생성 Dense 16 개 단위와 세트를 가진 층 relu 활성화 기능으로.

  • Line 11 8 개 단위로 최종 Dense 레이어를 만듭니다.

레이어의 기본 개념

레이어의 기본 개념과 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) 3 개의 4x2 행렬 모음 (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_outfan_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 상한을 나타내 다

  • 축은 구속 조건이 적용될 치수를 나타냅니다. 예를 들어 Shape (2,3,4) 축에서 0은 첫 번째 차원, 1은 두 번째 차원, 2는 세 번째 차원을 나타냅니다.

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

Rectified Linear Unit을 적용합니다.

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 기능을 적용합니다.

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,)))

시그 모이 드

Sigmoid 함수를 적용합니다.

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

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

hard_sigmoid

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,)))
Sr. 아니요 레이어 및 설명
1

고밀도 레이어

Dense layer 규칙적으로 깊이 연결된 신경망 계층입니다.

2

드롭 아웃 레이어

Dropout 기계 학습에서 중요한 개념 중 하나입니다.

레이어 병합

Flatten 입력을 평면화하는 데 사용됩니다.

4

레이어 모양 변경

Reshape 입력의 모양을 변경하는 데 사용됩니다.

5

퍼 뮤트 레이어

Permute 패턴을 사용하여 입력의 모양을 변경하는데도 사용됩니다.

6

반복 벡터 레이어

RepeatVector 입력을 설정 횟수 n 회 반복하는 데 사용됩니다.

7

Lambda 계층

Lambda 표현식 또는 함수를 사용하여 입력 데이터를 변환하는 데 사용됩니다.

8

컨볼 루션 레이어

Keras에는 일반적으로 Convolution Neural Network (CNN) 라고하는 Convolution 기반 ANN을 만들기위한 많은 레이어가 포함되어 있습니다 .

9

풀링 레이어

시간 데이터에 대해 최대 풀링 작업을 수행하는 데 사용됩니다.

10

로컬로 연결된 레이어

로컬로 연결된 레이어는 Conv1D 레이어와 유사하지만 차이점은 Conv1D 레이어 가중치가 공유되지만 여기서 가중치는 공유되지 않는다는 것입니다.

11

레이어 병합

입력 목록을 병합하는 데 사용됩니다.

12

포함 레이어

입력 레이어에서 임베딩 작업을 수행합니다.