Python cho AI và ML

Nếu bạn mới bắt đầu làm quen với thế giới trí tuệ nhân tạo (AI), thì Python là một ngôn ngữ tuyệt vời để học vì hầu hết các công cụ đều được xây dựng bằng ngôn ngữ này. Học sâu là một kỹ thuật được sử dụng để đưa ra dự đoán bằng cách sử dụng dữ liệu và nó phụ thuộc rất nhiều vào mạng lưới thần kinh. Hôm nay, bạn sẽ học cách xây dựng mạng lưới thần kinh từ đầu

Trong cài đặt sản xuất, bạn sẽ sử dụng khung học sâu như TensorFlow hoặc PyTorch thay vì xây dựng mạng thần kinh của riêng mình. Điều đó nói rằng, có một số kiến ​​thức về cách thức hoạt động của mạng thần kinh là hữu ích vì bạn có thể sử dụng nó để kiến ​​trúc tốt hơn các mô hình học sâu của mình

Trong hướng dẫn này, bạn sẽ học

  • trí tuệ nhân tạo là gì
  • Học máy và học sâu đóng vai trò như thế nào trong AI
  • Làm thế nào một mạng lưới thần kinh hoạt động nội bộ
  • Cách xây dựng mạng thần kinh từ đầu bằng Python

Bắt đầu nào

Tiền thưởng miễn phí. hướng dẫn bạn các hướng dẫn, video và sách tốt nhất để cải thiện kỹ năng NumPy của bạn

Tổng quan về trí tuệ nhân tạo

Về cơ bản, mục tiêu của việc sử dụng AI là làm cho máy tính suy nghĩ như con người. Điều này có vẻ giống như một cái gì đó mới, nhưng lĩnh vực này đã ra đời từ những năm 1950

Hãy tưởng tượng rằng bạn cần viết một chương trình Python sử dụng AI để. Một cách để thực hiện điều đó là viết các câu lệnh có điều kiện và kiểm tra các ràng buộc để xem liệu bạn có thể đặt một số vào mỗi vị trí không. Chà, tập lệnh Python này đã là một ứng dụng của AI vì bạn đã lập trình máy tính để giải quyết vấn đề

Học máy (ML) và học sâu (DL) cũng là những cách tiếp cận để giải quyết vấn đề. Sự khác biệt giữa các kỹ thuật này và tập lệnh Python là ML và DL sử dụng dữ liệu đào tạo thay vì các quy tắc được mã hóa cứng, nhưng tất cả chúng đều có thể được sử dụng để giải quyết vấn đề bằng AI. Trong các phần tiếp theo, bạn sẽ tìm hiểu thêm về điểm khác biệt của hai kỹ thuật này

Loại bỏ các quảng cáo

Học máy

Học máy là một kỹ thuật trong đó bạn đào tạo hệ thống để giải quyết vấn đề thay vì lập trình các quy tắc một cách rõ ràng. Quay lại ví dụ sudoku trong phần trước, để giải quyết vấn đề bằng cách sử dụng máy học, bạn sẽ thu thập dữ liệu từ các trò chơi sudoku đã giải và đào tạo một mô hình thống kê. Các mô hình thống kê là những cách được hình thức hóa về mặt toán học để tính gần đúng hành vi của một hiện tượng

Một nhiệm vụ học máy phổ biến là học có giám sát, trong đó bạn có một tập dữ liệu với đầu vào và đầu ra đã biết. Nhiệm vụ là sử dụng bộ dữ liệu này để đào tạo một mô hình dự đoán đầu ra chính xác dựa trên các đầu vào. Hình ảnh bên dưới trình bày quy trình đào tạo một mô hình bằng cách sử dụng phương pháp học có giám sát

Python cho AI và ML
Quy trình làm việc để đào tạo một mô hình học máy

Sự kết hợp của dữ liệu đào tạo với thuật toán học máy tạo ra mô hình. Sau đó, với mô hình này, bạn có thể đưa ra dự đoán cho dữ liệu mới

Ghi chú. scikit-learning là một thư viện máy học Python phổ biến cung cấp nhiều thuật toán học có giám sát và không giám sát. Để tìm hiểu thêm về nó, hãy xem Split Your Dataset With scikit-learn's train_test_split()

Mục tiêu của các nhiệm vụ học tập có giám sát là đưa ra dự đoán cho dữ liệu mới, chưa nhìn thấy. Để làm điều đó, bạn giả sử rằng dữ liệu không nhìn thấy này tuân theo phân phối xác suất tương tự như phân phối của tập dữ liệu huấn luyện. Nếu trong tương lai, phân phối này thay đổi, thì bạn cần huấn luyện lại mô hình của mình bằng tập dữ liệu huấn luyện mới

Kỹ thuật tính năng

Vấn đề dự đoán trở nên khó khăn hơn khi bạn sử dụng các loại dữ liệu khác nhau làm đầu vào. Vấn đề sudoku tương đối đơn giản vì bạn đang xử lý trực tiếp các con số. Nếu bạn muốn đào tạo một mô hình để dự đoán tình cảm trong một câu thì sao?

Một tên gọi khác của dữ liệu đầu vào là tính năng và kỹ thuật tính năng là quá trình trích xuất các tính năng từ dữ liệu thô. Khi xử lý các loại dữ liệu khác nhau, bạn cần tìm ra cách biểu diễn dữ liệu này để trích xuất thông tin có ý nghĩa từ nó

Một ví dụ về kỹ thuật công nghệ tính năng là, trong đó bạn loại bỏ biến tố khỏi các từ trong câu. Ví dụ: các dạng biến cách của động từ “watch”, như “watches”, “watching” và “watched” sẽ được rút gọn thành bổ đề hoặc dạng cơ sở của chúng. "đồng hồ. ”

Nếu bạn đang sử dụng mảng để lưu trữ từng từ của kho văn bản, thì bằng cách áp dụng từ vựng, bạn sẽ có một ma trận ít thưa thớt hơn. Điều này có thể tăng hiệu suất của một số thuật toán học máy. Hình ảnh sau đây trình bày quá trình từ vựng hóa và biểu diễn bằng mô hình túi từ

Python cho AI và ML
Tạo các tính năng bằng mô hình túi từ

Đầu tiên, dạng biến cách của mọi từ được rút gọn thành bổ đề của nó. Sau đó, số lần xuất hiện của từ đó được tính. Kết quả là một mảng chứa số lần xuất hiện của mỗi từ trong văn bản

Học kĩ càng

