Site icon Nhạc lý căn bản – nhacly.com

Bài 7: Layers (phần 1) – Keras cơ bản

Đăng bởi : Admin | Lượt xem : 2488 | Chuyên mục : AI

Như đã khám phá ở bài trước, những lớp Keras là khối thiết kế xây dựng chính của những quy mô Keras. Mỗi lớp nhận thông tin nguồn vào, triển khai 1 số ít giám sát và ở đầu cuối xuất ra thông tin đã được đổi khác. Đầ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ó. Ta sẽ khám phá kỹ càng hơn trong bài này nhé

1. Giới thiệu :

Một lớp Keras yêu cầu shape(hình dạng) đầu vào (input_shape) để hiểu cấu trúc của dữ liệu đầu vào, bộ khởi tạo để đặt trọng số(weight) cho mỗi đầu vào và cuối cùng là các bộ kích hoạt(activation funtion) để biến đổi đầu ra để làm cho nó 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 nhu yếu những chi tiết cụ thể tối thiểu dưới đây để tạo một lớp hoàn hảo .

  • Hình dạng dữ liệu đầu vào
  • Số lượng neurons / đơn vị trong lớp
  • Khởi tạo
  • Regularizers(Bộ điều chỉnh)
  • Constraints(Ràng buộc)
  • Activations (Kích hoạt)

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

Giải thích code :

  • Dòng 1-5 imports các mô đun cần thiết.
  • Dòng 7 Tạo model mới sử dụng Sequential API.
  • Dòng 9 Tạo lớp Dense mới và thêm vào model. Dense là 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 nơron 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ì ta cũng cần cung cấp Hình dạng đầu vào, (16,). 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 : hình dạng của dữ liệu đầu vào.kernel_initializer :trình khởi tạo sẽ được sử dụng. hàm he_uniform được đặt làm giá trị.kernel_regularizer 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. Hàm MaxNorm được đặt làm giá trị.activation : hàm relu được đặt thành giá trị.
  • Dòng 10 Tạo lớp Dense thứ 2 với 16 đơn vị và đặ relu như là hàm activation.
  • Dòng 11 Tạo lớp Dense cuối cùng với 8 đơn vị

2. Khái niệm cơ bản về Layers :

Ta sẽ cùng khám phá khái niệm cơ bản về lớp cũng như cách Keras tương hỗ với những khái niệm

Input shape

Trong học máy, tổng thể những loại tài liệu nguồn vào như văn bản, hình ảnh hoặc video sẽ được quy đổi tiên phong thành mảng số và sau đó đưa vào thuật toán. Số nguồn vào hoàn toàn 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. Ta hoàn toàn có thể chỉ định thông tin về chiều bằng cách sử dụng hình dạng, một bộ số nguyên. Ví dụ, ( 4,2 ) đại diện thay mặt cho ma trận có 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 4×2 ( 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 tiên phong của quy mô ( hoặc lớp nguồn vào của quy mô ), hình dạng của tài liệu nguồn vào phải được chỉ định .

3. Khởi tạo :

Trong ML, trọng số ( weight ) sẽ được gán cho toàn bộ tài liệu nguồn vào. Mô-đun khởi tạo phân phối những công dụng khác nhau để thiết lập những trọng số bắt đầu này. Một số hàm Keras Initializer như sau :

a. Zeros

Tạo tài liệu nguồn vào có giá trị bằng 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))

Trong đó, kernel_initializer đại diện cho trình khởi tạo cho kernal của model.

b. Ones

Tạo tài liệu nguồn vào với toàn bộ giá trị bằng 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))
c. Constant

Tạo một giá trị không đổi ( giả sử, 5 ) do người dùng chỉ định cho toàn bộ tài liệu nguồn 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)
)

Trong đó value đại diện cho giá trị không đổi

d. RandomNormal

Tạo dữ liệu đầu vào với giá trị sử dụng phân phối chuẩn

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

Trong đó :

  • 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
  • seed đại diện cho các giá trị để tạo ra số ngẫu nhiên
e. RandomUniform

Khởi tạo giá trị nguồn vào sử dụng phân phối như nhau

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

Trong đó :

  • 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
f. TruncatedNormal

Tạo giá trị bằng cách sử dụng phân phối chuẩn bị sẵn sàng cắt ngắn của tài liệu nguồn 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))
g. VarianceScaling

Tạo giá trị dựa trên hình dạng nguồn vào và hình dạng đầu ra của lớp cùng với tỷ suất đượ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))

Trong đó :

  • scale đại diện cho hệ số tỷ lệ
  • mode đại diện cho bất kỳ một trong các giá trị fan_in, fan_out và fan_avg
  • distribution ại diện cho normal hoặc uniform
h. lecun_normal

Tạo giá trị nguồn vào sử dụng phân phối chuẩn 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))

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

stddev = sqrt(1 / fan_in)

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

i. lecun_uniform

Giá trị nguồn vào được tạo bằng cách sử dụng phân phối giống hệ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))

Để tìm limit sử dụng công thức sau và sau đó áp dụng công thức đồng nhất :

limit = sqrt(3 / fan_in)

Trong đó :

  • 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
k. glorot_normal

Tạo giá trị đầu vào sử dụng phân phối chuẩn 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)
)

Để tìm stddev ta sử dụng công thức dưới đây, sau đó áp dụng phân phối chuẩn

stddev = sqrt(2 / (fan_in + fan_out))
l. glorot_uniform

Giá trị nguồn vào được tạo bằng cách sử dụng phân phối như nhau 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))

Tìm giá trị limit sử dụng công thức dưới đây, sau đó vận dụng phân phối chuẩn :

limit = sqrt(6 / (fan_in + fan_out))
Exit mobile version