99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Keras 層

2022-04-13 14:27 更新

如前所述,Keras 層是 Keras 模型的主要構(gòu)建塊。每一層接收輸入信息,做一些計(jì)算,最后輸出轉(zhuǎn)換后的信息。一層的輸出將作為輸入流入下一層。我們將在本章中了解有關(guān)圖層的完整詳細(xì)信息。

介紹

Keras 層需要輸入的形狀 (input_shape)來理解輸入數(shù)據(jù)的結(jié)構(gòu),初始化器為每個(gè)輸入設(shè)置權(quán)重,最后激活器來轉(zhuǎn)換輸出以使其非線性。在這兩者之間,約束限制并指定要生成的輸入數(shù)據(jù)的權(quán)重范圍,正則化器將通過在優(yōu)化過程中動(dòng)態(tài)應(yīng)用權(quán)重的懲罰來嘗試優(yōu)化層(和模型)。

總而言之,Keras 層需要低于最低限度的細(xì)節(jié)來創(chuàng)建一個(gè)完整的層。

  • 輸入數(shù)據(jù)的形狀
  • 層中神經(jīng)元/單元的數(shù)量
  • 初始化程序
  • 正則化器
  • 約束
  • 激活

讓我們?cè)谙乱徽轮辛私饣靖拍?。在了解基本概念之前,讓我們使?Sequential 模型 API 創(chuàng)建一個(gè)簡單的 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))

代碼詳解:

  • 第 1-5 行 導(dǎo)入必要的模塊。
  • 第 7 行 使用 Sequential API 創(chuàng)建一個(gè)新模型。
  • 第 9 行 創(chuàng)建一個(gè)新的 Dense 層并將其添加到模型中。Dense 是 Keras 提供的入門級(jí)層,它接受神經(jīng)元或單元(32)的數(shù)量作為其所需參數(shù)。如果圖層是第一層,那么我們還需要提供Input Shape, (16,)。否則,上一層的輸出將用作下一層的輸入。所有其他參數(shù)都是可選的。
    • 第一個(gè)參數(shù)表示單元(神經(jīng)元)的數(shù)量。
    • input_shape表示輸入數(shù)據(jù)的形狀。
    • kernel_initializer表示要使用的初始化程序。he_uniform函數(shù)被設(shè)置為值。
    • kernel_regularizer表示要使用的正則化器。無設(shè)置為值。
    • kernel_constraint表示要使用的約束。MaxNorm函數(shù)被設(shè)置為值。
    • activation表示要使用的激活。relu 函數(shù)被設(shè)置為值。
  • 第 10 行創(chuàng)建了具有 16 個(gè)單元的第二個(gè) Dense 層,并將relu設(shè)置為激活函數(shù)。
  • 第 11 行創(chuàng)建了具有 8 個(gè)單元的最終 Dense 層。

層的基本概念

讓我們了解層的基本概念以及 Keras 如何支持每個(gè)概念。

輸入形狀

在機(jī)器學(xué)習(xí)中,所有類型的輸入數(shù)據(jù),如文本、圖像或視頻,都將首先轉(zhuǎn)換為數(shù)字?jǐn)?shù)組,然后輸入算法。輸入的數(shù)字可以是一維數(shù)組、二維數(shù)組(矩陣)或多維數(shù)組。我們可以使用shape指定維度信息,這是一個(gè)整數(shù)元組。例如,(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)三維矩陣具有三個(gè) 4x2 矩陣的集合(兩行四列)

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

要?jiǎng)?chuàng)建模型的第一層(或模型的輸入層),應(yīng)指定輸入數(shù)據(jù)的形狀。

初始化

在機(jī)器學(xué)習(xí)中,權(quán)重將分配給所有輸入數(shù)據(jù)。Initializers 模塊提供了不同的函數(shù)來設(shè)置這些初始權(quán)重。一些 Keras Initializer 函數(shù)如下:

Zeros()

所有輸入數(shù)據(jù)生成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表示模型內(nèi)核的初始化程序。

Ones()

所有輸入數(shù)據(jù)生成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))

Constant

所有輸入數(shù)據(jù)生成用戶指定的常量值(例如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表示常數(shù)值

RandomNormal

使用輸入數(shù)據(jù)的正態(tài)分布生成值。

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 表示要生成的隨機(jī)值的平均值
  • stddev 表示要生成的隨機(jī)值的標(biāo)準(zhǔn)偏差
  • seed代表生成隨機(jī)數(shù)的值

RandomUniform

使用輸入數(shù)據(jù)的均勻分布生成值。

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表示要生成的隨機(jī)值的下限
  • maxval表示要生成的隨機(jī)值的上限

TruncatedNormal

使用輸入數(shù)據(jù)的截?cái)嗾龖B(tài)分布生成值。

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

根據(jù)圖層的輸入形狀和輸出形狀以及指定的比例生成值。

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值中的任何一個(gè)
  • distribution 代表正態(tài)或均勻

它使用以下公式找到正態(tài)分布的stddev值,然后使用正態(tài)分布找到權(quán)重,

stddev = sqrt(scale / n)

