Keras - Lớp

Như đã học trước đó, các lớp Keras là khối xây dựng chính của các mô hình Keras. Mỗi lớp nhận thông tin đầu vào, thực hiện một số tính toán và cuối cùng xuất ra thông tin đã được biến đổi. Đầu ra của một lớp sẽ chảy vào lớp tiếp theo làm đầu vào của nó. Hãy để chúng tôi tìm hiểu chi tiết đầy đủ về các lớp trong chương này.

Giới thiệu

Một lớp Keras yêu cầu shape of the input (input_shape) để hiểu cấu trúc của dữ liệu đầu vào, initializerđể thiết lập trọng số cho mỗi đầu vào và cuối cùng là các chất kích hoạt để biến đổi đầu ra thành phi tuyến tính. Ở giữa, các ràng buộc hạn chế và chỉ định phạm vi mà trọng số của dữ liệu đầu vào sẽ được tạo ra và bộ điều chỉnh sẽ cố gắng tối ưu hóa lớp (và mô hình) bằng cách áp dụng động các hình phạt đối với các trọng số trong quá trình tối ưu hóa.

Tóm lại, lớp Keras yêu cầu các chi tiết tối thiểu dưới đây để tạo một lớp hoàn chỉnh.

  • Hình dạng của dữ liệu đầu vào
  • Số lượng tế bào thần kinh / đơn vị trong lớp
  • Initializers
  • Regularizers
  • Constraints
  • Activations

Hãy để chúng tôi hiểu khái niệm cơ bản trong chương tiếp theo. Trước khi hiểu khái niệm cơ bản, chúng ta hãy tạo một lớp Keras đơn giản bằng cách sử dụng API mô hình tuần tự để có ý tưởng về cách hoạt động của mô hình và lớp 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))

Ở đâu,

  • Line 1-5 nhập các mô-đun cần thiết.

  • Line 7 tạo một mô hình mới bằng cách sử dụng API tuần tự.

  • Line 9 tạo ra một cái mới Dense lớp và thêm nó vào mô hình. Denselà một lớp mức đầu vào do Keras cung cấp, lớp này chấp nhận số lượng tế bào thần kinh hoặc đơn vị (32) làm tham số bắt buộc của nó. Nếu lớp là lớp đầu tiên, thì chúng ta cần cung cấpInput Shape, (16,)cũng. Nếu không, đầu ra của lớp trước sẽ được sử dụng làm đầu vào của lớp tiếp theo. Tất cả các thông số khác là tùy chọn.

    • Tham số đầu tiên đại diện cho số lượng đơn vị (nơ-ron).

    • input_shape biểu diễn hình dạng của dữ liệu đầu vào.

    • kernel_initializer đại diện cho bộ khởi tạo được sử dụng. he_uniform hàm được đặt dưới dạng giá trị.

    • kernel_regularizer đại diện regularizerđược sử dụng. Không có giá trị nào được đặt làm giá trị.

    • kernel_constraint đại diện cho ràng buộc được sử dụng. MaxNorm hàm được đặt dưới dạng giá trị.

    • activationđại diện cho kích hoạt được sử dụng. hàm relu được đặt thành giá trị.

  • Line 10 tạo thứ hai Dense lớp với 16 đơn vị và thiết lập relu như chức năng kích hoạt.

  • Line 11 tạo lớp Dày cuối cùng với 8 đơn vị.

Khái niệm cơ bản về lớp

Hãy để chúng tôi hiểu khái niệm cơ bản về lớp cũng như cách Keras hỗ trợ từng khái niệm.

Hình dạng đầu vào

Trong học máy, tất cả các loại dữ liệu đầu vào như văn bản, hình ảnh hoặc video sẽ được chuyển đổi đầu tiên thành một mảng số và sau đó đưa vào thuật toán. Số đầu vào có thể là mảng một chiều, mảng hai chiều (ma trận) hoặc mảng nhiều chiều. Chúng tôi có thể chỉ định thông tin chiều bằng cách sử dụngshape, một bộ số nguyên. Ví dụ,(4,2) biểu diễn ma trận với bốn hàng và hai cột.

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