Học sâu là một kỹ thuật trong đó bạn để mạng thần kinh tự tìm ra tính năng nào là quan trọng thay vì áp dụng các kỹ thuật kỹ thuật tính năng. Điều này có nghĩa là với deep learning, bạn có thể bỏ qua quy trình kỹ thuật tính năng

Không phải đối phó với kỹ thuật tính năng là tốt vì quá trình này trở nên khó khăn hơn khi bộ dữ liệu trở nên phức tạp hơn. Ví dụ: làm thế nào bạn có thể trích xuất dữ liệu để dự đoán tâm trạng của một người khi được chụp ảnh khuôn mặt của cô ấy? . Trong các phần tiếp theo, bạn sẽ tìm hiểu sâu hơn về mạng lưới thần kinh để hiểu rõ hơn về cách thức hoạt động của chúng

Mạng thần kinh. Khái niệm chính

Mạng thần kinh là một hệ thống học cách đưa ra dự đoán bằng cách làm theo các bước sau

  1. Lấy dữ liệu đầu vào
  2. Đưa ra dự đoán
  3. So sánh dự đoán với đầu ra mong muốn
  4. Điều chỉnh trạng thái bên trong của nó để dự đoán chính xác vào lần tiếp theo

Vectơ, lớp và hồi quy tuyến tính là một số khối xây dựng của mạng lưới thần kinh. Dữ liệu được lưu trữ dưới dạng vectơ và với Python, bạn lưu trữ các vectơ này trong mảng. Mỗi lớp biến đổi dữ liệu đến từ lớp trước. Bạn có thể coi mỗi lớp là một bước kỹ thuật tính năng, bởi vì mỗi lớp trích xuất một số biểu diễn của dữ liệu xuất hiện trước đó

Một điều thú vị về các lớp mạng thần kinh là các tính toán tương tự có thể trích xuất thông tin từ bất kỳ loại dữ liệu nào. Điều này có nghĩa là bạn đang sử dụng dữ liệu hình ảnh hay dữ liệu văn bản đều không thành vấn đề. Quá trình trích xuất thông tin có ý nghĩa và đào tạo mô hình học sâu là giống nhau cho cả hai kịch bản

Trong hình bên dưới, bạn có thể thấy một ví dụ về kiến ​​trúc mạng có hai lớp

Python cho AI và ML
Mạng nơ-ron hai lớp

Mỗi lớp biến đổi dữ liệu đến từ lớp trước bằng cách áp dụng một số phép toán

Loại bỏ các quảng cáo

Quá trình đào tạo một mạng lưới thần kinh

Đào tạo một mạng lưới thần kinh tương tự như quá trình thử và sai. Hãy tưởng tượng bạn đang chơi phi tiêu lần đầu tiên. Trong lần ném đầu tiên, bạn cố gắng ném trúng tâm của bảng phi tiêu. Thông thường, cú đánh đầu tiên chỉ là để biết chiều cao và tốc độ của bàn tay bạn ảnh hưởng đến kết quả như thế nào. Nếu bạn thấy phi tiêu cao hơn tâm điểm thì bạn điều chỉnh tay ném thấp hơn một chút, v.v.

Đây là các bước để cố gắng bắn trúng tâm của bảng phi tiêu

Python cho AI và ML
Các bước để đánh vào tâm của bảng phi tiêu

Lưu ý rằng bạn tiếp tục đánh giá lỗi bằng cách quan sát nơi phi tiêu tiếp đất (bước 2). Bạn tiếp tục cho đến khi cuối cùng bạn chạm vào tâm của bảng phi tiêu

Với mạng lưới thần kinh, quá trình này rất giống nhau. bạn bắt đầu với một số trọng số ngẫu nhiên và vectơ độ lệch, đưa ra dự đoán, so sánh nó với đầu ra mong muốn và điều chỉnh vectơ để dự đoán chính xác hơn vào lần tiếp theo. Quá trình tiếp tục cho đến khi sự khác biệt giữa dự đoán và mục tiêu chính xác là tối thiểu

Biết khi nào nên dừng đào tạo và đặt mục tiêu chính xác nào là một khía cạnh quan trọng của việc đào tạo mạng lưới thần kinh, chủ yếu là do các tình huống

Vectơ và trọng số

Làm việc với mạng thần kinh bao gồm thực hiện các thao tác với vectơ. Bạn biểu diễn các vectơ dưới dạng mảng nhiều chiều. Các vectơ hữu ích trong học sâu chủ yếu là do một thao tác cụ thể. sản phẩm chấm. Tích vô hướng của hai vectơ cho bạn biết chúng giống nhau như thế nào về hướng và được chia tỷ lệ theo độ lớn của hai vectơ

Các vectơ chính bên trong mạng nơ-ron là các vectơ trọng số và độ chệch. Nói một cách lỏng lẻo, những gì bạn muốn mạng thần kinh của mình thực hiện là kiểm tra xem đầu vào có giống với các đầu vào khác mà nó đã thấy hay không. Nếu đầu vào mới tương tự như đầu vào đã thấy trước đó, thì đầu ra cũng sẽ tương tự. Đó là cách bạn nhận được kết quả của một dự đoán

Mô hình hồi quy tuyến tính

Hồi quy được sử dụng khi bạn cần ước tính mối quan hệ giữa một biến phụ thuộc và hai hoặc nhiều biến độc lập. Hồi quy tuyến tính là một phương pháp được áp dụng khi bạn tính gần đúng mối quan hệ giữa các biến dưới dạng tuyến tính. Phương pháp này có từ thế kỷ 19 và là phương pháp hồi quy phổ biến nhất

Ghi chú. Mối quan hệ tuyến tính là mối quan hệ có mối quan hệ trực tiếp giữa biến độc lập và biến phụ thuộc

Bằng cách mô hình hóa mối quan hệ giữa các biến dưới dạng tuyến tính, bạn có thể biểu thị biến phụ thuộc dưới dạng tổng trọng số của các biến độc lập. Vì vậy, mỗi biến độc lập sẽ được nhân với một vectơ có tên là

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
7. Bên cạnh các trọng số và các biến độc lập, bạn cũng thêm một véc tơ khác. sự thiện vị. Nó đặt kết quả khi tất cả các biến độc lập khác bằng 0

Như một ví dụ thực tế về cách xây dựng mô hình hồi quy tuyến tính, hãy tưởng tượng bạn muốn đào tạo một mô hình để dự đoán giá nhà dựa trên diện tích và tuổi của ngôi nhà. Bạn quyết định mô hình hóa mối quan hệ này bằng hồi quy tuyến tính. Khối mã sau đây cho thấy cách bạn có thể viết mô hình hồi quy tuyến tính cho vấn đề đã nêu trong mã giả

