AI với Python – Học sâu

Mạng thần kinh nhân tạo (ANN) nó là một hệ thống máy tính 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 lưới thần kinh là một loại mô hình cho máy học. Vào giữa những năm 1980 và đầu những năm 1990, nhiều tiến bộ kiến ​​trúc quan trọng đã được thực hiện trong các mạng thần kinh. Trong chương này, bạn sẽ tìm hiểu thêm về Deep Learning, một cách tiếp cận của AI.

Học sâu nổi lên từ sự phát triển bùng nổ của điện toán trong 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 biệt có thuật toán được lấy cảm hứng từ cấu trúc và chức năng của bộ não con người.

Hc máy v/s Hc sâu

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ách tốt nhất để trình bày vấn đề trong khi học cách giải quyết vấn đề. So sánh giữa Học sâu và Học máy được đưa ra dưới đây

Ph thuc d liu

Điểm khác biệt đầu tiên 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.

Máy ph thuc

Các thuật toán học sâu cần 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 máy học trích xuất.

Thi gian thc hin

Thời gian thực hiện phụ thuộc vào nhiều tham số được sử dụng trong thuật toán. Học sâu có nhiều tham số hơn thuật toán học máy. Do đó, thời gian thực hiện của các thuật toán DL, đặc biệt là thời gian đào tạo, nhiều hơn nhiều so với các thuật toán ML. Nhưng thời gian thử nghiệm của các thuật toán DL ít hơn các thuật toán ML.

Phương pháp gii quyết vn đề

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à chia nhỏ vấn đề thành nhiều phần.

Mng thn kinh tích chp (CNN)

Mạng nơ-ron tích chập 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 thần kinh 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 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. Nó tính đến cấu trúc 2D của hình ảnh khi chúng xử lý chúng, điều này cho phép chúng trích xuất các thuộc tính dành riêng cho hình ảnh. Theo cách này, mục tiêu chính của CNN là chuyển từ dữ liệu hình ảnh thô trong lớp đầu vào sang đúng lớp 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à loại lớp.

Tng quan v kiến ​​trúc ca CNN

Về mặt kiến ​​trúc, các mạng thần kinh 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 khác với sự trợ giúp của các nơ-ron. Nhược điểm chính của các mạng thần kinh thông thường là chúng không thể mở rộng tốt đến hình ảnh đầy đủ.

Kiến trúc của CNN có các nơ-ron được sắp xếp theo 3 chiều được 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ư phủ một bộ lọc 𝑵×𝑵 lên ảnh đầu vào. Nó sử dụng các bộ lọc M để đảm bảo nhận được tất cả các chi tiết. Các bộ lọc M này là các bộ 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 lp được s dng để xây dng 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ư hiện tại.
  • Lớp kết hợp − Lớp này là khối xây dựng cốt lõi của CNN thực hiện hầu hết các tính toán. Lớp này tính toán các kết cấu giữa các nơ-ron và các bản vá khác nhau trong đầu vào.
  • Lớp đơn vị tuyến tính đã chỉnh lưu − Nó áp dụng 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ể khái quát hóa tốt cho bất kỳ loại chức năng nào.
  • Lớp tổng hợp – Tổng hợp giúp chúng tôi chỉ giữ lại những phần quan trọng khi chúng tôi tiến hành trong mạng. Lớp tổng hợp hoạt động độc lập trên mọi lát cắ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 chức năng MAX.
  • Lớp được kết nối đầy đủ/Lớp đầu ra − Lớp này tính điểm đầu ra ở 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 hu ích

Bạn có thể sử dụng Keras , 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 máy ảnh – pip install keras

Trên môi trường conda , bạn có thể sử dụng lệnh sau –

conda install –c conda-forge keras

Xây dng hi quy tuyến tính bng ANN

Trong phần này, bạn sẽ tìm hiểu cách xây dựng một biến hồi quy tuyến tính bằng cách sử dụng mạng thần kinh nhân tạo. Bạn có thể sử dụng KerasRegressor để đạt được điều này. Trong ví dụ này, chúng tôi đang sử dụng bộ dữ liệu giá nhà ở Boston với 13 số cho các tài sản ở Boston. Mã Python cho cùng được hiển thị ở đây – Nhập tất cả các gói cần thiết 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ờ, hãy 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 các mạng thần kinh cơ bản, 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 giống ngẫu nhiên để có khả năng tái tạo như sau
seed = 7
numpy.random.seed(seed)

Đối tượng bao bọc Keras để sử dụng trong scikit-learning làm công cụ ước tính hồi quy được gọi là KerasRegressor . Trong phần này, chúng ta 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 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. Đó sẽ là lỗi bình phương trung bình, bao gồm độ lệch trung bình và độ lệch chuẩn trên tất cả 10 lần đánh giá xác thực chéo.

Image Classifier: Mt ng dng ca Deep Learning

Mạng thần kinh chuyển đổi (CNN) giải quyết vấn đề phân loại hình ảnh, tức 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 bộ dữ liệu đào tạo và kiểm tra 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 gói và thư viện máy ảnh quan trọng như được hiển thị –

Gói sau có tên là tuần tự sẽ khởi tạo các mạng thần kinh dưới dạng mạng tuần tự.

from keras.models import Sequential

Gói sau có tên Conv2D được sử dụng để thực hiện thao tác tích chập, bước đầu tiên của CNN.

from keras.layers import Conv2D

Gói sau có tên MaxPoling2D được sử dụng để thực hiện thao tác tổng hợp, bước thứ hai của CNN.

from keras.layers import MaxPooling2D

Gói sau có tên Flatten 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 duy nhất.

from keras.layers import Flatten

Gói dưới đây có tên là Dense được sử dụng để thực hiện kết nối đầy đủ mạng thần kinh, 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'))

Ở đâ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 tổng hợp trên các bản đồ đặc trưng kết quả sau phần tích chập.

S-classifier.add(MaxPooling2D(pool_size = (2, 2)))

Bây giờ, chuyển đổi tất cả các hình ảnh gộp thành một vectơ liên tục bằng cách sử dụng kỹ thuật 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. Thông thường người ta định nghĩa số đơn vị ẩn là lũy thừa của 2.

Bây giờ, hãy 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ố loss là để chọn hàm mất mát và tham số metric là chọn chỉ số hiệu suất. Bây giờ, thực hiện tăng cường hình ảnh và sau đó khớp hình ảnh với mạng thần kinh

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ờ, khớp dữ liệu với mô hình mà chúng ta đã tạo

classifier.fit_generator(training_set,steps_per_epoch = 8000,epochs = 
25,validation_data = test_set,validation_steps = 2000)

Ở đây, các bước_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

Ở đây, các bước_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'

Trả lời