Trong mạng nơ-ron, mạng nơ-ron tích chập (ConvNets hay CNNs, Convolutional Neural Network) là một trong những phương pháp chính để thực hiện nhận dạng hình ảnh, phân loại hình ảnh. CNN được sử dụng rộng rãi trong một số lĩnh vực như phát hiện đối tượng, nhận dạng khuôn mặt, ….. Bài viết này trình bày một số kiến thức cơ bản đã tự tìm hiểu về mạng nơ-ron tích chập và các kiến thức liên quan cũng như trình bày một ví dụ nhỏ về phân biệt hình ảnh của chó và mèo bằng cách sử dụng phương pháp trên.
Bạn đang xem: Fully connected layer là gì
Bạn đang xem: Fully connected layer là gì
Tìm hiểu về CNN
Nội dung chính
Mô hình neural network
Tìm hiểu về CNNMạng nơ-ron tự tạo ( Neural Network – NN ) là một quy mô lập trình mô phỏng phương pháp hoạt động giải trí của mạng nơ-ron thần kinh. Kết hợp với những kĩ thuật học sâu ( Deep Learning – DL ), mạng nơ-ron tự tạo đang trở thành một công cụ rất can đảm và mạnh mẽ mang lại hiệu suất cao tốt nhất cho nhiều bài toán khó như nhận dạng ảnh, giọng nói hay giải quyết và xử lý ngôn từ tự nhiên .
Lịch sử phát triển của mạng nơ-ron nhân tạo bắt đầu khi Warren McCulloch và Walter Pitts đã tạo ra một mô hình tính toán cho mạng nơ-ron dựa trên các thuật toán gọi là logic ngưỡng vào năm 1943. Tuy nhiên, để làm quen và hiểu được một số kiến thức cơ bản về mô hình mạng nơ-ron nhân tạp, chúng ta sẽ bàn đến hồi quy logictics – thứ có thể coi là mô hình neural network đơn giản nhất với chỉ input layer và output layer.
Giả sử tất cả chúng ta có bài toán dựa đoán năng lực nhận đơn giao hàng dựa trên khoảng cách và thời gian cần giao trong ngày dựa trên tài liệu đã cho trước. Từ đó ta hoàn toàn có thể hiểu rằng với những bộ tài liệu { x, y } cho sẵn với x có hai đặc trưng x1x_1x1 và x2x_2x2 lần lượt là khoảng cách và thời gian cần giao trong ngày, tất cả chúng ta sẽ sử dụng những giải pháp để tìm được ước đạt y ^ = f ( w, x ) \ widehat { y } = f ( w, x ) y = f ( w, x ) sao cho sát với giá trị y nhất .Thông thường, tất cả chúng ta thường sử dụng hàm f ( w, x ) = wTxf ( w, x ) = w ^ Txf ( w, x ) = wTx để dễ tính toán, tuy nhiên đầu ra y là Phần Trăm đơn hàng có được nhận hay không nên để đầu ra thỏa mãn nhu cầu được điều kiện kèm theo có dạng tựa như Xác Suất tức là luôn có giá trị trong khoảng chừng từ 0 đến 1 tất cả chúng ta thường sử dụng hàm logictics θ ( z ) = 11 + e − z \ theta ( z ) = \ frac { 1 } { 1 + e ^ { { – z } } } θ ( z ) = 1 + e − z1 với z = f ( w, x ) z = f ( w, x ) z = f ( w, x ) thường được gọi là hàm sigmod làm hàm activation .Khi đó, hàm lỗi của một cho mỗi điểm { x ( i ), y ( i ) x ^ { ( i ) }, y ^ { ( i ) } x ( i ), y ( i ) } được định nghĩa là cross-entropy của y ( i ) y ^ { ( i ) } y ( i ) và y ^ ( i ) \ widehat { y } ^ { ( i ) } y ( i ) như sau :L = − ( y ( i ) ∗ log ( y ^ ( i ) ) − ( 1 − y ( i ) ) ∗ log ( 1 − y ^ ( i ) ) ) L = – ( y ^ { ( i ) } * log ( \ widehat { y } ^ { ( i ) } ) – ( 1 – y ^ { ( i ) } ) * log ( 1 – \ widehat { y } ^ { ( i ) } ) ) L = − ( y ( i ) ∗ log ( y ( i ) ) − ( 1 − y ( i ) ) ∗ log ( 1 − y ( i ) ) )Khi đó hàm này trên hàng loạt tài liệu được tính bằng cách lấy tổng những giá trị trên. Bằng cách tối ưu hàm mất mát này, thường bằng giải pháp đạo hàm gradient, tất cả chúng ta hoàn toàn có thể hoàn toàn có thể thu được quy mô tương thích nhất cho bài toán cũng như bộ tài liệu đã cho. Tuy nhiên, dù cố gắng nỗ lực nhưng hầu hết giá trị ước đạt từ hàm trên vẫn có một số ít chênh lệch với giá trị trong thực tiễn, vì thế để bảo vệ cho tính khách quan, người ta thường thêm một giá trị b hay w0w_0w0 vào để tính bằng cách sử dụng f ( w, x ) = wTx + w0f ( w, x ) = w ^ Tx + w_0f ( w, x ) = wTx + w0 giá trị này là giá trị bias hoàn toàn có thể hiểu là phần bù cho những chênh lệch khó / không hề cực tiểu từ bước trên .Thông thường những bước thống kê giám sát của một quy mô mạng nơ-ron tự tạo thường được bộc lộ bằng một biểu đồ giám sát để hoàn toàn có thể quan sát trực quan hơn. Dưới đây là một biểu đồ biểu lộ cho bài toán phân loại dựa trên hồi quy logictics .
Hình ảnh từ website https://sebastianraschka.com/faq/docs/logisticregr-neuralnet.html
Convolutional Neural Network
Như trình diễn ở trên, Convolutional Neural Network là một trong những phương pháp chính khi sử dụng tài liệu về ảnh. Kiến trúc mạng này Open do những giải pháp giải quyết và xử lý tài liệu ảnh thường sử dụng giá trị của từng px. Vậy nên với một ảnh có giá trị kích cỡ 100×100 sử dụng kênh RGB ta có tổng số ta có 100 * 100 * 3 bằng 30000 nút ở lớp nguồn vào. Điều đó kéo theo việc có một số lượng lớn weight và bias dẫn đến mạng nơ-ron trở nên quá đồ sộ, gây khó khăn vất vả cho việc đo lường và thống kê. Hơn nữa, tất cả chúng ta hoàn toàn có thể thấy rằng thông tin của những px thường chỉ chịu ảnh hưởng tác động bởi những px ngay gần nó, vậy nên việc bỏ lỡ 1 số ít nút ở tầng nguồn vào trong mỗi lần huấn luyện và đào tạo sẽ không làm giảm độ đúng mực của quy mô. Vậy nên người ta sử dụng cửa số tích chập nhằm mục đích xử lý yếu tố số lượng tham số lớn mà vẫn trích xuất được đặc trưng của ảnh .
Về mặt kỹ thuật, trong mô hình học sâu CNN, mô hình ảnh đầu vào sẽ chuyển nó qua một loạt các lớp tích chập với các bộ lọc, sau đó đến lớp Pooling, rồi tiếp theo là các lớp được kết nối đầy đủ (FC — fully connected layers) và cuối cùng áp dụng hàm softmax để phân loại một đối tượng dựa trên giá trị xác suất trong khoản từ 0 đến 1.
Xem thêm: Bidv Smartbanking Là Gì? Cách Đăng Ký Smart Banking Bidv Online
Convolution Layer
Quá trình trượt những bộ lọc thường có những giá trị được pháp luật gồm có :padding: quy định bộ đệm của bộ lọc hay chính là phần màu xám được thêm vào ảnhstride: quy định bước nhảy trong quá trình thực hiện.padding : lao lý bộ đệm của bộ lọc hay chính là phần màu xám được thêm vào ảnhstride : lao lý bước nhảy trong quy trình triển khai .
Hình minh họa sau sẽ giúp chúng ta dễ tưởng tượng hơn về quá trình trên:
Hình ảnh chụp từ trang CS231n Convolutional Neural Networks for Visual Recognition, để nắm rõ hơn về Convolution Layer mọi người có thể đọc tiếp về phần giải thích ở trang này.
Với mỗi kernel khác nhau ta sẽ học được những đặc trưng khác nhau của ảnh, nên trong mỗi convolutional layer ta sẽ dùng nhiều kernel để học được nhiều thuộc tính của ảnh. Vì mỗi kernel cho ra output là 1 matrix nên k kernel sẽ cho ra k output matrix. Ta phối hợp k output matrix này lại thành 1 tensor 3 chiều có chiều sâu k. Output của convolutional layer sẽ qua hàm activation function trước khi trở thành input của convolutional layer tiếp theo .
Pooling layer
Pooling layer thường được dùng giữa những convolutional layer, để giảm size tài liệu nhưng vẫn giữ được những thuộc tính quan trọng. Kích thước tài liệu giảm giúp giảm việc đo lường và thống kê trong Mã Sản Phẩm. Trong quy trình này, quy tắc về stride và padding vận dụng như phép tính convolution trên ảnh .
Hình ảnh từ trang https://www.geeksforgeeks.org/cnn-introduction-to-pooling-layer/
Fully connected layer
Sau khi ảnh được truyền qua nhiều convolutional layer và pooling layer thì model đã học được tương đối các đặc điểm của ảnh thì tensor của output của layer cuối cùng sẽ được là phẳng thành vector và đưa vào một lớp được kết nối như một mạng nơ-ron. Với FC layer được kết hợp với các tính năng lại với nhau để tạo ra một mô hình. Cuối cùng sử dụng softmax hoặc sigmoid để phân loại đầu ra.
Phân loại ảnh
Bài toán phân loại ảnh chó và mèo nghe có vẻ như đơn thuần, nhưng nó chỉ được xử lý hiệu suất cao trong vài năm qua bằng cách sử dụng mạng nơ-ron tích hợp học sâu. Bằng những triển khai ví dụ này, tất cả chúng ta sẽ hiểu thêm được về Convolutional Neural Network bên cạnh những triết lý đã trình diễn trên .
Dữ liệu
Dữ liệu được sử dụng là tập dữ liệu Dogs vs. Cats trên Kaggle. Tập dữ liệu này gồm có gần 25000 tập ảnh chó và mèo đã được gán nhãn sẵn trong một tệp csv đi kèm. Phần dữ liệu này sẽ được sử dụng trong ví dụ này .
Các bước tiến hành
Đầu tiên tất cả chúng ta import những thư viện bằng đoạn mã sau :import os, cv2, itertoolsimport numpy as npimport pandas as pdimport matplotlib.pyplot as plt % matplotlib inline ! pip install np_utilsfrom keras.utils. np_utils import to_categoricalfrom keras.models import Sequentialfrom keras.layers import Conv2Dfrom keras.layers import MaxPooling2Dfrom keras.layers import Flattenfrom keras.layers import Densefrom keras.layers import Dropoutfrom sklearn.utils import shuffle ! pip install sklearnimport sklearnfrom sklearn. model_selection import train_test_splitTiếp đó là định nghĩa 1 số ít hằng số để thuận tiện sử dungj :TRAIN_DIR = “. / train / ” TEST_DIR = “. / test1 / ” ROWS = 64COLS = 64CHANNELS = 3T ừ đó tất cả chúng ta lấy đường dẫn tài liệu bằng đoạn mã sau :train_images = test_images = Dữ liệu là tập những ảnh nên cần tiền giải quyết và xử lý để thu được hiệu quả tốt hơn, vậy nên tất cả chúng ta sẽ thực thi như sau :def read_image ( file_path ) : # print ( file_path ) img = cv2.imread ( file_path, cv2. IMREAD_COLOR ) # print ( img ) return cv2.resize ( img, ( ROWS, COLS ), interpolation = cv2. INTER_CUBIC ) def prep_data ( images ) : m = len ( images ) n_x = ROWS * COLS * CHANNELS X = np.ndarray ( ( m, ROWS, COLS, CHANNELS ), dtype = np. uint8 ) y = np.zeros ( ( m, 1 ) ) print ( ” X.shape is { } “. format ( X.shape ) ) for i, image_file in enumerate ( images ) : image = read_image ( image_file ) X = np.squeeze ( image.reshape ( ( ROWS, COLS, CHANNELS ) ) ) if ” dog ” in image_file. lower ( ) : y = 1 elif ” cat ” in image_file. lower ( ) : y = 0 else : # for test data y = image_file. split ( ” / ” ). split ( “. ” ) if i % 5000 = = 0 : print ( ” Proceed { } of { } “. format ( i, m ) ) return X, y X_train, y_train = prep_data ( train_images ) X_test, test_idx = prep_data ( test_images ) Sau khi nhận được giá trị đã giải quyết và xử lý, tất cả chúng ta triển khai chia thành hai tập train và validate và tạo one-hot vector
X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=1)y_train_one_hot = to_categorical(y_train)num_classes = y_train_one_hot.shapey_val_one_hot = to_categorical(y_val)\X_train_norm = X_train / 255# X_val_norm = X_val / 255Tiếp đến là định nghĩa mạng CNN được sử dụng bao gồm 4 Convolutional layers theo sau là 1 Fully Connected Layer và sử dụng đầu ra là Sigmoid.
Xem thêm: Ride-Hailing Là Gì
model = Sequential()model.add(Conv2D(32, (3,3), input_shape=(ROWS, COLS, CHANNELS), activation=”relu”))model.add(MaxPooling2D(pool_size = (2,2)))model.add(Conv2D(64, (3,3), activation=”relu”))model.add(MaxPooling2D(pool_size = (2,2)))model.add(Dropout(0.4))model.add(Conv2D(128, (3,3), activation=”relu”))model.add(MaxPooling2D(pool_size = (2,2)))model.add(Dropout(0.4))model.add(Conv2D(256, (3,3), activation=”relu”))model.add(MaxPooling2D(pool_size = (2,2)))model.add(Dropout(0.4))model.add(Conv2D(512, (1,1), activation=”relu”))#model.add(MaxPooling2D(pool_size = (2,2)))model.add(Flatten())model.add(Dropout(0.4))model.add(Dense(units=120, activation=”relu”))model.add(Dense(units=2, activation=”sigmoid”))model.compile(optimizer=”adam”, loss=”categorical_crossentropy”, metrics=)model.summary()Tiếp theo là huấn luyện mô hình bằng cách sử dụng hàm fit có sawnx:
model.fit ( X_train_norm, y_train_one_hot, validation_data = ( X_val_norm, y_val_one_hot ), epochs = 50, batch_size = 64 ) Sau khi giảng dạy xong, tất cả chúng ta hoàn toàn có thể thử predict bằng quy mô vừa giảng dạy bằng đoạn mã sau :Kết luậnKết luậnBài viết này trình diễn 1 số ít kỹ năng và kiến thức cơ bản đã tự khám phá về mạng nơ-ron tích chập và những kiến thức và kỹ năng tương quan cũng như trình diễn một ví dụ nhỏ về phân biệt hình ảnh của chó và mèo bằng cách sử dụng giải pháp trên. Có thể thấy rằng những framework Machine learning đã tương hỗ rất tốt trong việc sử dụng những quy mô dựa trên những mạng nơ-ron tự tạo để người dùng hoàn toàn có thể không cần hiểu rõ về những mạng nơ-ron cũng hoàn toàn có thể sử dụng. Tuy nhiên để có năng lực tự nhìn nhận và nâng cấp cải tiến những chiêu thức của bản thân, người dùng vẫn cần khám phá kĩ về thực chất và cách hoạt động giải trí của những giải pháp này. Bài viết đến đây là kết thúc cảm ơn mọi người đã giành thời hạn đọc .
Source: http://139.180.218.5
Category: Thuật ngữ đời thường