/ / Xây dựng mạng lưới thần kinh để tìm hiểu về AI

Xây dựng mạng lưới thần kinh để tìm hiểu về AI

Mạng lưới thần kinh là một khái niệm quan trọng trong lĩnh vực trí tuệ nhân tạo và học máy. Chúng bao gồm các nút được kết nối với nhau, được tổ chức theo lớp và bắt chước cách thức hoạt động của bộ não con người. Các nút đại diện cho tế bào thần kinh của bộ não con người.


Bạn có thể tạo mạng thần kinh phân loại đa lớp, chuyển tiếp đơn giản của riêng mình. Huấn luyện nó để phân loại các chữ số viết tay bằng bộ dữ liệu MNIST. Sau đó, bạn có thể sử dụng thị giác máy tính để phân loại các chữ số viết tay của chính mình.


Phân loại nhiều lớp là gì?

Phân loại nhiều lớp là một loại máy học có thể phân loại dữ liệu thành nhiều hơn hai loại. Mạng nơ-ron sử dụng bộ phân loại softmax để phân phối xác suất trên các lớp có thể.

Bạn có thể sử dụng phân loại nhiều lớp để phân loại hình ảnh viết tay từ bộ dữ liệu MNIST thành 10 danh mục. Các danh mục này sẽ tương ứng với các chữ số từ 0 đến 9.

Tìm hiểu Bộ dữ liệu MNIST

Bộ dữ liệu MNIST là bộ dữ liệu điểm chuẩn phổ biến cho các thuật toán thị giác máy tính và máy học. Nó chứa 70.000 hình ảnh viết tay thang độ xám có kích thước 28 x 28 pixel. Các chữ số viết tay nằm trong khoảng từ 0 đến 9.

Trước khi xây dựng bất kỳ mô hình máy học nào, điều quan trọng là phải hiểu tập dữ liệu của bạn chứa gì. Hiểu tập dữ liệu sẽ cho phép bạn thực hiện tiền xử lý dữ liệu tốt hơn.

Chuẩn bị môi trường của bạn

Để làm theo hướng dẫn này, bạn nên làm quen với những kiến ​​thức cơ bản về Python. Bạn cũng nên có kiến ​​thức cơ bản về học máy. Cuối cùng, bạn sẽ cảm thấy thoải mái khi sử dụng Jupyter Notebook hoặc Google Colab.

Tạo Sổ ghi chép Jupyter mới hoặc đăng nhập vào Google Colab. Chạy lệnh này để cài đặt các gói cần thiết:

 !pip install numpy matplotlib tensorflow opencv-python

Bạn sẽ sử dụng:

  • Matplotlib để trực quan hóa dữ liệu.
  • NumPy để thao tác với mảng.
  • TensorFlow để tạo và đào tạo mô hình của bạn.
  • OpenCV để cung cấp cho mô hình các chữ số viết tay của riêng bạn.

Nhập các mô-đun cần thiết

Nhập các gói bạn đã cài đặt trong môi trường của mình. Điều này sẽ cho phép bạn sau này gọi và sử dụng các chức năng và mô-đun của chúng trong mã của bạn.

 import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import cv2

Dòng mã thứ hai nhập mô-đun Keras từ thư viện Google TensorFlow. Bạn sẽ sử dụng Keras để đào tạo mạng lưới thần kinh sâu của mình với TensorFlow làm phần phụ trợ.

Đang tải và xem tập dữ liệu

Bộ dữ liệu MNIST được tích hợp vào Keras. Tải tập dữ liệu MNIST và chia nó thành các tập huấn luyện và kiểm tra. Bạn sẽ sử dụng tập huấn luyện để huấn luyện mô hình của mình và tập kiểm tra để đánh giá độ chính xác của mô hình trong việc phân loại các hình ảnh mới chưa nhìn thấy.

 (X_train, y_train) , (X_test, y_test) = keras.datasets.mnist.load_data()

Kiểm tra độ dài của tập huấn luyện và tập kiểm tra. Bộ dữ liệu MNIST có 60.000 hình ảnh để đào tạo và 10.000 hình ảnh để thử nghiệm.

 len(X_train)
len(X_test)

Kiểm tra hình dạng của hình ảnh đầu tiên trong bộ dữ liệu MNIST, hình ảnh này phải có kích thước 28 x 28 pixel. Sau đó in các giá trị pixel của nó và trực quan hóa nó bằng Matplotlib.

 X_train[0].shape
X_train[0]
plt.matshow(X_train[0])
y_train[0]

Đầu ra trực quan hóa như sau:

số năm được hiển thị trong Matplotlib

Hình ảnh trực quan hóa cho thấy hình ảnh đầu tiên trong tập dữ liệu chứa số năm.

Tiền xử lý dữ liệu

Trước khi sử dụng dữ liệu trong tập dữ liệu để đào tạo và kiểm tra mô hình của bạn, bạn cần xử lý trước mô hình đó. Tiền xử lý nâng cao độ chính xác của mô hình bằng cách chuẩn hóa dữ liệu.

Bình thường hóa các giá trị Pixel

