CNTK - Tạo mạng thần kinh đầu tiên
Chương này sẽ trình bày chi tiết về cách tạo mạng nơ-ron trong CNTK.
Xây dựng cấu trúc mạng
Để áp dụng các khái niệm CNTK để xây dựng NN đầu tiên, chúng ta sẽ sử dụng NN để phân loại các loài hoa iris dựa trên các đặc tính vật lý của chiều rộng và chiều dài lá đài, chiều rộng và chiều dài của cánh hoa. Tập dữ liệu mà chúng tôi sẽ sử dụng tập dữ liệu iris mô tả các đặc tính vật lý của các giống hoa iris khác nhau -
- Chiều dài riêng lẻ
- Chiều rộng vách ngăn
- Chiều dài cánh hoa
- Chiều rộng cánh hoa
- Loại iris setosa hoặc iris versicolor hoặc iris virginica
Ở đây, chúng ta sẽ xây dựng một NN thông thường được gọi là NN cấp phát. Chúng ta cùng xem các bước thực hiện để xây dựng cấu trúc NN -
Step 1 - Đầu tiên, chúng ta sẽ nhập các thành phần cần thiết như kiểu lớp, hàm kích hoạt và một hàm cho phép chúng ta xác định một biến đầu vào cho NN của chúng ta, từ thư viện CNTK.
from cntk import default_options, input_variable
from cntk.layers import Dense, Sequential
from cntk.ops import log_softmax, relu
Step 2- Sau đó, chúng ta sẽ tạo mô hình của mình bằng cách sử dụng hàm tuần tự. Sau khi được tạo, chúng tôi sẽ cung cấp cho nó các lớp mà chúng tôi muốn. Ở đây, chúng ta sẽ tạo ra hai lớp riêng biệt trong NN của chúng ta; một với bốn nơ-ron và một với ba nơ-ron.
model = Sequential([Dense(4, activation=relu), Dense(3, activation=log_sogtmax)])
Step 3- Cuối cùng, để biên dịch NN, chúng ta sẽ liên kết mạng với biến đầu vào. Nó có một lớp đầu vào với bốn tế bào thần kinh và một lớp đầu ra với ba tế bào thần kinh.
feature= input_variable(4)
z = model(feature)
Áp dụng chức năng kích hoạt
Có rất nhiều chức năng kích hoạt để lựa chọn và việc chọn đúng chức năng kích hoạt chắc chắn sẽ tạo ra sự khác biệt lớn đối với mô hình học sâu của chúng tôi sẽ hoạt động tốt như thế nào.
Ở lớp đầu ra
Chọn một activation chức năng ở lớp đầu ra sẽ phụ thuộc vào loại vấn đề mà chúng ta sẽ giải quyết với mô hình của mình.
Đối với bài toán hồi quy, chúng ta nên sử dụng linear activation function trên lớp đầu ra.
Đối với vấn đề phân loại nhị phân, chúng ta nên sử dụng sigmoid activation function trên lớp đầu ra.
Đối với bài toán phân loại nhiều lớp, chúng ta nên sử dụng softmax activation function trên lớp đầu ra.
Ở đây, chúng ta sẽ xây dựng một mô hình để dự đoán một trong ba lớp. Nó có nghĩa là chúng ta cần sử dụngsoftmax activation function ở lớp đầu ra.
Tại lớp ẩn
Chọn một activation chức năng ở lớp ẩn yêu cầu một số thử nghiệm để theo dõi hiệu suất để xem chức năng kích hoạt nào hoạt động tốt.
Trong một bài toán phân loại, chúng ta cần dự đoán xác suất một mẫu thuộc về một lớp cụ thể. Đó là lý do tại sao chúng ta cần mộtactivation functioncung cấp cho chúng tôi các giá trị xác suất. Để đạt được mục tiêu này,sigmoid activation function có thể giúp chúng tôi.
Một trong những vấn đề lớn liên quan đến chức năng sigmoid là vấn đề gradient biến mất. Để khắc phục sự cố như vậy, chúng ta có thể sử dụngReLU activation function phủ tất cả các giá trị âm thành 0 và hoạt động như một bộ lọc chuyển qua cho các giá trị dương.
Chọn một chức năng mất mát
Khi đã có cấu trúc cho mô hình NN của mình, chúng ta phải tối ưu hóa nó. Để tối ưu hóa, chúng tôi cần mộtloss function. không giốngactivation functions, chúng tôi có rất ít chức năng mất mát để lựa chọn. Tuy nhiên, việc chọn một hàm tổn thất sẽ phụ thuộc vào loại vấn đề mà chúng ta sẽ giải quyết với mô hình của mình.
Ví dụ, trong một bài toán phân loại, chúng ta nên sử dụng một hàm tổn thất có thể đo lường sự khác biệt giữa một lớp dự đoán và một lớp thực tế.
thiếu chức năng
Đối với vấn đề phân loại, chúng tôi sẽ giải quyết bằng mô hình NN của chúng tôi, categorical cross entropychức năng mất mát là ứng cử viên tốt nhất. Trong CNTK, nó được thực hiện nhưcross_entropy_with_softmax có thể được nhập khẩu từ cntk.losses gói, như sau
label= input_variable(3)
loss = cross_entropy_with_softmax(z, label)
Số liệu
Với việc có cấu trúc cho mô hình NN của chúng tôi và một hàm mất mát để áp dụng, chúng tôi có tất cả các yếu tố để bắt đầu đưa ra công thức tối ưu hóa mô hình học sâu của mình. Tuy nhiên, trước khi đi sâu vào vấn đề này, chúng ta nên tìm hiểu về các chỉ số.
cntk.metrics
CNTK có gói được đặt tên cntk.metricstừ đó chúng tôi có thể nhập các chỉ số mà chúng tôi sẽ sử dụng. Khi chúng tôi đang xây dựng mô hình phân loại, chúng tôi sẽ sử dụngclassification_error matric sẽ tạo ra một số từ 0 đến 1. Số từ 0 đến 1 cho biết phần trăm mẫu được dự đoán chính xác -
Trước tiên, chúng ta cần nhập số liệu từ cntk.metrics gói -
from cntk.metrics import classification_error
error_rate = classification_error(z, label)
Hàm trên thực sự cần đầu ra của NN và nhãn mong đợi làm đầu vào.