其中n代表,

  • mode = fan_in 的輸入單元數(shù)
  • mode = fan_out 的輸出單元數(shù)
  • mode = fan_avg 的平均輸入和輸出單元數(shù)

類似地,它使用以下公式找到均勻分布的極限,然后使用均勻分布找到權(quán)重,

limit = sqrt(3 * scale / n)

lecun_normal

使用輸入數(shù)據(jù)的 lecun 正態(tài)分布生成值。

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,然后應(yīng)用正態(tài)分布

stddev = sqrt(1 / fan_in)

其中,fan_in表示輸入單元的數(shù)量。

lecun_uniform

使用輸入數(shù)據(jù)的 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))

它使用以下公式找到極限,然后應(yīng)用均勻分布

limit = sqrt(3 / fan_in)
  • fan_in表示輸入單元的數(shù)量
  • fan_out表示輸出單元的數(shù)量

Glorot_normal

使用輸入數(shù)據(jù)的 glorot 正態(tài)分布生成值。

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,然后應(yīng)用正態(tài)分布

stddev = sqrt(2 / (fan_in + fan_out))
  • fan_in表示輸入單元的數(shù)量
  • fan_out表示輸出單元的數(shù)量

Glorot_uniform

使用輸入數(shù)據(jù)的 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))

它使用以下公式找到極限,然后應(yīng)用均勻分布

limit = sqrt(6 / (fan_in + fan_out))
  • fan_in表示輸入單元的數(shù)量。
  • fan_out表示輸出單元的數(shù)量

he_normal

使用輸入數(shù)據(jù)的正態(tài)分布生成值。

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,然后應(yīng)用正態(tài)分布。

stddev = sqrt(2 / fan_in)

其中,fan_in表示輸入單元的數(shù)量。

he_uniform

使用輸入數(shù)據(jù)的均勻分布生成值。

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,然后應(yīng)用均勻分布。

limit = sqrt(6 / fan_in)

其中,fan_in表示輸入單元的數(shù)量。

Orthogonal

生成隨機(jī)正交矩陣。

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表示矩陣的乘法因子。

Identity

生成單位矩陣。

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

約束

在機(jī)器學(xué)習(xí)中,將在優(yōu)化階段對(duì)參數(shù)(權(quán)重)設(shè)置約束。<>Constraints 模塊提供了不同的功能來設(shè)置層上的約束。一些約束函數(shù)如下。

non_neg

將權(quán)重限制為非負(fù)。

from keras.constraints import non_neg

其中,kernel_constraint表示要在層中使用的約束。

UnitNorm

將權(quán)重約束為單位范數(shù)。

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

將權(quán)重限制為小于或等于給定值的范數(shù)。

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表示上限
  • 軸表示要應(yīng)用約束的維度。例如,在 Shape (2,3,4) 軸中,0 表示第一維,1 表示第二維,2 表示第三維

MinMaxNorm

將權(quán)重約束為指定的最小值和最大值之間的范數(shù)。

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表示應(yīng)用權(quán)重約束的速率。

正則化器

在機(jī)器學(xué)習(xí)中,正則化器用于優(yōu)化階段。它在優(yōu)化過程中對(duì)層參數(shù)應(yīng)用一些懲罰。Keras 正則化模塊提供以下函數(shù)來設(shè)置層的懲罰。正則化僅適用于每層基礎(chǔ)。

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表示應(yīng)用權(quán)重約束的速率。

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

激活

在機(jī)器學(xué)習(xí)中,激活函數(shù)是一種特殊的函數(shù),用于發(fā)現(xiàn)特定神經(jīng)元是否被激活?;旧?,激活函數(shù)對(duì)輸入數(shù)據(jù)進(jìn)行非線性變換,從而使神經(jīng)元能夠更好地學(xué)習(xí)。神經(jīng)元的輸出取決于激活函數(shù)。

當(dāng)您回憶起單一感知的概念時(shí),感知器(神經(jīng)元)的輸出只是激活函數(shù)的結(jié)果,它接受所有輸入乘以其相應(yīng)的權(quán)重加上總體偏差(如果有的話)的總和。

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

因此,激活函數(shù)在模型的成功學(xué)習(xí)中起著重要作用。Keras 在 activations 模塊中提供了很多激活函數(shù)。讓我們學(xué)習(xí)模塊中可用的所有激活。

線性

應(yīng)用線性函數(shù)。什么也沒做。

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


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

其中,激活是指層的激活函數(shù)??梢院唵蔚赝ㄟ^函數(shù)名稱指定,層將使用相應(yīng)的激活器。

elu

應(yīng)用指數(shù)線性單位

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


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

selu

應(yīng)用縮放指數(shù)線性單位。

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


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

relu

應(yīng)用整流線性單元。

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


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

softmax

應(yīng)用 Softmax 函數(shù)。

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


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

softplus

應(yīng)用Softplus功能。

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


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

softsign

應(yīng)用softsign功能。

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


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

sigmoid

應(yīng)用 Sigmoid 函數(shù)。

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


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

hard_sigmoid

應(yīng)用 hard_sigmoid 函數(shù)。

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


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

exponential

應(yīng)用指數(shù)函數(shù)。

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


model = Sequential() 
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)