Keras - warstwy

Jak dowiedzieliśmy się wcześniej, warstwy Keras są podstawowym budulcem modeli Keras. Każda warstwa otrzymuje informacje wejściowe, wykonuje pewne obliczenia i na koniec wyświetla przetworzone informacje. Dane wyjściowe jednej warstwy wpłyną do następnej warstwy jako jej dane wejściowe. W tym rozdziale poznajmy wszystkie szczegóły dotyczące warstw.

Wprowadzenie

Warstwa Keras wymaga shape of the input (input_shape) zrozumieć strukturę danych wejściowych, initializerustawić wagę dla każdego wejścia i wreszcie aktywatory, aby przekształcić wyjście, aby było nieliniowe. W międzyczasie ograniczenia ograniczają i określają zakres, w którym waga danych wejściowych do wygenerowania, a regulator będzie próbował zoptymalizować warstwę (i model), dynamicznie nakładając kary na wagi podczas procesu optymalizacji.

Podsumowując, warstwa Keras wymaga poniżej minimum szczegółów, aby utworzyć pełną warstwę.

  • Kształt danych wejściowych
  • Liczba neuronów / jednostek w warstwie
  • Initializers
  • Regularizers
  • Constraints
  • Activations

Rozumiemy podstawową koncepcję w następnym rozdziale. Zanim zrozumiemy podstawową koncepcję, stwórzmy prostą warstwę Keras przy użyciu interfejsu API modelu sekwencyjnego, aby dowiedzieć się, jak działa model i warstwa 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))

gdzie,

  • Line 1-5 importuje niezbędne moduły.

  • Line 7 tworzy nowy model przy użyciu Sequential API.

  • Line 9 tworzy nowy Dense warstwę i dodaj ją do modelu. Denseto podstawowa warstwa dostarczana przez Keras, która przyjmuje liczbę neuronów lub jednostek (32) jako wymagany parametr. Jeśli warstwa jest pierwszą warstwą, musimy ją dostarczyćInput Shape, (16,)także. W przeciwnym razie dane wyjściowe z poprzedniej warstwy zostaną użyte jako dane wejściowe dla następnej warstwy. Wszystkie inne parametry są opcjonalne.

    • Pierwszy parametr reprezentuje liczbę jednostek (neuronów).

    • input_shape reprezentują kształt danych wejściowych.

    • kernel_initializer reprezentują inicjator do użycia. he_uniform funkcja jest ustawiona jako wartość.

    • kernel_regularizer przedstawiać regularizerbyć używana. Brak jest ustawiane jako wartość.

    • kernel_constraint reprezentują ograniczenie, które ma być użyte. MaxNorm funkcja jest ustawiona jako wartość.

    • activationreprezentują aktywację do użycia. Funkcja relu jest ustawiona jako wartość.

  • Line 10 tworzy drugi Dense warstwa z 16 jednostkami i zestawem relu jako funkcja aktywacji.

  • Line 11 tworzy końcową gęstą warstwę z 8 jednostkami.

Podstawowe pojęcia warstw

Zrozummy podstawową koncepcję warstwy, a także sposób, w jaki Keras obsługuje każdą koncepcję.

Kształt wejściowy

W uczeniu maszynowym wszystkie typy danych wejściowych, takie jak tekst, obrazy lub filmy, zostaną najpierw przekonwertowane na tablicę liczb, a następnie przesłane do algorytmu. Liczby wejściowe mogą być tablicą jednowymiarową, tablicą dwuwymiarową (matrycą) lub tablicą wielowymiarową. Możemy określić informacje o wymiarach za pomocąshape, krotka liczb całkowitych. Na przykład,(4,2) reprezentują macierz z czterema wierszami i dwiema kolumnami.

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

Podobnie, (3,4,2) trójwymiarowa macierz posiadająca trzy zbiory macierzy 4x2 (dwa wiersze i cztery kolumny).

>>> 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.]]
]
>>>

Aby utworzyć pierwszą warstwę modelu (lub warstwę wejściową modelu), należy określić kształt danych wejściowych.

Inicjatory

W uczeniu maszynowym wszystkim danym wejściowym zostanie przypisana waga. InitializersModuł zapewnia różne funkcje do ustawienia wagi początkowej. NiektórzyKeras Initializer funkcje są następujące -

Zera

Generuje 0 dla wszystkich danych wejściowych.

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

Gdzie, kernel_initializer reprezentują inicjator jądra modelu.

Jedni

Generuje 1 dla wszystkich danych wejściowych.

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

Stały

