Computer >> Máy Tính >  >> Lập trình >> Python

Một mạng nơron thần kinh đơn trong Python

Mạng nơ-ron là cốt lõi rất quan trọng của học sâu; nó có nhiều ứng dụng thực tế trong nhiều lĩnh vực khác nhau. Ngày nay, các mạng này được sử dụng để phân loại hình ảnh, nhận dạng giọng nói, phát hiện đối tượng, v.v.

Chúng ta hãy hiểu đây là gì và nó hoạt động như thế nào?

Mạng này có các thành phần khác nhau. Chúng như sau -

  • Một lớp đầu vào, x
  • Số lượng lớp ẩn tùy ý
  • Lớp đầu ra, ŷ
  • Tập hợp các trọng số và độ lệch giữa mỗi lớp được xác định bởi W và b
  • Tiếp theo là lựa chọn chức năng kích hoạt cho mỗi lớp ẩn, σ.

Trong sơ đồ này trình bày Mạng Nơ-ron 2 lớp (lớp đầu vào thường bị loại trừ khi đếm số lớp trong Mạng Nơ-ron)

Một mạng nơron thần kinh đơn trong Python

Trong biểu đồ này, các vòng tròn đại diện cho các nơ-ron và các đường thẳng đại diện cho các khớp thần kinh. Các khớp thần kinh được sử dụng để nhân các đầu vào và trọng số. Chúng tôi nghĩ rằng trọng lượng là "sức mạnh" của sự kết nối giữa các tế bào thần kinh. Trọng số xác định đầu ra của mạng nơ-ron.

Dưới đây là tổng quan ngắn gọn về cách thức hoạt động của mạng nơ-ron chuyển tiếp nguồn cấp dữ liệu đơn giản -

Khi chúng tôi sử dụng mạng nơ-ron chuyển tiếp nguồn cấp dữ liệu, chúng tôi phải làm theo một số bước.

  • Đầu tiên nhận đầu vào dưới dạng ma trận (mảng số 2D)

  • Tiếp theo là nhân đầu vào với một trọng số đã đặt.

  • Tiếp theo, áp dụng một chức năng kích hoạt.

  • Trả lại đầu ra.

  • Lỗi tiếp theo được tính toán, đó là sự khác biệt giữa đầu ra mong muốn từ dữ liệu và đầu ra dự đoán.

  • Và trọng lượng sẽ thay đổi một chút tùy theo lỗi.

  • Để huấn luyện, quá trình này được lặp lại hơn 1.000 lần và dữ liệu được huấn luyện càng nhiều thì kết quả đầu ra của chúng ta càng chính xác.

GIỜ NGHIÊN CỨU, GIỜ NGAY (ĐẦU VÀO) ĐIỂM KIỂM TRA (ĐẦU RA)

 2, 9921, 5863, 6894, 8? 

Mã mẫu

 from numpy import exp, array, random, dot, tanhclass my_network ():def __init __ (self):random.seed (1) # 3x1 Trọng lượng ma trận self.weight_matrix =2 * random.random ((3, 1) ) - 1 defmy_tanh (self, x):return tanh (x) defmy_tanh_derivative (self, x):return 1,0 - tanh (x) ** 2 # truyền về phía trước defmy_ntic_propagation (self, input):return self.my_tanh (dot (input) , self.weight_matrix)) # đào tạo mạng nơ-ron. deftrain (self, train_inputs, train_outputs, num_train_iterations):để lặp lại trong phạm vi (num_train_iterations):output =self.my_earch_propagation (train_inputs) # Tính toán lỗi trong đầu ra. error =train_outputs - điều chỉnh đầu ra =dot (train_inputs.T, error * self.my_tanh_derivative (output)) # Điều chỉnh ma trận trọng lượng self.weight_matrix + =Adjust # Mã trình điều khiển if __name__ =="__main__":my_neural =my_network () print ('Trọng số ngẫu nhiên khi bắt đầu huấn luyện') print (my_neural.weight_matrix) train_inputs =array ([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]]) train_outputs =array ([[0, 1, 1, 0]]). T my_neural.train (train_inputs, train_outputs, 10000) print ('Hiển thị trọng lượng mới sau khi tập') print (my_neural.weight_matrix) # Kiểm tra mạng nơ-ron với một tình huống mới. print ("Thử nghiệm mạng trên các ví dụ mới ->") print (my_neural.my_earch_propagation (array ([1, 0, 0]))) 

Đầu ra

 Trọng lượng ngẫu nhiên khi bắt đầu tập luyện [[- 0.16595599] [0.44064899] [- 0.99977125]] Hiển thị trọng lượng mới sau khi tập luyện [[5.39428067] [0.19482422] [0.34317086]] Mạng thử nghiệm trên các ví dụ mới -> [0.99995873]