Phần 20: Neural Networks – Lập trình AI bằng Python

Mạng nơ-ron là những thiết bị tính toán tune tune nhằm tạo nên 1 mô hình máy tính của bộ não. Mục tiêu chính đằng sau là phát triển 1 hệ thống để thực hiện những tác vụ tính toán khác nhau nhanh hơn các hệ thống truyền thống. Những nhiệm vụ này gồm Nhận dạng và Phân loại Mẫu, Ước lượng, Tối ưu và Phân cụm Dữ liệu.
Table of Contents
1. Artificial Neural Networks (ANN) là gì ?
Mạng nơron nhân tạo (ANN) là 1 hệ thống tính toán hiệu quả có chủ đề trung tâm được mượn từ sự giống nhau của mạng nơron sinh học. ANN cũng đã được đặt tên là Hệ thống thần kinh nhân tạo, Hệ thống xử lý phân tán tune tune và Hệ thống kết nối. ANN có 1 bộ sưu tập lớn các đơn vị được kết nối với nhau theo những kiểu để cho phép liên lạc giữa chúng. Những đơn vị này, còn được gọi là nút hay nơ-ron, là các bộ xử lý đơn giản hoạt động tune tune.
Mọi nơron đều kết nối với nơron khác qua 1 liên kết kết nối. Mỗi liên kết kết nối được liên kết với 1 trọng số có thông tin về tín hiệu đầu vào. Đây chính là thông tin có ích nhất cho các tế bào thần kinh để giải quyết 1 vấn đề chi tiết vì trọng lượng thường kích thích hay ức chế tín hiệu truyền đạt. Mỗi nơ-ron đang có trạng thái bên trong được gọi là tín hiệu kích hoạt. Tín hiệu đầu ra, được tạo nên sau khi kết hợp tín hiệu đầu vào và quy tắc kích hoạt, có thể được gởi tới các đơn vị khác.
2. Cài đặt package deal:
Để tạo mạng thần kinh bằng Python, chúng ta sẽ có thể sử dụng 1 gói mạnh mẽ cho mạng thần kinh có tên là NeuroLab. Nó là 1 thư viện các thuật toán mạng nơ-ron căn bản với những cấu hình mạng cơ động và các thuật toán học cho Python.
pip set up NeuroLab
Nếu như bạn đang dùng môi trường Anaconda
conda set up -c labfabulous neurolab
3. Xây dựng Neural Networks
Trong phần này, ta sẽ xây dựng những mạng thần kinh trong Python bằng cách sử dụng gói NeuroLab.
4. Bộ phân loại dựa vào Perceptron
Perceptron là những khối xây dựng của ANN
import matplotlib.pyplot as plt
import neurolab as nl
Nhập những giá trị đầu vào. Chú ý rằng đó là 1 ví dụ về học có theo dõi, do vậy bạn cũng phải cung cấp những giá trị mục tiêu.
enter = [[0, 0], [0, 1], [1, 0], [1, 1]]
goal = [[0], [0], [0], [1]]
Khởi tạo 2 enter và 1 neuron
internet = nl.internet.newp([[0, 1],[0, 1]], 1)
Hiện tại, coaching mannequin. Tại đây, mình đang dùng quy tắc Delta để đào tạo.
error_progress = internet.practice(enter, goal, epochs=100, present=10, lr=0.1)
visualize kết quả đầu ra và vẽ biểu đồ :
plt.determine()
plt.plot(error_progress)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.grid()
plt.present()
Bạn có thể nhận thấy biểu đồ sau cho ta thấy tiến trình đào tạo bằng cách sử dụng error metric:
5. Mạng nơ ron 1 lớp
Trong ví dụ này, ta đang tạo 1 mạng nơ-ron 1 lớp gồm các nơ-ron độc lập hoạt động ở trên dữ liệu đầu vào để tạo nên đầu ra. Chú ý rằng chúng tôi đang dùng file văn bản có tên neural_simple.txt làm đầu vào.
import numpy as np
import matplotlib.pyplot as plt
import neurolab as nl
Load dữ liệu như dưới đây :
input_data = np.loadtxt(“/Users/admin/neural_simple.txt')
Sau đây chính là dữ liệu mà mình sẽ sử dụng. Chú ý rằng trong dữ liệu này, 2 cột đầu tiên là các tính năng và 2 cột cuối cùng là nhãn.
array([[2. , 4. , 0. , 0. ],
[1.5, 3.9, 0. , 0. ],
[2.2, 4.1, 0. , 0. ],
[1.9, 4.7, 0. , 0. ],
[5.4, 2.2, 0. , 1. ],
[4.3, 7.1, 0. , 1. ],
[5.8, 4.9, 0. , 1. ],
[6.5, 3.2, 0. , 1. ],
[3. , 2. , 1. , 0. ],
[2.5, 0.5, 1. , 0. ],
[3.5, 2.1, 1. , 0. ],
[2.9, 0.3, 1. , 0. ],
[6.5, 8.3, 1. , 1. ],
[3.2, 6.2, 1. , 1. ],
[4.9, 7.8, 1. , 1. ],
[2.1, 4.8, 1. , 1. ]])
Hiện tại, hãy tách 4 cột này thành 2 cột dữ liệu và 2 nhãn –
knowledge = input_data[:, 0:2]
labels = input_data[:, 2:]
Vẽ đồ thị dữ liệu đầu vào bằng những lệnh sau:
plt.determine()
plt.scatter(knowledge[:,0], knowledge[:,1])
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Input knowledge')
Hiện tại, xác định những giá trị tối thiểu và tối đa cho mỗi thứ nguyên như được hiển thị tại đây –
dim1_min, dim1_max = knowledge[:,0].min(), knowledge[:,0].max()
dim2_min, dim2_max = knowledge[:,1].min(), knowledge[:,1].max()
Tiếp theo, xác định số lượng tế bào thần kinh trong lớp đầu ra :
nn_output_layer = labels.form[1]
xác định mạng nơ-ron 1 lớp :
dim1 = [dim1_min, dim1_max]
dim2 = [dim2_min, dim2_max]
neural_net = nl.internet.newp([dim1, dim2], nn_output_layer)
Huấn luyện mạng nơron với số epochs và studying price như dưới đây:
error = neural_net.practice(knowledge, labels, epochs = 200, present = 20, lr = 0.01)
Tiếp tục visualize và vẽ quá trình huấn luyện :
plt.determine()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.title('Training error progress')
plt.grid()
plt.present()
Sử dụng các điểm dữ liệu thử nghiệm trong bộ phân loại trên
print('nTest Results:')
data_test = [[1.5, 3.2], [3.6, 1.7], [3.6, 5.7],[1.6, 3.9]] for merchandise in data_test:
print(merchandise, '-->', neural_net.sim([item])[0])
Bạn sẽ có thể tìm thấy kết quả như dưới đây :
[1.5, 3.2] --> [1. 0.]
[3.6, 1.7] --> [1. 0.]
[3.6, 5.7] --> [1. 1.]
[1.6, 3.9] --> [1. 0.]
Các biểu đồ sau là đầu ra
6. Mạng nơ ron nhiều lớp
Trong ví dụ này, mình đang tạo 1 mạng nơ-ron nhiều lớp gồm nhiều hơn 1 lớp để trích xuất các mẫu căn bản trong dữ liệu huấn luyện. Mạng nơ-ron nhiều lớp này sẽ hoạt động giống 1 bộ hồi quy. Chúng tôi sẽ tạo 1 điểm dữ liệu dựa vào phương trình: y = 2x^2+8.
import numpy as np
import matplotlib.pyplot as plt
import neurolab as nl
Tạo 1 điểm dữ liệu dựa vào phương trình đã nhắc đến bên trên
min_val = -30
max_val = 30
num_points = 160
x = np.linspace(min_val, max_val, num_points)
y = 2 * np.sq.(x) + 8
y /= np.linalg.norm(y)
Hiện tại, hãy reshape lại tập dữ liệu này như dưới đây:
knowledge = x.reshape(num_points, 1)
labels = y.reshape(num_points, 1)
Visualize và vẽ tập dữ liệu đầu vào như dưới đây :
plt.determine()
plt.scatter(knowledge, labels)
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Data-points')
Hiện tại, hãy xây dựng mạng nơ-ron có 2 lớp ẩn với neurolab với mười nơ-ron ở lớp ẩn đầu tiên, 6 ở lớp ẩn thứ 2 và 1 ở lớp đầu ra.
neural_net = nl.internet.newff([[min_val, max_val]], [10, 6, 1])
Sau đó ta sẽ sử dụng thuật toán gradient coaching
neural_net.trainf = nl.practice.train_gd
Huấn luyện mạng với mục tiêu học tập dữ liệu được tạo như dưới đây :
error = neural_net.practice(knowledge, labels, epochs = 1000, present = 100, purpose = 0.01)
Khởi chạy mạng neural practice tập dữ liệu coaching :
output = neural_net.sim(knowledge)
y_pred = output.reshape(num_points)
plt.determine()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Error')
plt.title('Training error progress')
Mình sẽ vẽ biểu đồ đầu ra thực tế so với dự đoán
x_dense = np.linspace(min_val, max_val, num_points * 2)
y_dense_pred = neural_net.sim(x_dense.reshape(x_dense.measurement,1)).reshape(x_dense.measurement)
plt.determine()
plt.plot(x_dense, y_dense_pred, '-', x, y, '.', x, y_pred, 'p')
plt.title('Actual vs predicted')
plt.present()
Kết quả :