Generuje stałą wartość (powiedzmy, 5) określone przez użytkownika dla wszystkich danych wejściowych.

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

gdzie, value reprezentują stałą wartość

RandomNormal

Generuje wartość przy użyciu rozkładu normalnego danych wejściowych.

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

gdzie,

  • mean reprezentują średnią z wartości losowych do wygenerowania

  • stddev reprezentują odchylenie standardowe losowych wartości do wygenerowania

  • seed reprezentują wartości do wygenerowania liczby losowej

RandomUniform

Generuje wartość przy użyciu jednolitego rozkładu danych wejściowych.

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

gdzie,

  • minval reprezentują dolną granicę losowych wartości do wygenerowania

  • maxval reprezentują górną granicę losowych wartości do wygenerowania

TruncatedNormal

Generuje wartość przy użyciu obciętego rozkładu normalnego danych wejściowych.

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

Generuje wartość na podstawie kształtu wejściowego i kształtu wyjściowego warstwy wraz z określoną skalą.

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

gdzie,

  • scale reprezentują współczynnik skalowania

  • mode reprezentują dowolną z fan_in, fan_out i fan_avg wartości

  • distribution reprezentują jedną z normal lub uniform

VarianceScaling

Znajduje stddev wartość rozkładu normalnego za pomocą poniższego wzoru, a następnie znajdź wagi przy użyciu rozkładu normalnego,

stddev = sqrt(scale / n)

gdzie n przedstawiać,

  • liczba jednostek wejściowych dla mode = fan_in

  • liczba jednostek wyjściowych dla mode = fan_out

  • średnia liczba jednostek wejściowych i wyjściowych dla trybu = śr ._wachlarza

Podobnie, znajduje granicę równomiernego rozkładu za pomocą poniższego wzoru, a następnie znajduje wagi przy użyciu równomiernego rozkładu,

limit = sqrt(3 * scale / n)

lecun_normal

Generuje wartość przy użyciu rozkładu normalnego Lecuna danych wejściowych.

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

Znajduje stddev używając poniższego wzoru, a następnie zastosuj rozkład normalny

stddev = sqrt(1 / fan_in)

gdzie, fan_in reprezentują liczbę jednostek wejściowych.

lecun_uniform

Generuje wartość przy użyciu równomiernego rozkładu danych wejściowych.

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

Znajduje limit używając poniższego wzoru, a następnie zastosuj równomierną dystrybucję

limit = sqrt(3 / fan_in)

gdzie,

  • fan_in reprezentuje liczbę jednostek wejściowych

  • fan_out reprezentuje liczbę jednostek wyjściowych

glorot_normal

Generuje wartość przy użyciu rozkładu normalnego glorota danych wejściowych.

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

Znajduje stddev używając poniższego wzoru, a następnie zastosuj rozkład normalny

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

gdzie,

  • fan_in reprezentuje liczbę jednostek wejściowych

  • fan_out reprezentuje liczbę jednostek wyjściowych

glorot_uniform

Generuje wartość przy użyciu jednorodnej dystrybucji danych wejściowych 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))

Znajduje limit używając poniższego wzoru, a następnie zastosuj równomierną dystrybucję

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

gdzie,

  • fan_in reprezentują liczbę jednostek wejściowych.

  • fan_out reprezentuje liczbę jednostek wyjściowych

he_normal

Generuje wartość przy użyciu rozkładu normalnego danych wejściowych.

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

Znajduje stddev przy użyciu poniższego wzoru, a następnie stosuje rozkład normalny.

stddev = sqrt(2 / fan_in)

gdzie, fan_in reprezentują liczbę jednostek wejściowych.

he_uniform

Generuje wartość przy użyciu jednolitego rozkładu danych wejściowych.

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

Znajduje limit używając poniższego wzoru, a następnie zastosuj równomierną dystrybucję.

limit = sqrt(6 / fan_in)

gdzie, fan_in reprezentują liczbę jednostek wejściowych.

Prostokątny

Generuje losową macierz ortogonalną.

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

gdzie, gain reprezentują mnożnik macierzy.

Tożsamość

Generuje macierz tożsamości.

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

Ograniczenia

W uczeniu maszynowym ograniczenie zostanie ustawione na parametr (waga) podczas fazy optymalizacji. <> Moduł ograniczeń udostępnia różne funkcje do ustawiania ograniczeń na warstwie. Oto niektóre funkcje ograniczające.

NonNeg

Ogranicza wagi, aby były nieujemne.

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

gdzie, kernel_constraint reprezentują wiązanie, które ma być użyte w warstwie.

UnitNorm

Ogranicza wagi, aby były normą jednostkową.

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