Chuẩn hóa giá trị pixel của hình ảnh trong tập dữ liệu bằng cách chia từng giá trị cho 255. Giá trị pixel của tập dữ liệu chưa chuẩn hóa nằm trong khoảng từ 0 đến 255 với 0 là màu đen và 255 là màu trắng. Chia mỗi giá trị pixel cho 255 đảm bảo mỗi pixel nằm trong phạm vi từ 0 đến 1. Điều này giúp mô hình dễ dàng tìm hiểu các tính năng và mẫu có liên quan trong dữ liệu.

 X_train = X_train / 255
X_test = X_test / 255

Sau đó in các giá trị pixel của hình ảnh đầu tiên.

 X_train[0] 

Lưu ý rằng chúng hiện nằm trong khoảng từ 0 đến 1.

Chuyển đổi ma trận ảnh thành mảng 1D

Lớp đầu vào của mạng thần kinh thường yêu cầu đầu vào 1D, vì vậy hãy tạo một mảng 1D gồm các giá trị pixel của hình ảnh. Để làm như vậy, hãy sử dụng hàm reshape() với số lượng ảnh thô được đặt thành số lượng hình ảnh trong bộ dữ liệu.

 X_train_flattened = X_train.reshape(len(X_train), 28 * 28)
X_test_flattened = X_test.reshape(len(X_test), 28 * 28)
X_train_flattened.shape
X_train_flattened[0]

Hình ảnh của bạn hiện đã sẵn sàng để đào tạo và thử nghiệm mô hình.

Tạo mô hình mạng lưới thần kinh sâu

Tạo mô hình tuần tự với mô-đun Keras của Tensorflow bằng lớp đầu vào, hai lớp ẩn và lớp đầu ra. Đặt hình dạng đầu vào thành 28 x 28 vì đây là hình dạng của hình ảnh gốc trong tập dữ liệu. Sử dụng 128 nút cho các lớp ẩn. Lớp đầu ra chỉ nên có 10 nơ-ron vì bạn chỉ phân loại các chữ số từ 0 đến 9.

 model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),

    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(128, activation='relu'),

    keras.layers.Dense(10, activation='softmax')
])

Biên dịch mô hình bằng cách sử dụng adam trình tối ưu hóa, thưa thớt_categorical_crossentropy dưới dạng hàm mất mát và số liệu để đánh giá hiệu suất của mô hình là sự chính xác. Sau đó, điều chỉnh dữ liệu đào tạo vào mô hình và đặt số lượng kỷ nguyên thành năm.

 model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(X_train, y_train, epochs=5)

Mô hình sẽ mất vài phút để huấn luyện. Sau khi quá trình đào tạo mô hình kết thúc, hãy đánh giá hiệu suất của nó trên tập kiểm tra.

 model.evaluate(X_test, y_test)

Hàm đánh giá sẽ trả về sự mất mát và độ chính xác của mô hình. Mô hình tạo ra độ chính xác 98%.

Sử dụng mô hình để phân loại chữ số viết tay của riêng bạn

Để phân loại các chữ số viết tay của riêng bạn, bạn cần chuẩn bị hình ảnh của mình để khớp với hình ảnh của bộ dữ liệu MNIST. Không làm như vậy sẽ dẫn đến mô hình của bạn hoạt động kém.

Để tiền xử lý hình ảnh:

  1. Tải hình ảnh chứa chữ số bằng OpenCV.
  2. Chuyển đổi nó thành thang độ xám và thay đổi kích thước thành 28 x 28 pixel.
  3. Lật và chuẩn hóa các giá trị pixel.
  4. Cuối cùng, làm phẳng hình ảnh thành một mảng 1D.

Chuyển hình ảnh đã được xử lý trước vào mô hình để dự đoán và in giá trị dự đoán trên màn hình.

 img = cv2.imread('digits/digit1.png', cv2.IMREAD_GRAYSCALE)
img_resize = cv2.resize(img, (28, 28))
img_flip = cv2.bitwise_not(img_resize)
img_normalized = img_flip.astype('float32') / 255.0


input_data = img_normalized.flatten().reshape( 1,28,28)


prediction = model.predict(input_data)
print (f'Prediction: {np.argmax(prediction)}')

Truyền một hình ảnh đã xử lý trước có chứa một số cho mô hình.

một hình ảnh được xử lý trước có chứa chữ số 7

Đầu ra của mô hình như sau:

Giá trị được dự đoán là đầu ra của chương trình trong Jupyter Notebook

Mô hình đã có thể phân loại chữ số bảy một cách chính xác.

Mạng thần kinh trong Chatbots

Việc sử dụng mạng Neural đã bùng nổ trong vài năm qua. Chúng chủ yếu được sử dụng trong xử lý ngôn ngữ tự nhiên để dịch ngôn ngữ và AI tổng quát.

Gần đây, đã có sự gia tăng số lượng chatbot có thể giao tiếp theo cách giống như con người. Họ sử dụng một loại mạng thần kinh được gọi là mạng thần kinh biến áp. Tương tác với một số người trong số họ và trải nghiệm sức mạnh của mạng lưới thần kinh.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *