Tạo mô hình học sâu

Mô hình mạng nơ-ron của chúng tôi sẽ bao gồm một chồng lớp tuyến tính. Để xác định một mô hình như vậy, chúng tôi gọiSequential chức năng -

model = Sequential()

Lớp đầu vào

Chúng tôi xác định lớp đầu vào, là lớp đầu tiên trong mạng của chúng tôi bằng cách sử dụng câu lệnh chương trình sau:

model.add(Dense(512, input_shape=(784,)))

Điều này tạo ra một lớp có 512 nút (nơ-ron) với 784 nút đầu vào. Điều này được mô tả trong hình bên dưới -

Lưu ý rằng tất cả các nút đầu vào được kết nối đầy đủ với Lớp 1, tức là mỗi nút đầu vào được kết nối với tất cả 512 nút của Lớp 1.

Tiếp theo, chúng ta cần thêm chức năng kích hoạt cho đầu ra của Lớp 1. Chúng ta sẽ sử dụng ReLU làm kích hoạt của mình. Chức năng kích hoạt được thêm vào bằng cách sử dụng câu lệnh chương trình sau:

model.add(Activation('relu'))

Tiếp theo, chúng tôi thêm Số người bỏ học là 20% bằng cách sử dụng câu lệnh bên dưới. Bỏ học là một kỹ thuật được sử dụng để ngăn người mẫu trang bị quá mức.

model.add(Dropout(0.2))

Tại thời điểm này, lớp đầu vào của chúng ta đã được xác định đầy đủ. Tiếp theo, chúng ta sẽ thêm một lớp ẩn.

Lớp ẩn

Lớp ẩn của chúng ta sẽ bao gồm 512 nút. Đầu vào cho lớp ẩn đến từ lớp đầu vào đã xác định trước đó của chúng ta. Tất cả các nút được kết nối đầy đủ như trong trường hợp trước đó. Đầu ra của lớp ẩn sẽ chuyển đến lớp tiếp theo trong mạng, đây sẽ là lớp cuối cùng và đầu ra của chúng ta. Chúng tôi sẽ sử dụng kích hoạt ReLU tương tự như cho lớp trước và tỷ lệ bỏ qua là 20%. Mã để thêm lớp này được đưa ra ở đây -

model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.2))

Mạng ở giai đoạn này có thể được hình dung như sau:

Tiếp theo, chúng ta sẽ thêm lớp cuối cùng vào mạng của mình, đó là lớp đầu ra. Lưu ý rằng bạn có thể thêm bất kỳ số lớp ẩn nào bằng cách sử dụng mã tương tự như mã mà bạn đã sử dụng ở đây. Thêm nhiều lớp hơn sẽ làm cho mạng phức tạp để đào tạo; tuy nhiên, mang lại lợi thế nhất định về kết quả tốt hơn trong nhiều trường hợp mặc dù không phải tất cả.

Lớp đầu ra

Lớp đầu ra chỉ bao gồm 10 nút vì chúng ta muốn phân loại các hình ảnh đã cho thành 10 chữ số khác nhau. Chúng tôi thêm lớp này, sử dụng câu lệnh sau:

model.add(Dense(10))

Khi chúng tôi muốn phân loại đầu ra theo 10 đơn vị riêng biệt, chúng tôi sử dụng kích hoạt softmax. Trong trường hợp ReLU, đầu ra là nhị phân. Chúng tôi thêm kích hoạt bằng cách sử dụng câu lệnh sau:

model.add(Activation('softmax'))

Tại thời điểm này, mạng của chúng ta có thể được hình dung như thể hiện trong sơ đồ dưới đây:

Tại thời điểm này, mô hình mạng của chúng tôi đã được xác định đầy đủ trong phần mềm. Chạy ô mã và nếu không có lỗi, bạn sẽ nhận được thông báo xác nhận trên màn hình như trong ảnh chụp màn hình bên dưới -

Tiếp theo, chúng ta cần biên dịch mô hình.