Bàn về layers trong ANN



Hôm nay chúng ta sẽ bàn về layers:

Init ANN
classifier = Sequential()

First hidden layer
classifier.add(Dense(output_dim = 6, init = 'uniform', activation='relu', input_dim=11))

Second hidden layer
classifier.add(Dense(output_dim = 6, init = 'uniform', activation='signmoid'))

Output layer
classifier.add(Dense(output_dim = 1, init = 'uniform', activation='softmax'))

Vấn đề 1:

Có lẽ nhiều bạn đã thắc mắc làm sao để chọn được output_dim=? là hợp lý?
Đây là một câu hỏi lớn haha. 
Yep, It's art not science! Việc lựa chọn output_dim tốt nhất có lẽ là dựa vào kinh nghiệm việc tùy chỉnh các tham số sao cho có kết quả tốt nhất( param tuning)

Có một mẹo mà mình học được từ series về ANN của Machine Learning A-Z:
Nói trước là chỉ là mẹo và nó không phải ART mình nói ở trên đâu.
Nó tốt hơn khi các bạn không biết nên chọn output_dim bằng bao nhiêu chứ không phải tốt nhất cho bài toán.

Ví dụ:
X_test có shape(2000,11)
y_test có shape(2000,)

output_dim = (đầu vào+đầu ra)/2 = (11+1)/2 = 6 ^^
À quên, ở layer output bạn sẽ thấy output_dim = 1 vì sao? Đó là vì label target của mình là binary nên output chỉ có 1 node thôi. Nếu các bạn có nhiều class thì số output_dim của layer cuối chính bằng nó nhé. Giả dụ như bài toán yêu cầu phân loại ra 3 loại: chó, mèo, gà thì output_dim = 3.

Vấn đề 2:
Đó là activation function chọn như thế nào?

Mỗi layer sẽ có những cách chọn activation function khác nhau.(Xem lại code)
Tại sao layer 2 lại là signmoid, tại sao layer cuối lại là softmax? Các bạn xem lại các ưu nhược điểm của từng activation function để áp dụng vào bài toán của mình nhé!

Nhận xét

Bài đăng phổ biến từ blog này

ASP.NET MVC 5- Ứng dụng quản lý sinh viên

Nhận dạng chữ cái viết tay

[Phần 3]: Controllers