Mạng lưới thần kinh là các thiết bị tính toán song song, là một nỗ lực để tạo ra một 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 một hệ thống để thực hiện các tác vụ tính toán khác nhau nhanh hơn các hệ thống truyền thống. Các tác vụ này bao gồm Nhận dạng và Phân loại Mẫu, Xấp xỉ, Tối ưu hóa và Phân cụm Dữ liệu.
Mạng thần kinh nhân tạo (ANN) là gì
Mạng thần kinh nhân tạo (ANN) là một hệ thống điện 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. ANN còn được đặt tên là Hệ thống thần kinh nhân tạo, Hệ thống xử lý phân tán song song và Hệ thống kết nối. ANN có được bộ sưu tập lớn các đơn vị được kết nối với nhau theo một số mẫu để cho phép liên lạc giữa chúng. Các đơn vị này, còn được gọi là các nút hoặc nơ-ron , là các bộ xử lý đơn giản hoạt động song song.
Mỗi nơ-ron được kết nối với nơ-ron khác thông qua một 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 một trọng số có thông tin về tín hiệu đầu vào. Đây là thông tin hữu ích nhất cho các tế bào thần kinh để giải quyết một vấn đề cụ thể vì trọng lượng thường kích thích hoặc ức chế tín hiệu đang được truyền đi. Mỗi tế bào thần kinh có trạng thái bên trong được gọi là tín hiệu kích hoạt . Các tín hiệu đầu ra, được tạo ra sau khi kết hợp các tín hiệu đầu vào và quy tắc kích hoạt, có thể được gửi đến các thiết bị khác.
Nếu bạn muốn nghiên cứu chi tiết về mạng nơ-ron thì bạn có thể theo liên kết – Mạng nơ-ron nhân tạo .
Cài đặt các gói hữu ích
Để tạo mạng nơ-ron trong Python, chúng ta có thể sử dụng gói mạnh mẽ dành cho mạng nơ-ron có tên là NeuroLab . Nó là một thư viện gồm các thuật toán mạng thần kinh cơ bản với cấu hình mạng linh hoạt và các thuật toán học tập cho Python. Bạn có thể cài đặt gói này với sự trợ giúp của lệnh sau trên dấu nhắc lệnh –
pip install NeuroLab
Nếu bạn đang sử dụng môi trường Anaconda, hãy sử dụng lệnh sau để cài đặt NeuroLab –
conda install -c labfabulous neurolab
Xây dựng mạng lưới thần kinh
Trong phần này, chúng ta hãy xây dựng một số mạng thần kinh trong Python bằng cách sử dụng gói NeuroLab.
Phân loại dựa trên Perceptron
Perceptron là các khối xây dựng của ANN. Nếu bạn muốn biết thêm về Perceptron, bạn có thể truy cập vào liên kết − artificial_neural_network
Sau đây là thực thi từng bước mã Python để xây dựng bộ phân loại dựa trên perceptron mạng thần kinh đơn giản – Nhập các gói cần thiết như được hiển thị
import matplotlib.pyplot as plt
import neurolab as nl
Nhập các giá trị đầu vào. Lưu ý rằng đây là một ví dụ về học có giám sát, do đó bạn cũng sẽ phải cung cấp các giá trị mục tiêu.
input = [[0, 0], [0, 1], [1, 0], [1, 1]]
target = [[0], [0], [0], [1]]
Tạo mạng với 2 đầu vào và 1 nơ-ron
net = nl.net.newp([[0, 1],[0, 1]], 1)
Bây giờ, đào tạo mạng. Ở đây, chúng tôi đang sử dụng quy tắc Delta để đào tạo.
error_progress = net.train(input, target, epochs=100, show=10, lr=0.1)
Bây giờ, trực quan hóa đầu ra và vẽ biểu đồ
plt.figure()
plt.plot(error_progress)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.grid()
plt.show()
Bạn có thể xem biểu đồ sau hiển thị tiến trình đào tạo bằng cách sử dụng số liệu lỗi
Mạng nơ-ron một lớp
Trong ví dụ này, chúng tôi đang tạo một mạng nơ-ron một lớp bao gồm các nơ-ron độc lập hoạt động trên dữ liệu đầu vào để tạo ra đầu ra. Lưu ý rằng chúng tôi đang sử dụng tệp văn bản có tên neural_simple.txt làm đầu vào. Nhập các gói hữu ích như được hiển thị
import numpy as np
import matplotlib.pyplot as plt
import neurolab as nl
Tải tập dữ liệu như sau –
input_data = np.loadtxt(“/Users/admin/neural_simple.txt')
Sau đây là dữ liệu chúng tôi sẽ sử dụng. Lưu ý rằng trong dữ liệu này, hai cột đầu tiên là các tính năng và hai cột cuối cùng là các 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. ]])
Bây giờ, tách 4 cột này thành 2 cột dữ liệu và 2 nhãn
data = input_data[:, 0:2]
labels = input_data[:, 2:]
Vẽ dữ liệu đầu vào bằng các lệnh sau –
plt.figure()
plt.scatter(data[:,0], data[:,1])
plt.xlabel('Dimension 1')
plt.ylabel('Dimension 2')
plt.title('Input data')
Bây giờ, hãy xác định các giá trị tối thiểu và tối đa cho từng thứ nguyên như được hiển thị ở đây
dim1_min, dim1_max = data[:,0].min(), data[:,0].max()
dim2_min, dim2_max = data[:,1].min(), data[:,1].max()
Tiếp theo, xác định số lượng nơ ron trong lớp đầu ra như sau –
nn_output_layer = labels.shape[1]
Bây giờ, hãy xác định mạng nơ-ron một lớp
dim1 = [dim1_min, dim1_max]
dim2 = [dim2_min, dim2_max]
neural_net = nl.net.newp([dim1, dim2], nn_output_layer)
Huấn luyện mạng lưới thần kinh với số lượng kỷ nguyên và tốc độ học tập như được hiển thị
error = neural_net.train(data, labels, epochs = 200, show = 20, lr = 0.01)
Bây giờ, trực quan hóa và vẽ sơ đồ tiến trình đào tạo bằng các lệnh sau
plt.figure()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Training error')
plt.title('Training error progress')
plt.grid()
plt.show()
Bây giờ, hãy sử dụng các điểm dữ liệu thử nghiệm trong trình 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 item in data_test:
print(item, '-->', neural_net.sim([item])[0])
Bạn có thể tìm thấy kết quả kiểm tra như được hiển thị ở đâ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.]
Bạn có thể thấy các biểu đồ sau đây là đầu ra của mã được thảo luận cho đến bây giờ
Mạng nơ-ron nhiều lớp
Trong ví dụ này, chúng tôi đang tạo một mạng thần kinh nhiều lớp bao gồm nhiều hơn một lớp để trích xuất các mẫu cơ bản trong dữ liệu đào tạo. Mạng thần kinh nhiều lớp này sẽ hoạt động giống như một bộ hồi quy. Chúng tôi sẽ tạo ra một số điểm dữ liệu dựa trên phương trình: y = 2x 2 +8. Nhập các gói cần thiết như được hiển thị
import numpy as np
import matplotlib.pyplot as plt
import neurolab as nl
Tạo một số điểm dữ liệu dựa trên phương trình đã đề cập ở trên
min_val = -30
max_val = 30
num_points = 160
x = np.linspace(min_val, max_val, num_points)
y = 2 * np.square(x) + 8
y /= np.linalg.norm(y)
Bây giờ, định hình lại tập dữ liệu này như sau
data = x.reshape(num_points, 1)
labels = y.reshape(num_points, 1)
Trực quan hóa và vẽ biểu đồ tập dữ liệu đầu vào bằng các lệnh sau –
plt.figure() plt.scatter(data, labels) plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.title('Data-points')
Bây giờ, hãy xây dựng mạng nơ-ron có hai lớp ẩn với phòng thí nghiệm nơ-ron với mười nơ-ron ở lớp ẩn đầu tiên, sáu nơ-ron ở lớp ẩn thứ hai và một nơ -ron ở lớp đầu ra.
neural_net = nl.net.newff([[min_val, max_val]], [10, 6, 1])
Bây giờ hãy sử dụng thuật toán đào tạo gradient –
neural_net.trainf = nl.train.train_gd
Bây giờ đào tạo mạng với mục tiêu học dữ liệu được tạo ở trên –
error = neural_net.train(data, labels, epochs = 1000, show = 100, goal = 0.01)
Bây giờ, hãy chạy các mạng thần kinh trên các điểm dữ liệu đào tạo
output = neural_net.sim(data)
y_pred = output.reshape(num_points)
Bây giờ vẽ đồ thị và nhiệm vụ trực quan hóa –
plt.figure()
plt.plot(error)
plt.xlabel('Number of epochs')
plt.ylabel('Error')
plt.title('Training error progress')
Bây giờ chúng ta sẽ vẽ sơ đồ đầ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.size,1)).reshape(x_dense.size)
plt.figure()
plt.plot(x_dense, y_dense_pred, '-', x, y, '.', x, y_pred, 'p')
plt.title('Actual vs predicted')
plt.show()
Kết quả của các lệnh trên, bạn có thể quan sát các biểu đồ như hình bên dướ
Xem thêm : AI với Python – Học tăng cường