price = (weights_area * area) + (weights_age * age) + bias

Trong ví dụ trên, có hai trọng số.

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
8 và
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
9. Quá trình đào tạo bao gồm điều chỉnh trọng số và độ lệch để mô hình có thể dự đoán đúng giá trị. Để thực hiện điều đó, bạn sẽ cần tính toán lỗi dự đoán và cập nhật trọng số tương ứng

Đây là những điều cơ bản về cách thức hoạt động của cơ chế mạng lưới thần kinh. Bây giờ là lúc xem cách áp dụng các khái niệm này bằng Python

Trăn AI. Bắt đầu xây dựng mạng lưới thần kinh đầu tiên của bạn

Bước đầu tiên trong việc xây dựng mạng thần kinh là tạo đầu ra từ dữ liệu đầu vào. Bạn sẽ làm điều đó bằng cách tạo tổng trọng số của các biến. Điều đầu tiên bạn cần làm là biểu diễn các đầu vào bằng Python và NumPy

Loại bỏ các quảng cáo

Gói các đầu vào của mạng nơ-ron bằng NumPy

Bạn sẽ sử dụng NumPy để biểu diễn các vectơ đầu vào của mạng dưới dạng mảng. Nhưng trước khi bạn sử dụng NumPy, bạn nên chơi với các vectơ bằng Python thuần túy để hiểu rõ hơn điều gì đang xảy ra

Trong ví dụ đầu tiên này, bạn có một vectơ đầu vào và hai vectơ trọng số khác. Mục tiêu là tìm ra trọng số nào giống với đầu vào hơn, có tính đến hướng và độ lớn. Đây là cách các vectơ trông nếu bạn vẽ chúng

Python cho AI và ML
Ba vectơ trong một mặt phẳng tọa độ Descartes

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
0 giống với vectơ đầu vào hơn vì nó chỉ theo cùng một hướng và độ lớn cũng tương tự. Vậy làm thế nào để bạn tìm ra các vectơ nào giống nhau khi sử dụng Python?

Đầu tiên, bạn xác định ba vectơ, một cho đầu vào và hai vectơ còn lại cho trọng số. Sau đó, bạn tính xem

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
1 và
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
2 giống nhau như thế nào. Để làm điều đó, bạn sẽ áp dụng sản phẩm chấm. Vì tất cả các vectơ đều là vectơ hai chiều nên đây là các bước để thực hiện

  1. Nhân chỉ số đầu tiên của
    (my-env) $ python -m pip install ipython numpy matplotlib
    (my-env) $ ipython
    
    1 với chỉ số đầu tiên của
    (my-env) $ python -m pip install ipython numpy matplotlib
    (my-env) $ ipython
    
    2
  2. Nhân chỉ số thứ hai của
    (my-env) $ python -m pip install ipython numpy matplotlib
    (my-env) $ ipython
    
    1 với chỉ số thứ hai của
    (my-env) $ python -m pip install ipython numpy matplotlib
    (my-env) $ ipython
    
    0
  3. Tổng kết quả của cả hai phép nhân

Bạn có thể sử dụng bảng điều khiển IPython hoặc Notebook Jupyter để theo dõi. Bạn nên tạo một môi trường ảo mới mỗi khi bắt đầu một dự án Python mới, vì vậy bạn nên làm điều đó trước.

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
7 xuất xưởng với phiên bản Python 3. 3 trở lên và tiện dụng để tạo môi trường ảo

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate

Sử dụng các lệnh trên, trước tiên bạn tạo môi trường ảo, sau đó bạn kích hoạt nó. Bây giờ là lúc cài đặt bảng điều khiển IPython bằng cách sử dụng

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
8. Vì bạn cũng sẽ cần NumPy và Matplotlib, nên bạn cũng nên cài đặt chúng

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython

Bây giờ bạn đã sẵn sàng để bắt đầu viết mã. Đây là mã để tính tích vô hướng của

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
1 và
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
2

>>>

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672

Kết quả của tích vô hướng là

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
1. Bây giờ bạn đã biết cách tính tích vô hướng, đã đến lúc sử dụng
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
2 từ NumPy. Đây là cách tính toán
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
3 bằng cách sử dụng
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
2

>>>

In [9]: import numpy as np

In [10]: dot_product_1 = np.dot(input_vector, weights_1)

In [11]: print(f"The dot product is: {dot_product_1}")
Out[11]: The dot product is: 2.1672

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
2 thực hiện tương tự như bạn đã làm trước đây, nhưng bây giờ bạn chỉ cần chỉ định hai mảng làm đối số. Bây giờ hãy tính tích vô hướng của
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
1 và
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
0

>>>

In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259

Lần này, kết quả là

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
8. Là một cách nghĩ khác về tích vô hướng, bạn có thể coi sự giống nhau giữa các tọa độ vectơ là một công tắc bật tắt. Nếu kết quả phép nhân là
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9, thì bạn sẽ nói rằng tọa độ không giống nhau. Nếu kết quả là một cái gì đó khác với
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9, thì bạn sẽ nói rằng chúng giống nhau

Bằng cách này, bạn có thể xem sản phẩm chấm như một phép đo lỏng lẻo về độ tương tự giữa các vectơ. Mỗi khi kết quả phép nhân là

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9 thì tích cuối cùng sẽ có kết quả thấp hơn. Quay trở lại với các vectơ của ví dụ, vì tích vô hướng của
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
1 và
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
0 là
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
8 và
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
8 lớn hơn
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
1, điều đó có nghĩa là
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
1 giống với
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
0 hơn. Bạn sẽ sử dụng cơ chế tương tự này trong mạng thần kinh của mình

Ghi chú. Nhấp vào dấu nhắc (>>>) ở trên cùng bên phải của mỗi khối mã nếu bạn cần sao chép và dán mã đó

Trong hướng dẫn này, bạn sẽ đào tạo một mô hình để đưa ra dự đoán chỉ có hai kết quả có thể xảy ra. Kết quả đầu ra có thể là

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9 hoặc
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0. Đây là một bài toán phân loại, một tập hợp con của các bài toán học có giám sát trong đó bạn có một tập dữ liệu với đầu vào và mục tiêu đã biết. Đây là đầu vào và đầu ra của tập dữ liệu

Mục tiêu vectơ đầu vào [1. 66, 1. 56]1[2, 1. 5]0

Mục tiêu là biến bạn muốn dự đoán. Trong ví dụ này, bạn đang xử lý một tập dữ liệu bao gồm các số. Điều này không phổ biến trong một kịch bản sản xuất thực tế. Thông thường, khi có nhu cầu về mô hình học sâu, dữ liệu được trình bày dưới dạng tệp, chẳng hạn như hình ảnh hoặc văn bản

Loại bỏ các quảng cáo

Đưa ra dự đoán đầu tiên của bạn

Vì đây là mạng thần kinh đầu tiên của bạn nên bạn sẽ giữ mọi thứ đơn giản và xây dựng một mạng chỉ có hai lớp. Cho đến giờ, bạn đã thấy rằng hai phép toán duy nhất được sử dụng bên trong mạng thần kinh là tích vô hướng và tổng. Cả hai đều hoạt động tuyến tính

Nếu bạn thêm nhiều lớp hơn nhưng chỉ tiếp tục sử dụng các phép toán tuyến tính, thì việc thêm nhiều lớp hơn sẽ không có tác dụng vì mỗi lớp sẽ luôn có một số tương quan với đầu vào của lớp trước đó. Điều này ngụ ý rằng, đối với một mạng có nhiều lớp, sẽ luôn có một mạng có ít lớp hơn dự đoán cùng một kết quả

Điều bạn muốn là tìm một thao tác làm cho các lớp ở giữa đôi khi tương quan với đầu vào và đôi khi không tương quan

Bạn có thể đạt được hành vi này bằng cách sử dụng các hàm phi tuyến tính. Các hàm phi tuyến này được gọi là các hàm kích hoạt. Có nhiều loại hàm kích hoạt. Ví dụ: ReLU (đơn vị tuyến tính được chỉnh lưu) là một hàm chuyển đổi tất cả các số âm thành 0. Điều này có nghĩa là mạng có thể “tắt” một trọng số nếu nó âm, làm tăng tính phi tuyến tính

Mạng bạn đang xây dựng sẽ sử dụng chức năng kích hoạt sigmoid. Bạn sẽ sử dụng nó ở lớp cuối cùng,

In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
1. Hai đầu ra duy nhất có thể có trong tập dữ liệu là
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9 và
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0 và hàm sigmoid giới hạn đầu ra trong phạm vi giữa
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9 và
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0. Đây là công thức để thể hiện hàm sigmoid

Python cho AI và ML
Công thức hàm sigmoid

E là một hằng số toán học được gọi là số Euler và bạn có thể sử dụng

In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
6 để tính eˣ

Các hàm xác suất cung cấp cho bạn xác suất xảy ra đối với các kết quả có thể xảy ra của một sự kiện. Hai đầu ra khả dĩ duy nhất của tập dữ liệu là

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9 và
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0, và phân phối Bernoulli là một phân phối cũng có hai kết quả có thể xảy ra. Hàm sigmoid là một lựa chọn tốt nếu vấn đề của bạn tuân theo phân phối Bernoulli, vì vậy đó là lý do tại sao bạn đang sử dụng nó ở lớp cuối cùng của mạng lưới thần kinh của mình

Vì hàm giới hạn đầu ra trong phạm vi từ

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9 đến
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0, nên bạn sẽ sử dụng hàm này để dự đoán xác suất. Nếu đầu ra lớn hơn
In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]
1, thì bạn sẽ nói dự đoán là
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0. Nếu nó ở dưới
In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]
1, thì bạn sẽ nói dự đoán là
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9. Đây là luồng tính toán bên trong mạng mà bạn đang xây dựng

Python cho AI và ML
Luồng tính toán bên trong mạng thần kinh của bạn

Các hình lục giác màu vàng biểu thị các chức năng và các hình chữ nhật màu xanh biểu thị các kết quả trung gian. Bây giờ là lúc biến tất cả kiến ​​thức này thành mã. Bạn cũng sẽ cần bọc các vectơ bằng mảng NumPy. Đây là đoạn mã áp dụng các chức năng được trình bày trong hình trên

>>>

In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]

Kết quả dự đoán thô là

In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]
5, cao hơn
In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]
1, vì vậy kết quả đầu ra là
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0. Mạng đã dự đoán chính xác. Bây giờ hãy thử với một vectơ đầu vào khác,
In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]
8. Kết quả chính xác cho đầu vào này là
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9. Bạn chỉ cần thay đổi biến
(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
1 vì tất cả các tham số khác vẫn giữ nguyên

>>>

In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]

Lần này, mạng đã dự đoán sai. Kết quả phải nhỏ hơn

In [12]: # Wrapping the vectors in NumPy arrays
In [13]: input_vector = np.array([1.66, 1.56])
In [14]: weights_1 = np.array([1.45, -0.66])
In [15]: bias = np.array([0.0])

In [16]: def sigmoid(x):
   ...:     return 1 / (1 + np.exp(-x))

In [17]: def make_prediction(input_vector, weights, bias):
   ...:      layer_1 = np.dot(input_vector, weights) + bias
   ...:      layer_2 = sigmoid(layer_1)
   ...:      return layer_2

In [18]: prediction = make_prediction(input_vector, weights_1, bias)

In [19]: print(f"The prediction result is: {prediction}")
Out[19]: The prediction result is: [0.7985731]
1 vì mục tiêu cho đầu vào này là
In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9, nhưng kết quả thô là
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
3. Nó đã đoán sai, nhưng sai lầm tệ đến mức nào?

Huấn luyện mạng lưới thần kinh đầu tiên của bạn

Trong quá trình huấn luyện mạng nơ-ron, đầu tiên bạn đánh giá lỗi và sau đó điều chỉnh trọng số cho phù hợp. Để điều chỉnh trọng số, bạn sẽ sử dụng thuật toán giảm độ dốc và lan truyền ngược. Độ dốc gốc được áp dụng để tìm hướng và tốc độ cập nhật các thông số

Trước khi thực hiện bất kỳ thay đổi nào trong mạng, bạn cần tính toán lỗi. Đó là những gì bạn sẽ làm trong phần tiếp theo

Tính toán lỗi dự đoán

Để hiểu mức độ của lỗi, bạn cần chọn một cách để đo lường nó. Hàm được sử dụng để đo lỗi được gọi là hàm chi phí hoặc hàm mất mát. Trong hướng dẫn này, bạn sẽ sử dụng lỗi bình phương trung bình (MSE) làm hàm chi phí của mình. Bạn tính toán MSE theo hai bước

  1. Tính toán sự khác biệt giữa dự đoán và mục tiêu
  2. Nhân kết quả với chính nó

Mạng có thể mắc lỗi khi xuất ra giá trị cao hơn hoặc thấp hơn giá trị chính xác. Vì MSE là bình phương chênh lệch giữa dự đoán và kết quả chính xác, nên với số liệu này, bạn sẽ luôn nhận được giá trị dương

Đây là biểu thức hoàn chỉnh để tính toán lỗi cho dự đoán cuối cùng trước đó

>>>

In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]

Trong ví dụ trên, lỗi là

In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
4. Một ý nghĩa của việc nhân sự khác biệt lên chính nó là các lỗi lớn hơn có tác động thậm chí còn lớn hơn và các lỗi nhỏ hơn tiếp tục nhỏ hơn khi chúng giảm đi.

Loại bỏ các quảng cáo

Hiểu cách giảm lỗi

Mục tiêu là thay đổi trọng số và các biến thiên vị để bạn có thể giảm sai số. Để hiểu cách thức hoạt động của điều này, bạn sẽ chỉ thay đổi biến trọng số và giữ nguyên độ lệch hiện tại. Bạn cũng có thể loại bỏ hàm sigmoid và chỉ sử dụng kết quả của

In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
5. Tất cả những gì còn lại là tìm ra cách bạn có thể sửa đổi các trọng số để sai số giảm xuống

Bạn tính toán MSE bằng cách thực hiện

In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
6. Nếu bạn coi
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
7 là một biến duy nhất
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
8, thì bạn có
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
9, là một hàm bậc hai. Đây là cách chức năng trông nếu bạn vẽ nó

Python cho AI và ML
Đồ thị của hàm bậc hai

Lỗi được đưa ra bởi trục y. Nếu bạn đang ở điểm

In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
0 và muốn giảm sai số về 0, thì bạn cần giảm giá trị
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
8 xuống. Mặt khác, nếu bạn đang ở điểm
In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
2 và muốn giảm sai số, thì bạn cần tăng giá trị
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
8 lên. Để biết bạn nên đi theo hướng nào để giảm sai số, bạn sẽ sử dụng đạo hàm. Một công cụ phái sinh giải thích chính xác cách một mô hình sẽ thay đổi

Một từ khác cho đạo hàm là gradient. Độ dốc gốc là tên của thuật toán được sử dụng để tìm hướng và tốc độ cập nhật các tham số mạng

Ghi chú. Để tìm hiểu thêm về toán học đằng sau việc giảm dần độ dốc, hãy xem Thuật toán giảm dần độ dốc ngẫu nhiên với Python và NumPy

Trong hướng dẫn này, bạn sẽ không tập trung vào lý thuyết đằng sau các đạo hàm, vì vậy bạn sẽ chỉ cần áp dụng các quy tắc đạo hàm cho từng hàm mà bạn sẽ gặp. Quy tắc lũy thừa nói rằng đạo hàm của xⁿ là nx⁽ⁿ⁻¹⁾. Vậy đạo hàm của _______65_______4 là _______65_______5, và đạo hàm của _______61_______8 là _______26_______0

Hãy nhớ rằng biểu thức lỗi là

In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
6. Khi bạn coi ________ 61 _______7 là một biến duy nhất ________ 61 _____8, đạo hàm của sai số là
In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
5. Bằng cách lấy đạo hàm của hàm này, bạn muốn biết bạn nên thay đổi
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
8 theo hướng nào để đưa kết quả của
In [27]: derivative = 2 * (prediction - target)

In [28]: print(f"The derivative is {derivative}")
Out[28]: The derivative is: [1.7420383]
3 về 0, do đó giảm sai số

Khi nói đến mạng thần kinh của bạn, đạo hàm sẽ cho bạn biết hướng bạn nên thực hiện để cập nhật biến trọng số. Nếu đó là một số dương, thì bạn đã dự đoán quá cao và bạn cần giảm trọng số. Nếu đó là một số âm, thì bạn đã dự đoán quá thấp và bạn cần tăng trọng số

Bây giờ là lúc viết mã để tìm ra cách cập nhật

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
2 cho dự đoán sai trước đó. Nếu sai số bình phương trung bình là
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
4, thì bạn nên tăng hay giảm trọng số?

>>>

In [27]: derivative = 2 * (prediction - target)

In [28]: print(f"The derivative is {derivative}")
Out[28]: The derivative is: [1.7420383]

Kết quả là ________ 85 ______ 8, một số dương, vì vậy bạn cần giảm trọng số. Bạn làm điều đó bằng cách trừ kết quả đạo hàm của vectơ trọng số. Bây giờ bạn có thể cập nhật

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
2 tương ứng và dự đoán lại để xem nó ảnh hưởng như thế nào đến kết quả dự đoán

>>>

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
0

Lỗi giảm xuống gần như

In [1]: input_vector = [1.72, 1.23]
In [2]: weights_1 = [1.26, 0]
In [3]: weights_2 = [2.17, 0.32]

In [4]: # Computing the dot product of input_vector and weights_1
In [5]: first_indexes_mult = input_vector[0] * weights_1[0]
In [6]: second_indexes_mult = input_vector[1] * weights_1[1]
In [7]: dot_product_1 = first_indexes_mult + second_indexes_mult

In [8]: print(f"The dot product is: {dot_product_1}")
Out[8]: The dot product is: 2.1672
9. Đẹp, phải không? . Lấy hình ảnh của hàm bậc hai làm ví dụ. Mức tăng cao không phải là lý tưởng vì bạn có thể tiếp tục đi thẳng từ điểm
In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
0 đến điểm
In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
2, không bao giờ tiến gần đến số không. Để đối phó với điều đó, bạn cập nhật trọng số bằng một phần nhỏ của kết quả đạo hàm

Để xác định một phân số để cập nhật trọng số, bạn sử dụng tham số alpha, còn được gọi là tỷ lệ học tập. Nếu bạn giảm tốc độ học tập, thì số gia sẽ nhỏ hơn. Nếu bạn tăng nó, thì các bước cao hơn. Làm thế nào để bạn biết giá trị tỷ lệ học tập tốt nhất là gì?

Ghi chú. Các giá trị tỷ lệ học tập mặc định truyền thống là

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
03,
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
04 và
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
05

Nếu bạn lấy các trọng số mới và đưa ra dự đoán với vectơ đầu vào đầu tiên, thì bạn sẽ thấy rằng bây giờ nó đưa ra dự đoán sai cho vectơ đó. Nếu mạng thần kinh của bạn đưa ra dự đoán chính xác cho mọi trường hợp trong tập huấn luyện của bạn, thì bạn có thể có một mô hình được trang bị quá mức, trong đó mô hình chỉ ghi nhớ cách phân loại các ví dụ thay vì học cách chú ý các tính năng trong dữ liệu

Có những kỹ thuật để tránh điều đó, bao gồm cả việc chính quy hóa. Trong hướng dẫn này, bạn sẽ sử dụng

Bây giờ bạn đã biết cách tính toán lỗi và cách điều chỉnh trọng số cho phù hợp, đã đến lúc quay lại tiếp tục xây dựng mạng lưới thần kinh của bạn

Loại bỏ các quảng cáo

Áp dụng quy tắc chuỗi

Trong mạng thần kinh của bạn, bạn cần cập nhật cả trọng số và vectơ sai lệch. Hàm bạn đang sử dụng để đo lỗi phụ thuộc vào hai biến độc lập, trọng số và độ lệch. Vì trọng số và độ lệch là các biến độc lập nên bạn có thể thay đổi và điều chỉnh chúng để có được kết quả mong muốn

Mạng bạn đang xây dựng có hai lớp và vì mỗi lớp có các chức năng riêng nên bạn đang xử lý thành phần chức năng. Điều này có nghĩa là hàm lỗi vẫn là

In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
4, nhưng bây giờ
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
8 là kết quả của một hàm khác

Để trình bày lại vấn đề, bây giờ bạn muốn biết cách thay đổi

(my-env) $ python -m pip install ipython numpy matplotlib
(my-env) $ ipython
2 và
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
09 để giảm lỗi. Bạn đã thấy rằng bạn có thể sử dụng đạo hàm cho việc này, nhưng thay vì một hàm chỉ có tổng bên trong, bây giờ bạn có một hàm tạo ra kết quả của nó bằng cách sử dụng các hàm khác

Vì bây giờ bạn đã có thành phần hàm này, để lấy đạo hàm của sai số liên quan đến các tham số, bạn sẽ cần sử dụng quy tắc chuỗi từ phép tính. Với quy tắc dây chuyền, bạn lấy đạo hàm riêng của từng hàm, đánh giá chúng và nhân tất cả các đạo hàm riêng để có được đạo hàm bạn muốn

Bây giờ bạn có thể bắt đầu cập nhật trọng số. Bạn muốn biết cách thay đổi trọng số để giảm sai số. Điều này ngụ ý rằng bạn cần tính đạo hàm của sai số đối với các trọng số. Vì sai số được tính bằng cách kết hợp các hàm khác nhau nên bạn cần lấy đạo hàm riêng của các hàm này

Dưới đây là phần trình bày trực quan về cách bạn áp dụng quy tắc dây chuyền để tìm đạo hàm của sai số đối với các trọng số

Python cho AI và ML
Một sơ đồ hiển thị các đạo hàm riêng bên trong mạng lưới thần kinh

Mũi tên đậm màu đỏ hiển thị đạo hàm bạn muốn,

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
10. Bạn sẽ bắt đầu từ hình lục giác màu đỏ, đi theo con đường nghịch đảo để đưa ra dự đoán và tính đạo hàm riêng tại mỗi hàm

Trong hình trên, mỗi hàm được biểu thị bằng các hình lục giác màu vàng và các đạo hàm riêng được biểu thị bằng các mũi tên màu xám ở bên trái. Áp dụng quy tắc chuỗi, giá trị của

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
10 sẽ như sau

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
1

Để tính đạo hàm, bạn nhân tất cả các đạo hàm riêng theo đường dẫn từ hình lục giác sai số (hình màu đỏ) với hình lục giác nơi bạn tìm thấy trọng số (hình lục giác ngoài cùng bên trái)

Bạn có thể nói rằng đạo hàm của

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
12 là đạo hàm của
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
13 đối với
In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
8. Sử dụng danh pháp này, cho
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
15, bạn muốn biết đạo hàm của hàm tính toán sai số đối với giá trị dự đoán

Con đường ngược lại này được gọi là đường chuyền ngược. Trong mỗi lần quay ngược, bạn tính đạo hàm riêng của từng hàm, thay thế các biến bằng giá trị của chúng và cuối cùng nhân mọi thứ

Phần “lấy đạo hàm riêng, đánh giá và nhân” này là cách bạn áp dụng quy tắc dây chuyền. Thuật toán này để cập nhật các tham số mạng thần kinh được gọi là backpropagation

Điều chỉnh các tham số bằng Backpropagation

Trong phần này, bạn sẽ hướng dẫn từng bước quy trình lan truyền ngược, bắt đầu với cách bạn cập nhật xu hướng. Bạn muốn lấy đạo hàm của hàm sai số theo độ lệch,

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
16. Sau đó, bạn sẽ tiếp tục đi lùi, lấy đạo hàm riêng cho đến khi tìm được biến
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
09

Vì bạn đang bắt đầu từ cuối và đi ngược lại, trước tiên bạn cần lấy đạo hàm riêng của sai số đối với dự đoán. Đó là

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
15 trong hình bên dưới

Python cho AI và ML
Sơ đồ hiển thị đạo hàm riêng để tính toán độ dốc thiên vị

Hàm tạo ra lỗi là một hàm bình phương và đạo hàm của hàm này là

In [24]: target = 0

In [25]: mse = np.square(prediction - target)

In [26]: print(f"Prediction: {prediction}; Error: {mse}")
Out[26]: Prediction: [0.87101915]; Error: [0.7586743596667225]
5, như bạn đã thấy trước đó. Bạn đã áp dụng đạo hàm riêng thứ nhất (
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
15) mà vẫn chưa đạt được độ lệch, vì vậy bạn cần lùi lại một bước nữa và lấy đạo hàm của dự đoán đối với lớp trước đó,
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
21

Dự đoán là kết quả của hàm sigmoid. Bạn có thể lấy đạo hàm của hàm sigmoid bằng cách nhân

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
22 và
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
23. Công thức đạo hàm này rất tiện dụng vì bạn có thể sử dụng kết quả sigmoid đã được tính để tính đạo hàm của nó. Sau đó, bạn lấy đạo hàm riêng này và tiếp tục đi lùi

Bây giờ bạn sẽ lấy đạo hàm của

In [20]: # Changing the value of input_vector
In [21]: input_vector = np.array([2, 1.5])

In [22]: prediction = make_prediction(input_vector, weights_1, bias)

In [23]: print(f"The prediction result is: {prediction}")
Out[23]: The prediction result is: [0.87101915]
5 đối với độ chệch. Nó đây rồi—cuối cùng bạn cũng có được nó. Biến
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
09 là biến độc lập nên kết quả sau khi áp dụng quy tắc lũy thừa là
In [10]: dot_product_2 = np.dot(input_vector, weights_2)