Ogranicza wagę do normy mniejszej lub równej podanej wartości.

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

gdzie,

  • max_value reprezentują górną granicę

  • reprezentuje wymiar, w którym ma zostać zastosowane wiązanie. np. w kształcie (2, 3, 4) oś 0 oznacza pierwszy wymiar, 1 oznacza drugi wymiar, a 2 oznacza trzeci wymiar

MinMaxNorm

Ogranicza wagi, aby były normami między określonymi wartościami minimalnymi i maksymalnymi.

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

gdzie, rate reprezentują szybkość, z jaką stosowane jest ograniczenie wagi.

Regulatory

W uczeniu maszynowym w fazie optymalizacji używane są regulatory. Podczas optymalizacji nakłada pewne kary na parametr warstwy. Moduł regularyzacji Keras udostępnia poniższe funkcje do ustawiania kar na warstwie. Uregulowanie dotyczy tylko poszczególnych warstw.

L1 Regulator

Zapewnia regularyzację opartą na 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))

gdzie, kernel_regularizer reprezentują szybkość, z jaką stosowane jest ograniczenie wagi.

L2 Regulator

Zapewnia regularyzację opartą na 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))

Regulatory L1 i L2

Zapewnia regularyzację opartą na L1 i 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))

Aktywacje

W uczeniu maszynowym funkcja aktywacji to specjalna funkcja używana do sprawdzania, czy określony neuron jest aktywowany, czy nie. Zasadniczo funkcja aktywacji dokonuje nieliniowej transformacji danych wejściowych, a tym samym umożliwia neuronom lepsze uczenie się. Wyjście neuronu zależy od funkcji aktywacji.

Jak pamiętasz koncepcję pojedynczej percepcji, wyjście perceptronu (neuronu) jest po prostu wynikiem funkcji aktywacji, która akceptuje sumowanie wszystkich danych wejściowych pomnożonych przez odpowiadającą mu wagę plus ogólne odchylenie, jeśli takie istnieje.

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

Tak więc funkcja aktywacji odgrywa ważną rolę w pomyślnym uczeniu się modelu. Keras zapewnia wiele funkcji aktywacji w module aktywacji. Poznajmy wszystkie aktywacje dostępne w module.

liniowy

Stosuje funkcję liniową. Nic nie robi.

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

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

Gdzie, activationodnosi się do funkcji aktywacji warstwy. Można to określić po prostu nazwą funkcji, a warstwa użyje odpowiednich aktywatorów.

elu

Stosuje wykładniczą jednostkę liniową.

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

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

selu

Stosuje skalowaną wykładniczą jednostkę liniową.

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

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

relu

Dotyczy rektyfikowanej jednostki liniowej.

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

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

softmax

Dotyczy funkcji Softmax.

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

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

softplus

Dotyczy funkcji Softplus.

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

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

softsign

Stosuje funkcję Softsign.

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

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

tanh

Stosuje funkcję styczną hiperboliczną.

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

esicy

Stosuje funkcję 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

Stosuje funkcję 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,)))

wykładniczy

Stosuje funkcję wykładniczą.

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

model = Sequential() 
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
Sr.No Warstwy i opis
1

Gęsta warstwa

Dense layer to regularna, głęboko połączona warstwa sieci neuronowej.

2

Warstwy rezygnacji

Dropout jest jedną z ważnych koncepcji uczenia maszynowego.

3

Spłaszcz warstwy

Flatten służy do spłaszczania danych wejściowych.

4

Zmień kształt warstw

Reshape służy do zmiany kształtu wejścia.

5

Permute Layers

Permute służy również do zmiany kształtu wejścia za pomocą wzorca.

6

Warstwy RepeatVector

RepeatVector służy do powtórzenia wejścia dla określonej liczby, n razy.

7

Warstwy Lambda

Lambda służy do przekształcania danych wejściowych za pomocą wyrażenia lub funkcji.

8

Warstwy splotu

Keras zawiera wiele warstw do tworzenia sieci ANN opartej na splotach, popularnie nazywanej Convolution Neural Network (CNN) .

9

Warstwa łącząca

Służy do wykonywania maksymalnych operacji pulowania danych czasowych.

10

Warstwa połączona lokalnie

Warstwy połączone lokalnie są podobne do warstwy Conv1D, ale różnica polega na tym, że wagi warstw Conv1D są wspólne, ale tutaj wagi nie są dzielone.

11

Scal warstwę

Służy do łączenia listy wejść.

12

Osadzanie warstwy

Wykonuje operacje osadzania w warstwie wejściowej.