Tương tự, (3,4,2) ma trận ba chiều có ba tập hợp ma trận 4x2 (hai hàng và bốn cột).

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

Để tạo lớp đầu tiên của mô hình (hoặc lớp đầu vào của mô hình), hình dạng của dữ liệu đầu vào phải được chỉ định.

Khởi tạo

Trong Học máy, trọng lượng sẽ được gán cho tất cả dữ liệu đầu vào. Initializersmô-đun cung cấp các chức năng khác nhau để thiết lập các trọng lượng ban đầu này. Một sốKeras Initializer chức năng như sau:

Zeros

Tạo ra 0 cho tất cả dữ liệu đầu vào.

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

Ở đâu, kernel_initializer đại diện cho bộ khởi tạo cho nhân của mô hình.

Ones

Tạo ra 1 cho tất cả dữ liệu đầu vào.

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

Không thay đổi

Tạo ra một giá trị không đổi (giả sử, 5) do người dùng chỉ định cho tất cả dữ liệu đầu vào.

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

Ở đâu, value đại diện cho giá trị không đổi

Ngẫu nhiên

Tạo ra giá trị bằng cách sử dụng phân phối chuẩn của dữ liệu đầu vào.

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

Ở đâu,

  • mean đại diện cho giá trị trung bình của các giá trị ngẫu nhiên để tạo

  • stddev đại diện cho độ lệch chuẩn của các giá trị ngẫu nhiên để tạo ra

  • seed đại diện cho các giá trị để tạo số ngẫu nhiên

RandomUniform

Tạo ra giá trị bằng cách sử dụng phân phối dữ liệu đầu vào đồng nhất.

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

Ở đâu,

  • minval đại diện cho giới hạn dưới của các giá trị ngẫu nhiên để tạo

  • maxval đại diện cho giới hạn trên của các giá trị ngẫu nhiên để tạo

Đã cắt ngắn

Tạo giá trị bằng cách sử dụng phân phối chuẩn bị cắt ngắn của dữ liệu đầu vào.

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

Tạo ra giá trị dựa trên hình dạng đầu vào và hình dạng đầu ra của lớp cùng với tỷ lệ được chỉ định.

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

Ở đâu,

  • scale đại diện cho hệ số tỷ lệ

  • mode đại diện cho bất kỳ một trong số fan_in, fan_outfan_avg giá trị

  • distribution đại diện cho một trong hai normal hoặc là uniform

VarianceScaling

Nó tìm thấy stddev giá trị cho phân phối chuẩn bằng cách sử dụng công thức dưới đây và sau đó tìm trọng số bằng cách sử dụng phân phối chuẩn,

stddev = sqrt(scale / n)

Ở đâu n đại diện,

  • số đơn vị đầu vào cho mode = fan_in

  • số đơn vị ra cho mode = fan_out

  • số lượng đơn vị đầu vào và đầu ra trung bình cho mode = fan_avg

Tương tự, nó tìm giới hạn cho phân phối đồng đều bằng cách sử dụng công thức dưới đây và sau đó tìm trọng số bằng cách sử dụng phân phối đồng đều,

limit = sqrt(3 * scale / n)

lecun_normal

Tạo giá trị bằng cách sử dụng phân phối chuẩn lecun của dữ liệu đầu vào.

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

Nó tìm thấy stddev sử dụng công thức dưới đây và sau đó áp dụng phân phối chuẩn

stddev = sqrt(1 / fan_in)

Ở đâu, fan_in đại diện cho số lượng đơn vị đầu vào.

lecun_uniform

Tạo ra giá trị bằng cách sử dụng phân phối dữ liệu đầu vào thống nhất 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))

Nó tìm thấy limit sử dụng công thức dưới đây và sau đó áp dụng phân phối đồng đều