In [11]: print(f"The dot product is: {dot_product_2}")
Out[11]: The dot product is: 4.1259
0. Thật tuyệt, bây giờ bạn đã hoàn thành bước chuyển ngược này, bạn có thể đặt mọi thứ lại với nhau và tính toán
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
16

>>>

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
2

Để cập nhật các trọng số, bạn làm theo quy trình tương tự, đi ngược lại và lấy đạo hàm riêng cho đến khi bạn tìm được biến trọng số. Vì bạn đã tính một số đạo hàm riêng nên bạn chỉ cần tính

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
28. Đạo hàm của tích vô hướng là đạo hàm của vectơ thứ nhất nhân với vectơ thứ hai, cộng với đạo hàm của vectơ thứ hai nhân với vectơ thứ nhất

Loại bỏ các quảng cáo

Tạo lớp mạng thần kinh

Bây giờ bạn đã biết cách viết các biểu thức để cập nhật cả trọng số và độ chệch. Đã đến lúc tạo một lớp cho mạng lưới thần kinh. Các lớp là khối xây dựng chính của lập trình hướng đối tượng (OOP). Lớp

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
29 tạo các giá trị bắt đầu ngẫu nhiên cho các biến trọng số và sai lệch

Khi khởi tạo một đối tượng

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
29, bạn cần truyền tham số
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
31. Bạn sẽ sử dụng
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
32 để đưa ra dự đoán. Các phương pháp
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
33 và
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
34 có các phép tính mà bạn đã học trong phần này. Đây là lớp
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
29 cuối cùng

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
3

Ở đó bạn có nó. Đó là mã của mạng lưới thần kinh đầu tiên của bạn. Xin chúc mừng. Mã này chỉ tập hợp tất cả các phần bạn đã thấy cho đến nay. Nếu bạn muốn đưa ra dự đoán, trước tiên bạn tạo một thể hiện của

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
36, sau đó bạn gọi
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
37

>>>

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
4

Đoạn mã trên đưa ra dự đoán, nhưng bây giờ bạn cần học cách đào tạo mạng. Mục tiêu là làm cho mạng tổng quát hóa trên tập dữ liệu huấn luyện. Điều này có nghĩa là bạn muốn nó thích ứng với dữ liệu mới, chưa thấy, tuân theo phân phối xác suất giống như tập dữ liệu huấn luyện. Đó là những gì bạn sẽ làm trong phần tiếp theo

Đào tạo mạng với nhiều dữ liệu hơn

Bạn đã điều chỉnh trọng số và độ lệch cho một phiên bản dữ liệu, nhưng mục tiêu là làm cho mạng tổng quát hóa trên toàn bộ tập dữ liệu. Giảm dần độ dốc ngẫu nhiên là một kỹ thuật trong đó, ở mỗi lần lặp lại, mô hình đưa ra dự đoán dựa trên một phần dữ liệu đào tạo được chọn ngẫu nhiên, tính toán lỗi và cập nhật các tham số

Bây giờ là lúc để tạo phương thức

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
38 của lớp
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
29 của bạn. Bạn sẽ lưu lỗi trên tất cả các điểm dữ liệu sau mỗi 100 lần lặp vì bạn muốn vẽ biểu đồ cho biết số liệu này thay đổi như thế nào khi số lần lặp tăng lên. Đây là phương thức
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
38 cuối cùng của mạng lưới thần kinh của bạn

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
5

Có rất nhiều thứ đang diễn ra trong khối mã trên, vì vậy đây là bảng phân tích từng dòng

  • Dòng 8 chọn một phiên bản ngẫu nhiên từ tập dữ liệu

  • Dòng 14 đến 16 tính đạo hàm riêng và trả về đạo hàm cho độ chệch và trọng số. Họ sử dụng

    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    41 mà bạn đã xác định trước đó

  • Dòng 18 cập nhật độ lệch và trọng số bằng cách sử dụng

    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    34 mà bạn đã xác định trong khối mã trước đó

  • Dòng 21 kiểm tra xem chỉ số lặp hiện tại có phải là bội số của

    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    43 không. Bạn làm điều này để quan sát lỗi thay đổi như thế nào sau mỗi lần lặp lại
    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    43

  • Dòng 24 bắt đầu vòng lặp đi qua tất cả các phiên bản dữ liệu

  • Dòng 28 tính kết quả

    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    45

  • Dòng 29 tính toán

    In [27]: derivative = 2 * (prediction - target)
    
    In [28]: print(f"The derivative is {derivative}")
    Out[28]: The derivative is: [1.7420383]
    
    3 cho mọi trường hợp

  • Dòng 31 là nơi bạn tích tổng số lỗi bằng cách sử dụng biến

    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    47. Bạn làm điều này bởi vì bạn muốn vẽ một điểm có lỗi cho tất cả các trường hợp dữ liệu. Sau đó, ở dòng 32, bạn nối
    In [27]: derivative = 2 * (prediction - target)
    
    In [28]: print(f"The derivative is {derivative}")
    Out[28]: The derivative is: [1.7420383]
    
    3 với
    $ python -m venv ~/.my-env
    $ source ~/.my-env/bin/activate
    
    49, mảng lưu trữ các lỗi. Bạn sẽ sử dụng mảng này để vẽ biểu đồ

Nói tóm lại, bạn chọn một phiên bản ngẫu nhiên từ tập dữ liệu, tính toán độ dốc và cập nhật trọng số và độ lệch. Bạn cũng tính toán lỗi tích lũy sau mỗi 100 lần lặp lại và lưu các kết quả đó vào một mảng. Bạn sẽ vẽ mảng này để hình dung lỗi thay đổi như thế nào trong quá trình đào tạo

Ghi chú. Nếu bạn đang chạy mã trong Jupyter Notebook, thì bạn cần khởi động lại kernel sau khi thêm

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
38 vào lớp
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
29

Để mọi thứ bớt phức tạp hơn, bạn sẽ sử dụng tập dữ liệu chỉ có tám trường hợp, mảng

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
52. Bây giờ bạn có thể gọi
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
38 và sử dụng Matplotlib để vẽ lỗi tích lũy cho mỗi lần lặp lại

>>>

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
6

Bạn khởi tạo lớp

$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
29 một lần nữa và gọi
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
38 bằng cách sử dụng các giá trị
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
52 và ________0____57. Bạn chỉ định rằng nó sẽ chạy
$ python -m venv ~/.my-env
$ source ~/.my-env/bin/activate
58 lần. Đây là biểu đồ hiển thị lỗi cho một phiên bản của mạng thần kinh

Python cho AI và ML
Biểu đồ hiển thị lỗi đào tạo tích lũy

