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_out và fan_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. |