Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โครงข่ายประสาทนิวรอนเดี่ยวใน Python


โครงข่ายประสาทเทียมเป็นส่วนสำคัญของการเรียนรู้เชิงลึก มันมีการใช้งานจริงมากมายในหลายพื้นที่ ทุกวันนี้ เครือข่ายเหล่านี้ใช้สำหรับการจัดประเภทรูปภาพ การรู้จำคำพูด การตรวจจับวัตถุ ฯลฯ

มาทำความเข้าใจว่าสิ่งนี้คืออะไรและทำงานอย่างไร

เครือข่ายนี้มีองค์ประกอบที่แตกต่างกัน ดังต่อไปนี้ −

  • ชั้นอินพุต x
  • จำนวนเลเยอร์ที่ซ่อนอยู่ตามอำเภอใจ
  • เลเยอร์เอาต์พุต ŷ
  • ชุดของน้ำหนักและความเอนเอียงระหว่างแต่ละเลเยอร์ซึ่งกำหนดโดย W และ b
  • ถัดไปคือตัวเลือกของฟังก์ชันการเปิดใช้งานสำหรับแต่ละเลเยอร์ที่ซ่อนอยู่ σ.

ในแผนภาพนี้ โครงข่ายประสาทเทียมแบบ 2 ชั้นจะแสดง (โดยทั่วไปชั้นอินพุตจะถูกยกเว้นเมื่อนับจำนวนเลเยอร์ในโครงข่ายประสาทเทียม)

โครงข่ายประสาทนิวรอนเดี่ยวใน Python

ในกราฟนี้ วงกลมเป็นตัวแทนของเซลล์ประสาท และเส้นต่างๆ เป็นตัวแทนของไซแนปส์ ไซแนปส์ใช้เพื่อคูณอินพุตและน้ำหนัก เราคิดว่าน้ำหนักเป็น "จุดแข็ง" ของการเชื่อมต่อระหว่างเซลล์ประสาท น้ำหนักกำหนดผลลัพธ์ของโครงข่ายประสาทเทียม

นี่คือภาพรวมโดยย่อเกี่ยวกับวิธีการทำงานของโครงข่ายประสาทเทียมแบบฟีดฟอร์เวิร์ด -

เมื่อเราใช้ feed forward neural network เราต้องทำตามขั้นตอนบางอย่าง

  • ขั้นแรกให้ป้อนข้อมูลเป็นเมทริกซ์ (อาร์เรย์ตัวเลข 2 มิติ)

  • ถัดไปจะคูณอินพุตด้วยน้ำหนักที่กำหนด

  • ถัดไปใช้ฟังก์ชันการเปิดใช้งาน

  • ส่งคืนผลลัพธ์

  • มีการคำนวณข้อผิดพลาดถัดไป ซึ่งเป็นความแตกต่างระหว่างผลลัพธ์ที่ต้องการจากข้อมูลและผลลัพธ์ที่คาดการณ์

  • และน้ำหนักจะเปลี่ยนแปลงเล็กน้อยตามข้อผิดพลาด

  • ในการฝึกอบรม กระบวนการนี้ทำซ้ำมากกว่า 1,000 ครั้ง และยิ่งมีการฝึกอบรมข้อมูลมากเท่าใด ผลลัพธ์ของเราก็จะยิ่งแม่นยำมากขึ้นเท่านั้น

ชั่วโมงเรียน ชั่วโมงนอน (INPUT)คะแนนทดสอบ (ผลลัพธ์)

2, 9921, 5863, 6894, 8?

โค้ดตัวอย่าง

จาก exp การนำเข้าจำนวนมาก, อาร์เรย์, สุ่ม, dot, tanhclass my_network():def __init__(self):random.seed(1) # 3x1 Weight matrix self.weight_matrix =2 * random.random((3, 1) ) - 1 defmy_tanh(ตัวเอง, x):return tanh(x) defmy_tanh_derivative(self, x):return 1.0 - tanh(x) ** 2 # การขยายพันธุ์ไปข้างหน้า defmy_forward_propagation(ตนเอง, อินพุต):return self.my_tanh(dot(inputs) , self.weight_matrix)) # ฝึกโครงข่ายประสาทเทียม deftrain(ตัวเอง, train_inputs, train_outputs, num_train_iterations):สำหรับการวนซ้ำในช่วง (num_train_iterations):output =self.my_forward_propagation(train_inputs) # คำนวณข้อผิดพลาดในผลลัพธ์ error =train_outputs - output adjustment =dot(train_inputs.T, error *self.my_tanh_derivative(output)) # ปรับเมทริกซ์น้ำหนัก self.weight_matrix +=adjustment # รหัสไดรเวอร์ถ้า __name__ =="__main__":my_neural =my_network() พิมพ์ ('น้ำหนักสุ่มเมื่อเริ่มการฝึก') พิมพ์ (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) พิมพ์ ('การแสดงน้ำหนักใหม่หลังการฝึก') พิมพ์ (my_neural.weight_matrix) # ทดสอบ โครงข่ายประสาทเทียมกับสถานการณ์ใหม่ print ("กำลังทดสอบเครือข่ายในตัวอย่างใหม่ ->")print (my_neural.my_forward_propagation(array([1, 0, 0])))

ผลลัพธ์

สุ่มตุ้มน้ำหนักเมื่อเริ่มฝึก[[-0.16595599][ 0.44064899][-0.99977125]]แสดงน้ำหนักใหม่หลังการฝึก[[5.39428067][0.19482422][0.34317086]]การทดสอบเครือข่ายในตัวอย่างใหม่ ->[0.99995873]