Lỗi tổng thể đang giảm, đó là những gì bạn muốn. Hình ảnh được tạo trong cùng thư mục nơi bạn đang chạy IPython. Sau khi giảm nhiều nhất, lỗi tiếp tục tăng và giảm nhanh chóng từ tương tác này sang tương tác khác. Đó là bởi vì tập dữ liệu là ngẫu nhiên và rất nhỏ, vì vậy mạng thần kinh khó có thể trích xuất bất kỳ tính năng nào

Nhưng không nên đánh giá hiệu suất bằng chỉ số này vì bạn đang đánh giá nó bằng cách sử dụng các phiên bản dữ liệu mà mạng đã thấy. Điều này có thể dẫn đến trang bị quá mức, khi mô hình phù hợp với tập dữ liệu đào tạo đến mức nó không khái quát hóa thành dữ liệu mới

Loại bỏ các quảng cáo

Thêm nhiều lớp hơn vào mạng lưới thần kinh

Tập dữ liệu trong hướng dẫn này được giữ ở mức nhỏ cho mục đích học tập. Thông thường, các mô hình học sâu cần một lượng lớn dữ liệu vì bộ dữ liệu phức tạp hơn và có nhiều sắc thái

Vì các bộ dữ liệu này có nhiều thông tin phức tạp hơn nên chỉ sử dụng một hoặc hai lớp là không đủ. Đó là lý do tại sao các mô hình deep learning được gọi là “deep learning. ” Họ thường có một số lượng lớn các lớp

Bằng cách thêm nhiều lớp hơn và sử dụng các chức năng kích hoạt, bạn tăng sức mạnh biểu đạt của mạng và có thể đưa ra các dự đoán ở cấp độ rất cao. Một ví dụ về các loại dự đoán này là nhận dạng khuôn mặt, chẳng hạn như khi bạn chụp ảnh khuôn mặt của mình bằng điện thoại và điện thoại sẽ mở khóa nếu nhận dạng được hình ảnh đó là bạn.

Phần kết luận

Xin chúc mừng. Hôm nay, bạn đã xây dựng một mạng thần kinh từ đầu bằng NumPy. Với kiến ​​thức này, bạn đã sẵn sàng tìm hiểu sâu hơn về thế giới trí tuệ nhân tạo trong Python

Trong hướng dẫn này, bạn đã học

  • Học sâu là gì và điều gì khác biệt với học máy
  • Cách biểu diễn các vectơ bằng NumPy
  • Chức năng kích hoạt là gì và tại sao chúng được sử dụng bên trong mạng lưới thần kinh
  • Thuật toán lan truyền ngược là gì và nó hoạt động như thế nào
  • Cách huấn luyện mạng lưới thần kinh và đưa ra dự đoán

Quá trình đào tạo một mạng lưới thần kinh chủ yếu bao gồm các hoạt động áp dụng cho các vectơ. Hôm nay, bạn đã làm điều đó từ đầu chỉ sử dụng NumPy làm phụ thuộc. Điều này không được khuyến nghị trong cài đặt sản xuất vì toàn bộ quy trình có thể không hiệu quả và dễ xảy ra lỗi. Đó là một trong những lý do tại sao các framework học sâu như Keras, PyTorch và TensorFlow lại rất phổ biến

Đọc thêm

Để biết thêm thông tin về các chủ đề được đề cập trong hướng dẫn này, hãy xem các tài nguyên này

  • Look Ma, No-Loops. Lập trình mảng với NumPy
  • Hồi quy tuyến tính trong Python
  • Phân loại văn bản thực tế với Python và Keras
  • So sánh hiệu suất Pure Python vs NumPy vs TensorFlow
  • PyTorch so với TensorFlow cho Dự án Học sâu Python của bạn

Đánh dấu là đã hoàn thành

Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Xây dựng mạng nơ-ron và đưa ra dự đoán bằng Python AI

🐍 Thủ thuật Python 💌

Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python

Python cho AI và ML

Gửi cho tôi thủ thuật Python »

Giới thiệu về Deborah Mesquita

Python cho AI và ML
Python cho AI và ML

Déborah là một nhà khoa học dữ liệu thích giải thích các khái niệm theo những cách toàn diện

» Tìm hiểu thêm về Deborah


Mỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là

Python cho AI và ML

Aldren

Python cho AI và ML

David

Python cho AI và ML

Geir Arne

Python cho AI và ML

Joanna

Python cho AI và ML

Gia-cốp

Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Chuyên gia Kỹ năng Python trong thế giới thực
Với quyền truy cập không giới hạn vào Python thực

Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia

Nâng cao kỹ năng Python của bạn »

Bạn nghĩ sao?

Đánh giá bài viết này

Tweet Chia sẻ Chia sẻ Email

Bài học số 1 hoặc điều yêu thích mà bạn đã học được là gì?

Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi

Python được sử dụng như thế nào trong AI ML?

Python cung cấp mã ngắn gọn và dễ đọc. Mặc dù các thuật toán phức tạp và quy trình công việc linh hoạt đứng đằng sau công nghệ máy học và trí tuệ nhân tạo, nhưng sự đơn giản của Python cho phép các nhà phát triển viết các hệ thống đáng tin cậy . Các nhà phát triển phải nỗ lực hết sức để giải quyết vấn đề ML thay vì tập trung vào các sắc thái kỹ thuật của ngôn ngữ.

Tôi có thể tạo AI bằng Python không?

Nếu bạn mới bắt đầu trong thế giới trí tuệ nhân tạo (AI), thì Python là một ngôn ngữ tuyệt vời để học vì hầu hết các công cụ đều được xây dựng bằng ngôn ngữ này. Deep learning is a technique used to make predictions using data, and it heavily relies on neural networks.

Tại sao Python là tốt nhất cho AI ML và deep learning?

Dễ hiểu hơn và điều này giúp dễ dàng tạo các mô hình máy học . Một tính năng khác của Python là nó trực quan và hoàn hảo cho việc triển khai hợp tác. Nó cho phép tạo mẫu và thử nghiệm sản phẩm nhanh hơn vì đây là ngôn ngữ có mục đích chung.

Làm cách nào để học Python cho AI và ML?

7 bước để thành thạo Machine Learning với Python vào năm 2022. .
Bước 1. Học lập trình cho Machine Learning. .
Bước 2. Thu thập và tiền xử lý dữ liệu trong Python. .
Bước 3. Phân tích dữ liệu trong Python. .
Bước 4. Học máy với Python. .
Bước 5. Các thuật toán học máy chuyên sâu. .
Bước 6. Học kĩ càng. .
Bước 7. dự án