Mạng thần kinh nhân tạo (ANN) nó là một hệ thống tính toán hiệu quả, có chủ đề trung tâm được mượn từ sự tương tự của mạng thần kinh sinh học. Mạng nơ-ron là một loại mô hình cho việc học máy. Vào giữa những năm 1980 và đầu những năm 1990, nhiều tiến bộ quan trọng về kiến trúc đã được thực hiện trong mạng nơ-ron. Trong chương này, bạn sẽ tìm hiểu thêm về Học sâu, một cách tiếp cận của AI.
Học sâu xuất hiện từ sự phát triển bùng nổ về tính toán của một thập kỷ với tư cách là một đối thủ nặng ký trong lĩnh vực này. Do đó, học sâu là một loại học máy cụ thể mà các thuật toán của nó được lấy cảm hứng từ cấu trúc và chức năng của não người.
Học máy v / s Học sâu
Mục lục
Học sâu là kỹ thuật học máy mạnh mẽ nhất hiện nay. Nó rất mạnh mẽ bởi vì họ học được cách tốt nhất để trình bày vấn đề trong khi học cách giải quyết vấn đề. Dưới đây là một so sánh giữa Học sâu và Học máy:
Sự phụ thuộc dữ liệu
Điểm khác biệt đầu tiên là dựa trên hiệu suất của DL và ML khi quy mô dữ liệu tăng lên. Khi dữ liệu lớn, các thuật toán học sâu hoạt động rất tốt.
Phụ thuộc máy móc
Các thuật toán học sâu cần những cỗ máy cao cấp để hoạt động hoàn hảo. Mặt khác, các thuật toán học máy cũng có thể hoạt động trên các máy cấp thấp.
Khai thác tính năng
Các thuật toán học sâu có thể trích xuất các tính năng cấp cao và cố gắng học hỏi từ các tính năng tương tự. Mặt khác, cần có một chuyên gia để xác định hầu hết các tính năng được trích xuất bằng máy học.
Thời gian thực hiện
Thời gian thực thi phụ thuộc vào nhiều tham số được sử dụng trong một thuật toán. Học sâu có nhiều tham số hơn các thuật toán học máy. Do đó, thời gian thực thi của các thuật toán DL, đặc biệt là thời gian đào tạo, nhiều hơn các thuật toán ML. Nhưng thời gian thử nghiệm của thuật toán DL ít hơn so với thuật toán ML.
Phương pháp tiếp cận để giải quyết vấn đề
Học sâu giải quyết vấn đề từ đầu đến cuối trong khi học máy sử dụng cách giải quyết vấn đề truyền thống, tức là bằng cách chia nhỏ nó thành nhiều phần.
Mạng thần kinh hợp pháp (CNN)
Mạng nơ-ron chuyển đổi cũng giống như mạng nơ-ron thông thường vì chúng cũng được tạo thành từ các nơ-ron có trọng số và độ lệch có thể học được. Các mạng nơ-ron thông thường bỏ qua cấu trúc của dữ liệu đầu vào và tất cả dữ liệu được chuyển đổi thành mảng 1-D trước khi đưa nó vào mạng. Quá trình này phù hợp với dữ liệu thông thường, tuy nhiên nếu dữ liệu có chứa hình ảnh, quá trình này có thể phức tạp.
CNN giải quyết vấn đề này một cách dễ dàng. Khi xử lý chúng phải tính đến cấu trúc 2D của hình ảnh, điều này cho phép chúng trích xuất các thuộc tính cụ thể của hình ảnh. Bằng cách này, mục tiêu chính của CNN là đi từ dữ liệu hình ảnh thô trong lớp đầu vào đến lớp chính xác trong lớp đầu ra. Sự khác biệt duy nhất giữa NN thông thường và CNN là ở cách xử lý dữ liệu đầu vào và kiểu lớp.
Tổng quan về kiến trúc của CNN
Về mặt kiến trúc, các mạng nơ-ron thông thường nhận đầu vào và biến đổi nó thông qua một loạt các lớp ẩn. Mỗi lớp được kết nối với lớp kia với sự trợ giúp của các nơ-ron. Nhược điểm chính của mạng nơ-ron thông thường là chúng không chia tỷ lệ tốt đến hình ảnh đầy đủ.
Kiến trúc của CNNs có các nơ-ron được sắp xếp theo 3 chiều gọi là chiều rộng, chiều cao và chiều sâu. Mỗi nơ-ron trong lớp hiện tại được kết nối với một bản vá nhỏ của đầu ra từ lớp trước. Nó tương tự như việc phủ một ? × ? lọc trên hình ảnh đầu vào. Nó sử dụng M bộ lọc để chắc chắn về việc nhận được tất cả các chi tiết. Này M bộ lọc là trình trích xuất tính năng trích xuất các tính năng như cạnh, góc, v.v.
Các lớp được sử dụng để tạo CNN
Các lớp sau được sử dụng để xây dựng CNN:
Lớp đầu vào – Nó lấy dữ liệu hình ảnh thô như nó vốn có.
Lớp chuyển đổi – Lớp này là khối xây dựng cốt lõi của CNNs thực hiện hầu hết các tính toán. Lớp này tính toán sự phức tạp giữa các tế bào thần kinh và các bản vá lỗi khác nhau trong đầu vào.
Lớp đơn vị tuyến tính đã chỉnh lưu – Nó áp dụng một chức năng kích hoạt cho đầu ra của lớp trước. Nó thêm tính phi tuyến tính vào mạng để nó có thể tổng quát hóa tốt cho bất kỳ loại chức năng nào.
Lớp gộp – Việc gộp chung giúp chúng tôi chỉ giữ lại những phần quan trọng khi chúng tôi phát triển trong mạng. Lớp gộp hoạt động độc lập trên mọi lát sâu của đầu vào và thay đổi kích thước của nó theo không gian. Nó sử dụng hàm MAX.
Lớp được kết nối đầy đủ / Lớp đầu ra – Lớp này tính toán điểm số đầu ra trong lớp cuối cùng. Kết quả đầu ra có kích thước ? × ? × ? trong đó L là các lớp tập dữ liệu huấn luyện số.
Cài đặt các gói Python hữu ích
Bạn có thể dùng Keras, là một API mạng thần kinh cấp cao, được viết bằng Python và có khả năng chạy trên TensorFlow, CNTK hoặc Theno. Nó tương thích với Python 2.7-3.6. Bạn có thể tìm hiểu thêm về nó từ https://keras.io/.
Sử dụng các lệnh sau để cài đặt keras:
pip install keras
Trên chung cư môi trường, bạn có thể sử dụng lệnh sau:
conda install –c conda-forge keras
Xây dựng bộ điều chỉnh tuyến tính bằng ANN
Trong phần này, bạn sẽ học cách xây dựng một bộ hồi quy tuyến tính bằng cách sử dụng mạng nơ-ron nhân tạo. Bạn có thể dùng KerasRegressor để đạt được điều này. Trong ví dụ này, chúng tôi đang sử dụng tập dữ liệu giá nhà ở Boston với số 13 cho các bất động sản ở Boston. Mã Python cho cùng một mã được hiển thị ở đây –
Nhập tất cả các gói được yêu cầu như được hiển thị –
import numpy import pandas from keras.models import Sequential from keras.layers import Dense from keras.wrappers.scikit_learn import KerasRegressor from sklearn.model_selection import cross_val_score from sklearn.model_selection import KFold
Bây giờ, tải tập dữ liệu của chúng tôi được lưu trong thư mục cục bộ.
dataframe = pandas.read_csv("/Usrrs/admin/data.csv", delim_whitespace = True, header = None) dataset = dataframe.values
Bây giờ, chia dữ liệu thành các biến đầu vào và đầu ra, tức là X và Y –
X = dataset[:,0:13] Y = dataset[:,13]
Vì chúng tôi sử dụng mạng nơ-ron cơ sở, hãy xác định mô hình –
def baseline_model():
Bây giờ, tạo mô hình như sau:
model_regressor = Sequential() model_regressor.add(Dense(13, input_dim = 13, kernel_initializer="normal", activation = 'relu')) model_regressor.add(Dense(1, kernel_initializer="normal"))
Tiếp theo, biên dịch mô hình –
model_regressor.compile(loss="mean_squared_error", optimizer="adam") return model_regressor
Bây giờ, hãy sửa hạt ngẫu nhiên để có khả năng tái tạo như sau:
seed = 7 numpy.random.seed(seed)
Đối tượng trình bao bọc Keras để sử dụng trong scikit-học như một công cụ ước lượng hồi quy được gọi là KerasRegressor. Trong phần này, chúng tôi sẽ đánh giá mô hình này với bộ dữ liệu chuẩn hóa.
estimator = KerasRegressor(build_fn = baseline_model, nb_epoch = 100, batch_size = 5, verbose = 0) kfold = KFold(n_splits = 10, random_state = seed) baseline_result = cross_val_score(estimator, X, Y, cv = kfold) print("Baseline: %.2f (%.2f) MSE" % (Baseline_result.mean(),Baseline_result.std()))
Đầu ra của đoạn mã được hiển thị ở trên sẽ là ước tính hiệu suất của mô hình đối với vấn đề đối với dữ liệu không nhìn thấy. Nó sẽ là sai số bình phương trung bình, bao gồm trung bình và độ lệch chuẩn trên tất cả 10 lần đánh giá xác nhận chéo.
Bộ phân loại hình ảnh: Ứng dụng của Học sâu
Mạng Nơ-ron Hợp pháp (CNN) giải quyết một vấn đề phân loại hình ảnh, đó là hình ảnh đầu vào thuộc về lớp nào. Bạn có thể sử dụng thư viện học sâu Keras. Lưu ý rằng chúng tôi đang sử dụng tập dữ liệu đào tạo và thử nghiệm hình ảnh của chó và mèo từ liên kết sau https://www.kaggle.com/c/dogs-vs-cats/data.
Nhập các thư viện và gói keras quan trọng như được hiển thị –
Gói sau được gọi là tuần tự sẽ khởi tạo mạng nơ-ron dưới dạng mạng tuần tự.
from keras.models import Sequential
Gói sau được gọi là Conv2D được sử dụng để thực hiện phép toán tích chập, bước đầu tiên của CNN.
from keras.layers import Conv2D
Gói sau được gọi là MaxPoling2D được sử dụng để thực hiện thao tác gộp, bước thứ hai của CNN.
from keras.layers import MaxPooling2D
Gói sau được gọi là Làm phẳng là quá trình chuyển đổi tất cả các mảng 2D kết quả thành một vectơ tuyến tính dài liên tục.
from keras.layers import Flatten
Gói sau được gọi là Ngu độn được sử dụng để thực hiện kết nối đầy đủ của mạng nơ-ron, bước thứ tư của CNN.
from keras.layers import Dense
Bây giờ, hãy tạo một đối tượng của lớp tuần tự.
S_classifier = Sequential()
Bây giờ, bước tiếp theo là mã hóa phần tích chập.
S_classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
Nơi đây relu là chức năng chỉnh lưu.
Bây giờ, bước tiếp theo của CNN là thao tác gộp trên các bản đồ đối tượng kết quả sau phần tích chập.
S-classifier.add(MaxPooling2D(pool_size = (2, 2)))
Bây giờ, hãy chuyển đổi tất cả các hình ảnh gộp thành một vector liên tục bằng cách sử dụng tính năng tâng bốc –
S_classifier.add(Flatten())
Tiếp theo, tạo một lớp được kết nối đầy đủ.
S_classifier.add(Dense(units = 128, activation = 'relu'))
Ở đây, 128 là số đơn vị ẩn. Một thực tế phổ biến là xác định số đơn vị ẩn là lũy thừa của 2.
Bây giờ, khởi tạo lớp đầu ra như sau:
S_classifier.add(Dense(units = 1, activation = 'sigmoid'))
Bây giờ, biên dịch CNN, chúng tôi đã xây dựng –
S_classifier.compile(optimizer="adam", loss="binary_crossentropy", metrics = ['accuracy'])
Ở đây tham số trình tối ưu hóa là chọn thuật toán giảm độ dốc ngẫu nhiên, tham số tổn thất là chọn hàm mất mát và tham số metrics là chọn số liệu hiệu suất.
Bây giờ, thực hiện tăng cường hình ảnh và sau đó điều chỉnh hình ảnh với mạng nơ-ron –
train_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.2, zoom_range = 0.2, horizontal_flip = True) test_datagen = ImageDataGenerator(rescale = 1./255) training_set = train_datagen.flow_from_directory(”/Users/admin/training_set”,target_size = (64, 64),batch_size = 32,class_mode="binary") test_set = test_datagen.flow_from_directory('test_set',target_size = (64, 64),batch_size = 32,class_mode="binary")
Bây giờ, điều chỉnh dữ liệu với mô hình chúng tôi đã tạo –
classifier.fit_generator(training_set,steps_per_epoch = 8000,epochs = 25,validation_data = test_set,validation_steps = 2000)
Ở đây step_per_epoch có số lượng hình ảnh đào tạo.
Bây giờ khi mô hình đã được đào tạo, chúng ta có thể sử dụng nó để dự đoán như sau:
from keras.preprocessing import image test_image = image.load_img('dataset/single_prediction/cat_or_dog_1.jpg', target_size = (64, 64)) test_image = image.img_to_array(test_image) test_image = np.expand_dims(test_image, axis = 0) result = classifier.predict(test_image) training_set.class_indices if result[0][0] == 1: prediction = 'dog' else: prediction = 'cat'