limit = sqrt(3 / fan_in)

Ở đâu,

  • fan_in đại diện cho số lượng đơn vị đầu vào

  • fan_out đại diện cho số lượng đơn vị đầu ra

glorot_normal

Tạo ra giá trị bằng cách sử dụng phân phối chuẩn glorot của dữ liệu đầu vào.

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

Nó tìm thấy stddev sử dụng công thức dưới đây và sau đó áp dụng phân phối chuẩn

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

Ở đâu,

  • fan_in đại diện cho số lượng đơn vị đầu vào

  • fan_out đại diện cho số lượng đơn vị đầu ra

glorot_uniform

Tạo ra giá trị bằng cách sử dụng phân phối dữ liệu đầu vào đồng nhất 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))

Nó tìm thấy limit sử dụng công thức dưới đây và sau đó áp dụng phân phối đồng đều

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

Ở đâu,

  • fan_in đại diện cho số lượng đơn vị đầu vào.

  • fan_out đại diện cho số lượng đơn vị đầu ra

he_normal

Tạo ra giá trị bằng cách sử dụng phân phối chuẩn của dữ liệu đầu vào.

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

Nó tìm thấy stddev bằng cách sử dụng công thức dưới đây và sau đó áp dụng phân phối chuẩn.

stddev = sqrt(2 / fan_in)

Ở đâu, fan_in đại diện cho số lượng đơn vị đầu vào.

he_uniform

Tạo ra giá trị bằng cách sử dụng phân phối dữ liệu đầu vào đồng nhất.

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

Nó tìm thấy limit sử dụng công thức dưới đây và sau đó áp dụng phân phối thống nhất.

limit = sqrt(6 / fan_in)

Ở đâu, fan_in đại diện cho số lượng đơn vị đầu vào.

Trực giao

Tạo một ma trận trực giao ngẫu nhiên.

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

Ở đâu, gain biểu diễn hệ số nhân của ma trận.

Danh tính

Tạo ma trận nhận dạng.

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

Ràng buộc

Trong học máy, một ràng buộc sẽ được đặt trên tham số (trọng số) trong giai đoạn tối ưu hóa. <> Mô-đun ràng buộc cung cấp các chức năng khác nhau để thiết lập ràng buộc trên lớp. Một số hàm ràng buộc như sau.

NonNeg

Ràng buộc trọng số là giá trị không âm.

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

Ở đâu, kernel_constraint đại diện cho ràng buộc được sử dụng trong lớp.

UnitNorm

Ràng buộc trọng lượng là định mức đơn vị.

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

Giới hạn trọng lượng ở định mức nhỏ hơn hoặc bằng giá trị đã cho.

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

Ở đâu,

  • max_value đại diện cho giới hạn trên

  • trục đại diện cho kích thước mà ràng buộc được áp dụng. ví dụ: trong Hình dạng (2,3,4) trục 0 biểu thị kích thước thứ nhất, 1 biểu thị kích thước thứ hai và 2 biểu thị kích thước thứ ba

MinMaxNorm

Ràng buộc trọng lượng là chuẩn giữa các giá trị tối thiểu và tối đa được chỉ định.

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

Ở đâu, rate đại diện cho tốc độ mà giới hạn trọng lượng được áp dụng.

Bộ điều chỉnh

Trong học máy, bộ điều chỉnh được sử dụng trong giai đoạn tối ưu hóa. Nó áp dụng một số hình phạt trên tham số lớp trong quá trình tối ưu hóa. Mô-đun chính quy Keras cung cấp các chức năng bên dưới để thiết lập các hình phạt trên lớp. Quy định hóa chỉ áp dụng trên cơ sở từng lớp.

Bộ điều chỉnh L1

Nó cung cấp chính quy dựa trên 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))

Ở đâu, kernel_regularizer đại diện cho tốc độ mà giới hạn trọng lượng được áp dụng.

Bộ điều chỉnh L2

Nó cung cấp chính quy dựa trên 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))

Bộ điều chỉnh L1 và L2

Nó cung cấp cả quy định hóa dựa trên L1 và 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))

Kích hoạt

Trong học máy, chức năng kích hoạt là một chức năng đặc biệt được sử dụng để tìm xem một tế bào thần kinh cụ thể có được kích hoạt hay không. Về cơ bản, chức năng kích hoạt thực hiện một sự biến đổi phi tuyến của dữ liệu đầu vào và do đó cho phép các tế bào thần kinh học tốt hơn. Đầu ra của một tế bào thần kinh phụ thuộc vào chức năng kích hoạt.

Khi bạn nhớ lại khái niệm nhận thức đơn lẻ, đầu ra của một tế bào cảm thụ (neuron) chỉ đơn giản là kết quả của hàm kích hoạt, hàm này chấp nhận tổng của tất cả đầu vào nhân với trọng số tương ứng của nó cộng với độ lệch tổng thể, nếu có.

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

Vì vậy, chức năng kích hoạt đóng một vai trò quan trọng trong việc học thành công mô hình. Keras cung cấp rất nhiều chức năng kích hoạt trong mô-đun kích hoạt. Hãy để chúng tôi tìm hiểu tất cả các kích hoạt có sẵn trong mô-đun.

tuyến tính

Áp dụng chức năng tuyến tính. Không lam gi cả.

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

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

Ở đâu, activationđề cập đến chức năng kích hoạt của lớp. Nó có thể được chỉ định đơn giản bằng tên của hàm và lớp sẽ sử dụng các trình kích hoạt tương ứng.

elu

Áp dụng đơn vị tuyến tính hàm mũ.

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

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

selu

Áp dụng đơn vị tuyến tính theo cấp số nhân được chia tỷ lệ.

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

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

relu

Áp dụng Đơn vị tuyến tính đã chỉnh lưu.

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

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

softmax

Áp dụng chức năng Softmax.

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

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

softplus

Áp dụng chức nă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

Áp dụng chức năng Softsign.

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

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

tanh

Áp dụng hàm tiếp tuyến Hyperbolic.

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

sigmoid

Áp dụng chức năng 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

Áp dụng chức năng 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,)))

số mũ

Áp dụng hàm số mũ.

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

model = Sequential() 
model.add(Dense(512, activation = 'exponential', input_shape = (784,)))
Sr.No Lớp & Mô tả
1

Lớp dày đặc

Dense layer là lớp mạng nơ-ron được kết nối sâu thường xuyên.

2

Lớp bỏ học

Dropout là một trong những khái niệm quan trọng trong học máy.

3

Làm phẳng các lớp

Flatten được sử dụng để làm phẳng đầu vào.

4

Định hình lại các lớp

Reshape được sử dụng để thay đổi hình dạng của đầu vào.

5

Permute Layers

Permute cũng được sử dụng để thay đổi hình dạng của đầu vào bằng cách sử dụng mẫu.

6

Lớp lặp lại

RepeatVector được sử dụng để lặp lại đầu vào cho số lần đặt, n lần.

7

Lớp Lambda

Lambda được sử dụng để biến đổi dữ liệu đầu vào bằng biểu thức hoặc hàm.

số 8

Lớp chuyển đổi

Keras chứa rất nhiều lớp để tạo ANN dựa trên Convolution, thường được gọi là Mạng thần kinh Convolution (CNN) .

9

Lớp gộp

Nó được sử dụng để thực hiện các hoạt động tổng hợp tối đa trên dữ liệu tạm thời.

10

Lớp kết nối cục bộ

Các lớp được kết nối cục bộ tương tự như lớp Conv1D nhưng sự khác biệt là trọng số lớp Conv1D được chia sẻ nhưng ở đây trọng số không được chia sẻ.

11

Hợp nhất lớp

Nó được sử dụng để hợp nhất một danh sách các đầu vào.

12

Lớp nhúng

Nó thực hiện các thao tác nhúng trong lớp đầu vào.