BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

SignalPlus: พูดคุยเกี่ยวกับ Deep Neural Networks

SignalPlus
特邀专栏作者
บทความนี้มีประมาณ 8445 คำ การอ่านทั้งหมดใช้เวลาประมาณ 13 นาที
การวิเคราะห์เชิงลึกของการผสมผสานที่สมบูรณ์แบบของโครงข่ายประสาทเทียมและ AI เชิงสร้างสรรค์
สรุปโดย AI
การวิเคราะห์เชิงลึกของการผสมผสานที่สมบูรณ์แบบของโครงข่ายประสาทเทียมและ AI เชิงสร้างสรรค์

คำนำ

Deep neural networks are completely flexible by design, and there really are no fixed rules when it comes to model architecture. 

-- David Foster

คำนำ

โครงข่ายประสาทเทียม(โครงข่ายประสาทเทียม) แรงบันดาลใจจากสมองของมนุษย์สามารถเลียนแบบเซลล์ประสาทชีวภาพเพื่อส่งสัญญาณถึงกัน โครงข่ายประสาทเทียมคือระบบที่ประกอบด้วยเซลล์ประสาท ดังแสดงในรูปด้านล่าง เซลล์ประสาทมีหลายเซลล์เดนไดรต์(dendrite) สำหรับการป้อนข้อมูลจะมีแอกซอน(แอกซอน) สำหรับเอาต์พุต มีคุณสมบัติหลักสองประการ: ความตื่นเต้นง่ายและการนำไฟฟ้า:


  • ความตื่นเต้นง่ายหมายความว่า เมื่อความเข้มข้นของการกระตุ้นไม่ถึงเกณฑ์ที่กำหนด แรงกระตุ้นของเส้นประสาทจะไม่เกิดขึ้น และเมื่อความเข้มข้นของการกระตุ้นถึงค่านี้ แรงกระตุ้นของเส้นประสาทจะเกิดขึ้นและสามารถเข้าถึงความเข้มข้นสูงสุดได้ทันที

  • สภาพนำไฟฟ้าหมายถึงการนำเซลล์ประสาทที่อยู่ติดกันผ่านช่องว่างเล็กๆ ระหว่างเซลล์เหล่านั้น ช่องว่างเล็กๆนี้เรียกว่าไซแนปส์(ไซแนปส์) หน้าที่ของมันคือการส่งกระแสประสาทระหว่างเซลล์ประสาทต่างๆ และไซแนปส์ในรูปด้านล่างเชื่อมต่อเซลล์ประสาท A และ B เข้าด้วยกัน

ลองนึกภาพว่าไซแนปส์จำนวนมากเชื่อมต่อเซลล์ประสาทจำนวนมาก มันไม่ได้สร้างโครงข่ายประสาทเทียมใช่ไหม ใช่เปรียบเทียบกับโครงข่ายประสาทเทียม (artificial neural network,ANN) ยังประกอบด้วยเซลล์ประสาทเทียมจำนวนนับไม่ถ้วน เช่นเซลล์ทางด้านซ้ายด้านล่างโครงข่ายประสาทเทียมแบบตื้น(โครงข่ายประสาทเทียมเงา) และโครงข่ายประสาทเทียมเชิงลึก (โครงข่ายประสาทเทียมเชิงลึก) ทางด้านขวาด้านล่าง

โครงข่ายประสาทตื้นเหมาะสำหรับข้อมูลที่มีโครงสร้าง(ข้อมูลที่มีโครงสร้าง) เช่น ข้อมูลสองมิติที่จัดเก็บไว้ใน Excel ดังรูปด้านล่าง

Deep Neural Networks เหมาะสำหรับข้อมูลที่ไม่มีโครงสร้าง(ข้อมูลที่ไม่มีโครงสร้าง) เช่น ข้อมูลรูปภาพ ข้อความ และเสียง ดังแสดงในรูปด้านล่าง

โมเดล AI ทั่วไปจะสร้างข้อมูลที่ไม่มีโครงสร้างเป็นหลัก ดังนั้นการทำความเข้าใจโครงข่ายประสาทเทียมเชิงลึกจึงมีความจำเป็น เริ่มต้นจากบทความนี้เราจะบินโมเดลและโค้ดเพราะว่า

Talk is cheap. Show me the code.

-- Linus Torvalds

ชื่อระดับแรก

ชื่อรอง

1.1 ดูโครงข่ายประสาทเทียมก่อน

สมมติว่าโครงข่ายประสาทเทียมต่อไปนี้ได้รับการฝึกฝนแล้วใช้เพื่อคาดเดาว่ารูปภาพมีใบหน้าที่ยิ้มแย้มหรือไม่


  1. หน่วย A รับข้อมูลพิกเซลในภาพ


  2. หน่วย B รวมพิกเซลอินพุต เมื่อรูปภาพต้นฉบับมีคุณสมบัติระดับต่ำ(ฟีเจอร์ระดับต่ำ) เช่น เมื่อขอบ (edge) สัญญาณที่แรงที่สุดจะถูกปล่อยออกมา

  3. หน่วย C รวมคุณสมบัติระดับต่ำเมื่อมีคุณสมบัติขั้นสูง(คุณสมบัติระดับสูง) เช่น ฟัน (ทีช) โดยสัญญาณที่แรงที่สุดจะถูกปล่อยออกมา

  4. หน่วย D รวมคุณสมบัติระดับสูงที่ให้สัญญาณที่แรงที่สุดเมื่อบุคคลในภาพต้นฉบับยิ้ม

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

ชื่อรอง

1.2 กระบวนการฝึกอบรม Keras

แบบอย่าง

  1. แบบอย่าง (models)

  2. ชั้น (layers),เข้า(อินพุต) และเอาท์พุท (output)

  3. เครื่องมือเพิ่มประสิทธิภาพ(เครื่องมือเพิ่มประสิทธิภาพ) และฟังก์ชั่นการสูญเสีย (loss)

ใช้คำหลักข้างต้นเพื่อสรุปกระบวนการของโครงข่ายประสาทเทียมการฝึกอบรม Keras: รวมหลายรายการชั้นแบบอย่างแบบอย่าง,จะเข้าข้อมูลถูกแมปกับค่าที่คาดการณ์ไว้ แล้วฟังก์ชั่นการสูญเสียนำค่าที่ทำนายไว้เหล่านี้เอาท์พุทและเปรียบเทียบกับเป้าหมายเพื่อให้ได้ค่าการสูญเสีย (ใช้เพื่อวัดว่าค่าที่คาดการณ์ของเครือข่ายตรงกับผลลัพธ์ที่คาดหวังได้ดีเพียงใด)เครื่องมือเพิ่มประสิทธิภาพใช้ค่าที่สูญเสียนี้เพื่ออัปเดตน้ำหนักของเครือข่าย

ณ จุดนี้ ในที่สุดก็เป็นไปได้ที่จะแสดงโค้ดบางส่วนได้ แม้ว่าจะมีการแนะนำไลบรารีเครื่องมือก็ตาม ขั้นแรก โมดูลที่ใช้สร้างโครงข่ายประสาทเทียมจากไลบรารี tensorflow.keras

ชื่อรอง

1.3 โครงข่ายประสาทเทียมแบบมินิมัลลิสต์

และx และy ข้อมูล:

x = [-1,  0, 1, 2, 3, 4 ]

y = [-3, -1, 1, 3, 5, 7 ]

และx และ y ความสัมพันธ์ระหว่างเมื่อ xnew= 10 ถาม ynewเท่าไหร่?

ดังแสดงในรูปด้านล่างxและ yวาดเป็นรูปจุดกระจัดกระจายก็หาได้ไม่ยากว่าเส้นสีแดงในภาพด้านล่างคือ xและ yชื่อรอง

1.3.1 สร้างแบบจำลอง

เพียงใช้เลเยอร์ของโครงข่ายประสาทเทียมกับเซลล์ประสาทหนึ่งอัน รหัสจะเป็นดังนี้:

ใช้ครั้งแรกmodels.Sequential() สร้างโครงข่ายประสาทเทียมที่ว่างเปล่า จากนั้นเพิ่มเลเยอร์ต่อไป เราเพิ่มไว้ที่นี่layers.Dense()ชื่อรอง

1.3.2 การตรวจสอบโมเดล

ตรวจสอบข้อมูลโมเดล สิ่งที่แปลกคือจำนวนพารามิเตอร์ (Param # ในรูปด้านล่าง) จริง ๆ แล้วเป็น 2 แทนที่จะเป็น 1 เพราะจากภาพข้างบนนี้y = wxควรมีเท่านั้นwพารามิเตอร์

เหตุผลก็คือเมื่อคำนวณจำนวนพารามิเตอร์ในแต่ละเลเยอร์ แต่ละเซลล์ประสาทจะเชื่อมต่อกับค่า 1 ตามค่าเริ่มต้นหน่วยอคติ(หน่วยอคติ) ดังนั้น จริงๆ แล้ว ลักษณะของภาพด้านบนที่แม่นยำยิ่งขึ้นจะเป็นดังนี้:

ถูกต้องแล้วในเวลานี้y = wx+ข ใช่wและ b สองพารามิเตอร์

พูดอย่างเคร่งครัดในความเป็นจริง Dense()ยังคงมีพารามิเตอร์ที่เรียกว่าการเปิดใช้งานในฟังก์ชัน ซึ่งหมายถึงฟังก์ชันการเปิดใช้งานอย่างแท้จริง และสิ่งที่ทำโดยพื้นฐานก็คือwx+b ถูกกำหนดไว้ในสวิตช์โหมดที่ไม่ใช่เชิงเส้นเป็น y. หากฟังก์ชั่นการเปิดใช้งานถูกกำหนดเป็น g,ดังนั้นy = g(wx+ข) ใน Keras หากคุณไม่ได้ระบุค่าสำหรับการเปิดใช้งาน คุณก็ไม่จำเป็นต้องทำการแปลงแบบไม่เชิงเส้นใดๆ เมื่อเพิ่มแนวคิดของฟังก์ชันการเปิดใช้งานแล้ว เราจะให้ภาพที่สมบูรณ์:

เป้าหมายของเราคือการหาพารามิเตอร์ในรูปด้านบนซึ่งก็คือน้ำหนักwชื่อรอง

1.3.3 รวบรวมโมเดล

หลังจากตั้งค่ากรอบงานโมเดลแล้ว ขั้นตอนต่อไปคือการเพิ่มประสิทธิภาพปัญหาดังต่อไปนี้complie()เครื่องมือเพิ่มประสิทธิภาพพารามิเตอร์การตั้งค่าฟังก์ชัน="sgd"นั่นคือ ระบุวิธีการปรับให้เหมาะสมเป็นการสุ่มโคตรลาด และตั้งค่าพารามิเตอร์ loss="mean_squared_error"ชื่อรอง

1.3.4 รูปแบบการฝึกอบรม

รูปแบบการฝึกอบรม fit()ฟังก์ชัน ส่งผ่านข้อมูล x และ y เป็นที่น่าสังเกตว่าพารามิเตอร์ epochs= 500 ยุคคือช่วงเวลาในภาษาจีน นั่นคือจำนวนครั้งที่ชุดการฝึกทั้งหมดถูกสำรวจโดยอัลกอริธึม นี่คือจุดสิ้นสุดของการฝึกโมเดลหลังจากสำรวจ 500 ครั้ง

พิมพ์ข้อมูล 5 งวดแรกและงวดสุดท้ายออกมาหาได้ไม่ยากว่าขาดทุนมากที่ต้น 13.4237 และขาดทุนปลายน้อยมากเพียง 3.8166 e-05 บ่งชี้ว่าคำทำนาย มูลค่าในชุดฝึกแทบจะเท่ากับมูลค่าจริง

หลังจากฝึกโมเดลแล้วคุณสามารถใช้get_weights() ฟังก์ชั่นตรวจสอบพารามิเตอร์

ผลลัพธ์แรกที่ส่งคืนคือน้ำหนักwอคติที่สองbชื่อรองy = 1.9973876 x - 0.99190086 ≈ 2 x - 1 。

1.3.5 แบบประเมินผล

เพื่อประเมินโมเดลpredict() ฟังก์ชัน ส่งผ่านข้อมูลใหม่ x_new เข้าไป และรับผลลัพธ์ 8.995028 ซึ่งใกล้เคียงกับ 2*x_new - 1 = 9 มาก

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

สรุปกระบวนการทั้งหมดของโครงข่ายประสาทเทียม:

  1. สร้างแบบจำลอง:ใช้Sequential()แน่นอนว่ายังมีวิธีอื่นที่ดีกว่า ซึ่งจะกล่าวถึงในหัวข้อถัดไป

  2. ตรวจสอบรุ่น:ใช้summary()

  3. คอมไพล์โมเดล:ใช้compile()

  4. รูปแบบการฝึกอบรม:ใช้fit()

  5. แบบประเมินผล:ใช้predict()

แม้ว่าตัวอย่างนี้จะสร้างโครงข่ายประสาทเทียมแบบมินิมอลลิสต์ แต่ก็มีห้าขั้นตอนจำนวนมาก และห้าขั้นตอนนี้จำเป็นในการสร้างโครงข่ายประสาทเทียมที่ซับซ้อนด้วย ข้อแตกต่างคือในขั้นตอนแรก หลายเลเยอร์จะถูกเย็บเข้าด้วยกันเมื่อสร้างโมเดล และในขั้นตอนที่ห้าจะมีการเลือกขั้นสูงกว่า เครื่องมือเพิ่มประสิทธิภาพ แต่ไม่เคยเปลี่ยนแปลง ในสองส่วนถัดไป เรามาดูโครงข่ายประสาทเทียมที่ซับซ้อนกว่าเล็กน้อยสองเครือข่ายกันซึ่งไปข้างหน้าเครือข่ายประสาทตอบรับ (feedforward neural network,FNN) และชื่อระดับแรก (convoluational neural network, CNN)。

2. โครงข่ายประสาทเทียมป้อนกลับ (FNN)

โครงข่ายประสาทเทียมแบบมินิมอลในส่วนที่แล้วน่าเบื่อเกินไป แต่ส่วนใหญ่จะใช้เพื่อชี้แจงแนวคิดและขั้นตอนของโครงข่ายประสาทเทียมใน Keras มาดูโครงข่ายประสาทเทียมเพื่อทำสิ่งที่น่าสนใจและทำนายหมวดหมู่รูปภาพกัน อันดับแรก ดูชุดข้อมูล CIFAR-10 (https://www.cs.toronto.edu/~kriz/cifar.html) ที่ใช้

ชุดข้อมูลมีรูปภาพสีทั้งหมด 60,000 ภาพ รูปภาพเหล่านี้มีขนาด 32*32 แบ่งออกเป็น 10 คลาส แต่ละคลาสมี 6,000 รูปภาพ ในจำนวนนี้ 50,000 ภาพใช้สำหรับการฝึกอบรม และอีก 10,000 ภาพใช้สำหรับการทดสอบ รูปภาพต่อไปนี้เป็นรายการ 10 หมวดหมู่ และรูปภาพ 10 รูปที่สุ่มแสดงในแต่ละหมวดหมู่:

ใช้ฟังก์ชัน load_data() ในชุดข้อมูลโมดูลเพื่อดาวน์โหลดข้อมูลและปรับพิกเซลของภาพให้เป็นมาตรฐาน พิกเซลดั้งเดิมอยู่ระหว่าง 0 ถึง 255 และตอนนี้พิกเซลเหล่านี้ถูกทำให้เป็นมาตรฐานระหว่าง 0 ถึง 1

สำหรับหมวดหมู่ ให้ใช้ฟังก์ชันในโมดูล utilsto_categorical() ฟังก์ชั่นทำการเข้ารหัสแบบร้อนแรงในหมวดหมู่ แนวคิดคือการแทนจำนวนเต็มด้วยเวกเตอร์ที่มี 1 เพียงตัวเดียว ตัวอย่างเช่น หมวดหมู่ 5 จะกลายเป็น [ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ] หลังจากการเข้ารหัสแบบร้อนแรงครั้งเดียว และที่นั่น เป็นเวกเตอร์ 10 ตัว จำนวนขององค์ประกอบจะเหมือนกับจำนวนหมวดหมู่ เฉพาะองค์ประกอบที่ห้าของเวกเตอร์คือ 1 (hot🔥 ที่ไม่ซ้ำกัน) และองค์ประกอบอื่นๆเป็น 0 (หนาวมาก🧊)

ชื่อรอง

ชื่อรอง

2.1.1 ลำดับ

เราได้เห็นการสร้างแบบจำลองตามลำดับในส่วนที่แล้ว การใช้งานครั้งแรกmodels.Sequential() สร้างโครงข่ายประสาทเทียมที่ว่างเปล่า จากนั้นจึงเพิ่มเลเยอร์ต่อไป ในตัวอย่างนี้มีชั้นปรับระดับlayers.Flatten() และสามชั้นหนาแน่นlayers.Dense()。

โค้ดด้านบนนี้ให้โมเดลดังแสดงในรูปด้านล่าง:

ด้วยความรู้ทางประสาทสัมผัสเรามาศึกษาโค้ดกัน ทำไมคุณถึงต้องมีชั้นปรับระดับ? เนื่องจากรูปภาพมีความกว้าง ความสูง และช่องสีสามมิติ กระบวนการทำให้แบนเป็นมิติเดียวจึงแสดงไว้ในภาพด้านล่าง

รูปภาพต้นฉบับ (32, 32, 3) ถูกป้อนลงในเลเยอร์การทำให้เรียบ (ระบุขนาดมิติของรูปภาพในพารามิเตอร์ input_shape) และหลังจากการทำให้แบนแล้ว มันจะกลายเป็นเวกเตอร์ 32* 32* 3 = 3072 ซึ่งสามารถจินตนาการได้เป็น อินพุตมี 3,072 เซลล์ประสาทในขณะนี้ หลังจากสามชั้นหนาแน่น

  • จำนวนเซลล์ประสาท (หน่วยพารามิเตอร์) คือ 200, 150 และ 10 ตามลำดับ 200 และ 150 สองอันแรกถูกกำหนดแบบไม่เป็นทางการหรือดีบั๊กเป็นไฮเปอร์พารามิเตอร์ แต่ 10 อันสุดท้ายสอดคล้องกับจำนวนหมวดหมู่

  • ฟังก์ชันการเปิดใช้งาน (การเปิดใช้งานพารามิเตอร์) ที่ใช้คือ relu, relu และ softmax ตามลำดับ สอง relu แรกเกือบจะเป็นมาตรฐาน แต่ softmax สุดท้ายเกี่ยวข้องกับงาน หากเป็นปัญหาแบบหลายคลาส ให้ใช้ softmax

ทั่วไปฟังก์ชั่นการเปิดใช้งาน(ฟังก์ชั่นการเปิดใช้งาน) ดังแสดงด้านล่าง:

ReLU แปลงอินพุตเชิงลบ (x < 0) เป็น 0 และอินพุตเชิงบวก (x > 0) ยังคงไม่เปลี่ยนแปลง LeakyReLU คล้ายกับ ReLU มาก ข้อแตกต่างเพียงอย่างเดียวคือสำหรับอินพุตเชิงลบ (x< 0) ผลลัพธ์ของการแปลงยังเป็นจำนวนลบ (ax) ที่สัมพันธ์กับอินพุตอีกด้วย

Sigmoid แปลงจำนวนจริงเป็นตัวเลขระหว่าง 0-1 และจำนวนนี้ถือได้ว่าเป็นความน่าจะเป็นดังนั้นSigmoid ฟังก์ชันสำหรับปัญหาการจำแนกไบนารี เวอร์ชันขยายSoftmaxชื่อรอง

2.1.2 รูปแบบการใช้งาน

ในทางปฏิบัติเราคุ้นเคยกับการใช้มากขึ้นการทำงาน(เชิงหน้าที่) การสร้างแบบจำลอง แบบจำลองที่สร้างขึ้นตามลำดับสามารถทำได้โดยใช้วิธีการทำงาน และในทางกลับกัน หากคุณเลือกวิธีใดวิธีหนึ่งขอแนะนำให้ใช้วิธีการทำงานเท่านั้นในการสร้างแบบจำลอง รหัสแสดงดังต่อไปนี้:

การสร้างแบบจำลองเชิงฟังก์ชันจำเป็นต้องจำประโยคเดียวเท่านั้น:ใช้เลเยอร์เป็นฟังก์ชัน. เมื่อคำนึงถึงประโยคนี้ โค้ดจึงสามารถเข้าใจได้ภายในไม่กี่วินาที

  • บรรทัดที่ 1 ด้วย Input() รับข้อมูลภาพ

  • บรรทัดที่ 2 ใส่Flatten() เป็นฟังก์ชันfการทำให้เข้าใจง่ายไม่ใช่ x = f(อินพุต)

  • ในบรรทัดที่ 3 ให้ใส่Dense(units= 200,activation='relu') เป็นฟังก์ชันgการทำให้เข้าใจง่ายไม่ใช่ x = g(x)

  • บรรทัดที่ 4 ใส่Dense(units= 150,activation='relu') เป็นฟังก์ชันhการทำให้เข้าใจง่ายไม่ใช่ x = h(x)

  • บรรทัดที่ 5 ใส่Dense(units= 10,activation='softmax') เป็นฟังก์ชันqการทำให้เข้าใจง่ายไม่ใช่เอาต์พุต = q(x)

ฟังก์ชันแบบเลเยอร์ต่อเลเยอร์ดังกล่าวจะถ่ายโอนอินพุตไปยังเอาต์พุต, output = q(h(g(f(input)))) และสุดท้ายก็ใช้models.ชื่อรอง

2.2 การตรวจสอบแบบจำลอง

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

โมเดลจะมีชื่อว่า model โดยอัตโนมัติ ตามด้วยตารางที่อธิบายประเภทชื่อ (เลเยอร์ (ประเภท)) รูปร่างเอาต์พุต (รูปร่างเอาต์พุต) และจำนวนพารามิเตอร์ (Param #) ของแต่ละเลเยอร์ มาดูกันทีละชั้นครับ

  • เลเยอร์ InputLayer มีชื่อว่า input_ 1 และรูปร่างเอาต์พุตคือ [None, 32, 32, 3 ] องค์ประกอบสามรายการสุดท้ายสอดคล้องกับความกว้าง ความสูง และช่องสีของภาพ องค์ประกอบแรก None จริงๆ แสดงถึงจำนวนตัวอย่าง เข้มงวดมากขึ้น พูดก็คือ จำนวนตัวอย่างในชุด เพื่อความกระชับของโค้ด โดยปกติแล้วหมายเลขตัวอย่างนี้ไม่จำเป็นต้องเขียนอย่างชัดเจนเมื่อสร้างโมเดล

  • เลเยอร์ที่ราบเรียบมีชื่อว่าราบเรียบ 3072 คือจำนวน 32* 32* 3 หลังจากการราบเรียบ และจำนวนพารามิเตอร์คือ 0 เนื่องจากการราบเรียบเป็นเพียงการปรับรูปร่างอาร์เรย์ใหม่ และไม่จำเป็นต้องใช้พารามิเตอร์ในการดำเนินการปรับรูปร่างใหม่ให้เสร็จสมบูรณ์

  • เลเยอร์ Dense ชั้นแรกมีชื่อว่า Dense รูปร่างเอาต์พุตคือ 200 พารามิเตอร์ 614, 600 = ( 3072 + 1) * 200 อย่าลืมหน่วยอคติ

  • เลเยอร์หนาแน่นที่สองชื่อหนาแน่น_1 รูปร่างเอาต์พุตคือ 150 พารามิเตอร์ 30, 150 = (200 + 1) * 150 ให้พิจารณาหน่วยอคติด้วย

  • เลเยอร์หนาแน่นที่สามชื่อหนาแน่น_2 รูปร่างเอาต์พุตคือ 10 พารามิเตอร์ 1, 510 = (150 + 1) * 10 ให้พิจารณาหน่วยอคติด้วย

ด้านล่างยังแสดงรายการพารามิเตอร์ทั้งหมด (พารามิเตอร์ทั้งหมด)646, 260 , จำนวนพารามิเตอร์ที่สามารถฝึกได้ (params ที่ฝึกได้)646, 260 จำนวนพารามิเตอร์ที่ไม่สามารถฝึกได้ (พารามิเตอร์ที่ไม่สามารถฝึกได้)0 ชื่อรอง

2.3 รวบรวมโมเดล

เมื่อสร้างโมเดลแล้ว คุณจะต้องคอมไพล์โมเดล คุณต้องกำหนดจุดสามจุด:

  1. เลือกฟังก์ชันการสูญเสียตามงานที่จะแก้ไข

  2. เลือกเครื่องมือเพิ่มประสิทธิภาพที่เหมาะสมที่สุด

  3. เลือกเมตริกที่คุณต้องการตรวจสอบ

เรียบเรียงโมเดลด้วยcomplie() มีอยู่

มีอยู่complie()ในฟังก์ชัน:

  • สำหรับการสูญเสียพารามิเตอร์ ตัวอย่างนี้เป็นปัญหาระดับเดียวกัน ดังนั้นฟังก์ชันการสูญเสียที่ใช้จึงเป็น categorical_crossentropy นอกจากนี้:

  • ปัญหาการจำแนกสองประการ: ฟังก์ชันการสูญเสียคือ binary_crossentropy

  • ปัญหาการถดถอย: ฟังก์ชันการสูญเสียคือ meme_squared_error

  • สำหรับเครื่องมือเพิ่มประสิทธิภาพพารามิเตอร์ การใช้เครื่องมือเพิ่มประสิทธิภาพ adam และ rmsprop ด้วยอัตราการเรียนรู้เริ่มต้นจะปลอดภัยในกรณีส่วนใหญ่ เมื่อตั้งค่าพารามิเตอร์นี้ ยังสามารถเรียกได้โดยใช้ชื่อและสร้างอินสแตนซ์ของออบเจ็กต์

  • ชื่อ: 'sgd'

  • วัตถุ: เครื่องมือเพิ่มประสิทธิภาพ อดัม (learning_rate= 0.0005)

  • สำหรับเมตริกพารามิเตอร์ สามารถเรียกได้โดยใช้ชื่อและสร้างอินสแตนซ์ของออบเจ็กต์ ในตัวอย่างนี้ ตัวบ่งชี้มีความแม่นยำ จึงสามารถเขียนได้เป็น


  • ชื่อ: ['ความแม่นยำ']

  • ออบเจ็กต์: [metrics.categorical_accuracy]

ชื่อรอง

2.4 รูปแบบการฝึกอบรม

โมเดลการฝึกไม่ได้รวมข้อมูลทั้งหมดเข้าด้วยกัน แต่จะส่งเป็นชุด ก่อนที่จะแนะนำรูปแบบการฝึกอบรม จำเป็นต้องมีการชี้แจงแนวคิดหลายประการ:

  • ขนาดชุด(ขนาดแบทช์) หมายถึง จำนวนตัวอย่างในชุด ตัวอย่างต่อไปนี้มีข้อมูลทั้งหมด 24 ข้อมูล หากมีข้อมูล 6 ข้อมูลในแต่ละชุด จำนวนสำนักงานทั้งหมดสามารถแบ่งออกเป็น 4 ชุด

  • คาดหวัง(ยุค) หมายความว่าชุดการฝึกทั้งหมดถูกสำรวจครั้งเดียวโดยอัลกอริธึม เมื่อตั้งค่ายุคเป็น 20 ชุดการฝึกทั้งหมดจะต้องเคลื่อนที่ 20 ครั้งด้วยวิธีที่ต่างกัน ยุคจะต้องผ่านการวนซ้ำ 4 ครั้งเพื่อสำรวจชุดข้อมูลทั้งหมด กล่าวคือ จำนวนตัวอย่างทั้งหมด / ขนาดแบทช์ = 24/6 การวนซ้ำ กระบวนการทำงานของ 20 ยุคแสดงไว้ในภาพด้านล่าง

รูปแบบการฝึกอบรมfit()ฟังก์ชั่นโค้ดจะเป็นดังนี้:

รูปด้านบนแสดงขั้นตอนการฝึกซ้อม ไม่ยากเลยที่จะเห็นว่าชุดฝึกแบ่งออกเป็น 1,563 กอง แต่ละกองมี 32 ภาพ (batch size) หลังจากผ่านไป 10 ยุคฟังก์ชั่นการสูญเสีย(cross-entropy แบบแบ่งประเภท) ลดลงจาก 1.8472 เป็น 1.3696 ในขณะที่ความแม่นยำ(ความแม่นยำ) เพิ่มขึ้นจาก 33.41% เป็น 51.39% . สามารถเข้าถึงแบบจำลองได้ในชุดฝึกอบรม51.39% ชื่อรอง

2.5 แบบประเมินผล

ใช้evaluate()ฟังก์ชั่นขึ้นอยู่กับอัตราความแม่นยำโดยตรง

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

ใช้predict()ฟังก์ชั่นเปรียบเทียบคลาสที่ทำนายและคลาสจริง

ชุดทดสอบมีรูปภาพ 10,000 ภาพ และมี 10 หมวดหมู่ ดังนั้น preds จึงเป็นอาร์เรย์ของ [ 10,000, 10 ] และแต่ละแถวคือความน่าจะเป็นของ 10 หมวดหมู่ที่แบบจำลองทำนายไว้สำหรับรูปภาพที่เกี่ยวข้อง แน่นอนว่า ความน่าจะเป็นทั้งหมด เพิ่มได้ถึง 1 ดูคำทำนายสำหรับภาพแรกในชุดทดสอบ:

y_test ยังเป็นอาร์เรย์ของ [ 10,000, 10 ] แต่ละแถวเป็นหมวดหมู่ที่แท้จริงของรูปภาพที่เกี่ยวข้อง ดังนั้น 10 องค์ประกอบจึงมีศูนย์ 9 ตัวและ 1 หนึ่งตัว ดูหมวดหมู่ที่แท้จริงของภาพแรกในชุดทดสอบ:

ไม่ใช่เรื่องยากที่จะเห็นว่าความน่าจะเป็นของหมวดที่ 4 ในผลการทำนาย preds[0,:] คือสูงสุด 0.38579068 และการทดสอบหมวดหมู่จริง[0.:] คือหมวดที่ 4 (องค์ประกอบที่สี่คือหนึ่ง) ใช้ np.argmax เพื่อค้นหาดัชนีที่สอดคล้องกับค่าสูงสุดจากผลการทำนาย preds[0,:] และการทดสอบหมวดหมู่จริง[0.:] และแมปคำอธิบายหมวดหมู่จาก CLASSES

ภาพแรกในชุดทดสอบคือแมว และโมเดลทำนายแมว ถูกต้องแล้ว!

ลองอันที่สี่อีกครั้ง

ภาพที่สี่ในชุดทดสอบคือเรือ แต่นางแบบทำนายเครื่องบิน ซึ่งคิดผิด!

การแสดงภาพ: วิธีการเปรียบเทียบข้างต้นยุ่งยากเกินไป เราสามารถสุ่มเลือก 10 ภาพจากชุดทดสอบ พิมพ์แต่ละภาพ และวางหมวดหมู่การทำนายแบบจำลองและหมวดหมู่จริงไว้ใต้ภาพ

จะเห็นได้จากภาพเล็กๆ 10 ภาพด้านบนที่โมเดลคาดการณ์ได้ถูกต้อง 5 ภาพ โดยมีอัตราที่ถูกต้องอยู่ที่ 50% ซึ่งสอดคล้องกับสถิติก่อนหน้านี้ที่ 49.52% แม้ว่านี่จะเป็นเพียงแบบจำลองที่เลือกปฏิบัติสำหรับการทำนาย แต่เนื้อหาที่แนะนำในส่วนนี้ (เช่น เลเยอร์ ฟังก์ชันการเปิดใช้งาน เครื่องมือเพิ่มประสิทธิภาพ ฯลฯ) ยังคงนำไปใช้เมื่อเราสร้างแบบจำลองเชิงกำเนิด

ชื่อระดับแรก

3. เครือข่ายประสาทเทียม (CNN)

ชื่อรอง

3.1 แนวคิดพื้นฐาน

สมมุติว่าภาพขนาดใหญ่ปรากฏขึ้นตรงหน้าคุณในความมืด และคุณไม่สามารถมองเห็นได้เหมือนรถยนต์ในความมืด คุณสามารถใช้ไฟฉายสแกนภาพทีละนิด แล้วฉายภาพสิ่งที่คุณเห็นในแต่ละครั้งไปที่ ชั้นถัดมา เป็นต้น ตัวอย่างเช่น คุณสามารถเห็นเส้นแนวนอน เส้นแนวตั้ง และเครื่องหมายทับบนชั้นแรก วงกลมและสี่เหลี่ยมบางส่วนบนชั้นที่สอง ล้อ ประตูและตัวถังบนชั้นที่สาม และรถยนต์บนชั้นที่สี่ วิธีนี้ทำให้คุณสามารถใช้ไฟฉายเพื่อส่องรถยนต์ในภาพถ่ายในความมืดได้

ตัวอย่างข้างต้นเป็นกระบวนการรับรู้รูปภาพโดยโครงข่ายประสาทเทียมแบบหมุนวน ขั้นแรก ให้อธิบายคำจำกัดความบางประการ:

  • กรอง(ตัวกรอง): ปัดผ่านความกว้างและความสูงของข้อมูลที่ป้อน โดยเชื่อมโยงกับข้อมูลที่ป้อน เช่น ไฟฉายในตัวอย่างด้านบน

  • การบิด(การบิด): คำจำกัดความที่นี่คือการคูณ พิกเซลของฟิลเตอร์ ทั้งหมดด้วย พิกเซลของฟิลเตอร์ที่กวาดภาพ แล้วบวกกัน

  • ขนาดขั้นตอน(ก้าวย่าง): ขนาดขั้นตอนของฟิลเตอร์เมื่อเคลื่อนที่ผ่านรูปภาพ ค่าเริ่มต้นคือ 1 กล่าวคือ ฟิลเตอร์จะเลื่อนทีละพิกเซล

  • การกรอก(ช่องว่างภายใน): บางครั้งข้อมูลอินพุตจะถูกเติมด้วย 0 ที่ขอบ ซึ่งสามารถควบคุมขนาดของข้อมูลเอาท์พุตได้ (ที่นิยมใช้กันมากที่สุดคือการรักษาขนาดของข้อมูลเอาท์พุตให้สอดคล้องกับข้อมูลอินพุต)

การบิดตัว

คุณสมบัติที่ใหญ่ที่สุดของโครงข่ายประสาทเทียมแบบหมุนวนคือการดำเนินการแบบหมุนวน เมื่อมองย้อนกลับไปที่คำจำกัดความข้างต้น ให้คูณ พิกเซลของฟิลเตอร์ ด้วย พิกเซลของรูปภาพที่ฟิลเตอร์กวาด แล้วบวกเข้าด้วยกัน ดูสองตัวอย่างต่อไปนี้ โดยสมมติว่าขนาดของฟิลเตอร์คือ 3*3

การบิดของภาพแรกและฟิลเตอร์คือ 0.6*1 + 0.4*1 + 0.6*1 + 0.1*0 + (-0.2)*0 + (-0.3)*0 + (-0.5)*(-1) + (-0.4)*(-1) + (-0.3)*(-1) =2.8 。

การบิดของภาพที่สองและฟิลเตอร์คือ (-0.7)* 1 + 0.6* 1 + 0.2* 1 + 0.1* 0 + 0.5* 0 + (-0.3)* 0 + (-0.3)*(-1) + (-0.4)*(-1) + 0.5*(-1) =-0.1 。

เมื่อค่าการบิดมากขึ้นแค่แสดงว่าฟิลเตอร์และรูปภาพมีมากกว่าจับคู่; เมื่อค่าการบิดตัวสูงขึ้นภาระแสดงว่าฟิลเตอร์และรูปภาพมีมากกว่าไม่ตรงกัน. ค่าการบิดของภาพแรกและตัวกรองในตัวอย่างด้านบนคือ2.8 , ทั้งคู่จับคู่; ค่าการหมุนของรูปภาพที่สองและตัวกรองคือ-0.1 , ทั้งคู่ไม่ตรงกัน。

กรอง

หน้าที่ของตัวกรองคือการกรองนั่นคือกรองข้อมูลบางอย่างออกซึ่งเทียบเท่ากับการแยกข้อมูลที่เก็บไว้ รหัสต่อไปนี้จะสร้างฟิลเตอร์ขนาด 3*3 สองตัว ฟิลเตอร์ 1 สามารถแยกเส้นแนวนอนในภาพ และฟิลเตอร์ 2 สามารถแยกเส้นแนวตั้งในภาพได้ โปรดทราบว่า 1 หมายถึงสีดำ 0 หมายถึงสีเทา และ -1 หมายถึงสีขาว

เรามาดูวิธีการดึงข้อมูลทั้ง 2 ฟิลเตอร์กัน ภาพต้นฉบับมีดังนี้

หาได้ไม่ยากว่าฟิลเตอร์ 1 จะดึงข้อมูลขอบแนวนอนจากรูปภาพ เช่น ขอบบนและล่างของปากถ้วย

หาได้ไม่ยากว่าฟิลเตอร์ 2 จะดึงข้อมูลขอบแนวตั้งออกจากภาพ เช่น ขอบซ้ายและขวาของปากถ้วย

ด้วยการเพิ่มตัวกรอง เราสามารถสร้างได้ชั้นบิด(ชั้น Convoluational) โดยพื้นฐานแล้วเลเยอร์แบบหมุนวนนั้นเป็นชุดของตัวกรอง ในตัวอย่างด้านล่าง ตัวเลขคือ 2 และค่าองค์ประกอบในตัวกรองเรียกว่าตุ้มน้ำหนักซึ่งเรียนรู้จากการฝึกอบรม CNN

ใช้ในเกะระlayers.Con v 2 D() เพื่อสร้างเลเยอร์แบบหมุนวน ที่นี่ภาพถ่ายขาวดำคือ 64* 64* 1 (มีเพียง 1 ช่องสี) และมีฟิลเตอร์สองตัว (ตั้งค่าฟิลเตอร์พารามิเตอร์เป็น 2) และขนาดฟิลเตอร์คือ 3* 3 (ตั้งค่าพารามิเตอร์ kernel_size ถึง (3, 3))

พารามิเตอร์สองตัวที่ก้าวย่างและช่องว่างภายในคืออะไร?

ความยาวขั้นตอน

ขนาดขั้นตอนคือจำนวนพิกเซลที่ตัวกรองเคลื่อนที่เมื่อเคลื่อนที่ผ่านรูปภาพ ค่าเริ่มต้นคือ 1 ซึ่งหมายความว่าตัวกรองจะย้ายทีละพิกเซล เมื่อก้าวเป็น 2 ไม่ใช่เรื่องยากที่จะจินตนาการว่าขนาดภาพที่ส่งออกจะมีขนาดเพียงครึ่งหนึ่งของภาพที่นำเข้า

การขยายความ

การเสริมตามชื่อคือการเพิ่มองค์ประกอบรอบๆ รูปภาพ เมื่อเติม ="same"เมื่อก้าว = 1 จะสามารถมั่นใจได้ว่าภาพที่ส่งออกจะมีขนาดเท่ากับภาพที่นำเข้า ขนาดภาพที่ป้อนเข้าในรูปด้านล่างคือ 5*5 (ภาพสีฟ้า) หลังจากเติมแล้ว ขนาดภาพจะกลายเป็น 7*7 (ภาพสีขาว) ขนาดฟิลเตอร์คือ 3*3 (สีเทา) และขนาดภาพที่ส่งออกยังคงอยู่ที่ 5 *5 (ภาพสีเขียว)

ชื่อรอง

3.2 เลเยอร์ Convolutional ที่ต่อกัน

ดูโค้ดก่อน:

รหัสด้านบนสอดคล้องกับภาพด้านล่าง

ขนาดของเอาต์พุตของแต่ละเลเยอร์การบิดด้านบนนั้นน่าทึ่งมาก ถ้าคุณใช้ nI แสดงถึงขนาดของภาพที่นำเข้าf หมายถึงขนาดของตัวกรองsหมายถึงขนาดขั้นตอนpหมายถึงจำนวนชั้นเติมnOแสดงถึงขนาดของภาพที่นำเข้าแล้วมีความสัมพันธ์ดังต่อไปนี้:

ใช้สูตรนี้เพื่อตรวจสอบความกว้างและความสูงของเอาต์พุตของเลเยอร์การบิดที่หนึ่งและที่สอง:

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

ตรวจสอบรุ่น

โมเดลจะมีชื่อว่า model โดยอัตโนมัติ ตามด้วยตารางที่อธิบายประเภทชื่อ (เลเยอร์ (ประเภท)) รูปร่างเอาต์พุต (รูปร่างเอาต์พุต) และจำนวนพารามิเตอร์ (Param #) ของแต่ละเลเยอร์ มาดูกันทีละชั้นครับ

  • เลเยอร์ InputLayer มีชื่อว่า input_ 1 และรูปร่างเอาต์พุตคือ [None, 32, 32, 3 ] องค์ประกอบสามรายการสุดท้ายสอดคล้องกับความกว้าง ความสูง และช่องสีของภาพ องค์ประกอบแรก None แสดงถึงจำนวนตัวอย่างจริง ๆ อย่างเคร่งครัดยิ่งขึ้น พูดก็คือ จำนวนตัวอย่างในชุด เพื่อความกระชับของโค้ด โดยปกติแล้วหมายเลขตัวอย่างนี้ไม่จำเป็นต้องเขียนอย่างชัดเจนเมื่อสร้างโมเดล

  • เลเยอร์ Con v 2 D แรกชื่อ con v 2 d รูปร่างเอาต์พุตคือ [None, 16, 16, 10 ] พารามิเตอร์ 490 = ( 4* 4* 3 + 1) * 10 ก่อนอื่นเลย ลืมที่จะมีอคติ ถัดไป 4* 4 คือขนาดของฟิลเตอร์ และ 3 คือจำนวนช่องสีอินพุต ดังนั้นเราจึงต้องใช้น้ำหนัก 4* 4* 3 เพื่ออธิบายแต่ละฟิลเตอร์ และมีทั้งหมด 10 อัน



  • เลเยอร์ Con v 2 D ที่สองชื่อ con v 2 d_ 1 รูปร่างเอาต์พุตคือ [None, 8, 8, 20 ] พารามิเตอร์ 1, 820 = ( 3* 3* 10 + 1) * 20 ก่อนอื่นให้พิจารณา เหมือนกัน หน่วยอคติตามด้วย 3* 3 คือขนาดของตัวกรอง และ 10 คือจำนวนช่องสีอินพุต ดังนั้นเราจึงต้องใช้น้ำหนัก 3* 3* 10 เพื่ออธิบายตัวกรองนี้ รวมเป็น 20


  • เลเยอร์ที่ราบเรียบมีชื่อว่าราบเรียบ 1, 280 คือจำนวน 8* 8* 20 หลังจากการราบเรียบ และจำนวนพารามิเตอร์คือ 0 เนื่องจากการราบเรียบเป็นเพียงการปรับรูปร่างอาร์เรย์ใหม่ และไม่จำเป็นต้องใช้พารามิเตอร์ใดๆ เพื่อดำเนินการปรับรูปร่างใหม่ให้เสร็จสมบูรณ์


  • เลเยอร์ Dense สุดท้ายมีชื่อว่า Dense รูปร่างเอาต์พุตคือ 10 พารามิเตอร์ 12, 810 = (1280 + 1) * 10 ให้พิจารณาหน่วยอคติด้วย

ที่ด้านล่าง พารามิเตอร์ทั้งหมด (พารามิเตอร์ทั้งหมด) 15, 120 พารามิเตอร์ที่สามารถฝึกได้ (พารามิเตอร์ที่สามารถฝึกได้) 15, 120 และพารามิเตอร์ที่ไม่สามารถฝึกได้ (พารามิเตอร์ที่ไม่สามารถฝึกได้) 0 จะถูกแสดงรายการด้วย

ณ จุดนี้ โดยพื้นฐานแล้ว CNN ได้ถูกสร้างขึ้น และเราได้เพิ่มเทคนิคอีกสองประการเพื่อทำให้ CNN ทำงานได้ดีขึ้น:การทำให้เป็นมาตรฐานแบบแบตช์(การทำให้เป็นมาตรฐานแบบแบตช์) และชื่อรอง (dropout)。

3.3 การทำให้เป็นมาตรฐานแบบแบตช์

เมื่อฝึก CNN กุญแจสู่ความสำเร็จของโมเดลคือต้องแน่ใจว่าตุ้มน้ำหนักยังอยู่ในช่วงที่กำหนด มิฉะนั้นจะเกิดการไล่ระดับสีแบบระเบิด การทำให้เป็นมาตรฐานแบบแบทช์สามารถแก้ปัญหานี้ได้ โดยจะคำนวณข้อมูลตามแบทช์ (มินิแบทช์) ในแต่ละเลเยอร์เฉลี่ย(หมายถึง) และส่วนเบี่ยงเบนมาตรฐาน(ค่าเบี่ยงเบนมาตรฐาน) แล้วลบค่าเฉลี่ยหารด้วยค่าเบี่ยงเบนมาตรฐานในแต่ละข้อมูล ในการ กู้คืน ข้อมูล เราจำเป็นต้อง เรียนรู้ พารามิเตอร์สองตัว นั่นคือพารามิเตอร์การปรับขนาดγและพารามิเตอร์การแปลβ。

อัลกอริธึมการทำให้เป็นมาตรฐานแบบแบตช์มีดังนี้:

BatchNormalization() ใช้ใน Keras เพื่อให้เกิดการทำให้เป็นมาตรฐานแบบแบตช์ โดยทั่วไปชั้นการทำให้เป็นมาตรฐานแบบแบทช์จะถูกวางไว้หลังชั้นหนาแน่นหรือชั้นแบบม้วน

ชื่อรอง

3.4 การปิดใช้งานแบบสุ่ม

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

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

ในระหว่างกระบวนการทำนาย เซลล์ประสาทจะไม่ถูกปิดใช้งาน ดังนั้นจึงใช้โครงข่ายประสาทเทียมที่สมบูรณ์ในการคาดการณ์

ใช้ในเกะระDropout()เพื่อรับรู้ถึงชั้นการปิดใช้งาน โดยทั่วไปชั้นปิดการใช้งานจะวางอยู่หลังชั้นที่มีความหนาแน่นสูง

ชื่อรอง

3.5 โมเดลที่สมบูรณ์

ตอนนี้เราสามารถเพิ่มเลเยอร์การทำให้เป็นมาตรฐานแบบแบตช์และเลเยอร์การปิดการใช้งานให้กับ CNN ก่อนหน้าเพื่อปรับปรุงโมเดลได้

ดูว่าโค้ดด้านบนเข้าใจง่ายหรือไม่ CNN มีเลเยอร์ Convolutional สี่เลเยอร์ แต่ละเลเยอร์ตามด้วยเลเยอร์ Normalization แบบแบตช์และเลเยอร์ LeakyReLu โปรดทราบว่าทุกอย่างใน Keras สามารถใช้เป็นเลเยอร์ได้ แม้แต่ฟังก์ชั่นการเปิดใช้งานก็สามารถนำมาใช้ในรูปแบบของเลเยอร์ได้ จากนั้นใช้เลเยอร์ที่ราบเรียบเพื่อทำให้ข้อมูลราบเรียบ จากนั้นใช้เลเยอร์หนาแน่น เลเยอร์การทำให้เป็นมาตรฐานแบบแบตช์ เลเยอร์ LeakyReLu เลเยอร์การปิดใช้งาน และเลเยอร์ที่มีความหนาแน่น และสุดท้ายใช้ softmax เพื่อส่งออกในรูปแบบของความน่าจะเป็น

ลองดูโมเดล CNN ที่ได้รับการปรับปรุงนี้

เราพบว่าเลเยอร์การเปิดใช้งานไม่มีพารามิเตอร์เนื่องจากเป็นการเปลี่ยนแปลง เลเยอร์ที่ราบเรียบและเลเยอร์การเปิดใช้งานไม่มีพารามิเตอร์ซึ่งเข้าใจได้ง่ายเช่นกัน สำหรับปริมาตรพารามิเตอร์ของเลเยอร์ convolutional และเลเยอร์หนาแน่น มีการอธิบายอัลกอริทึมไว้ก่อนหน้านี้แล้ว สำหรับการทำให้เป็นมาตรฐานแบบแบตช์ จำเป็นต้องเรียนรู้พารามิเตอร์การปรับขนาดสำหรับแต่ละช่องสัญญาณγและพารามิเตอร์การแปลβและค่าเฉลี่ยเคลื่อนที่และค่าเบี่ยงเบนมาตรฐานเคลื่อนที่ เพื่อให้พารามิเตอร์ที่รวมไว้เท่ากับจำนวนช่องสัญญาณ * 4

ชื่อรอง

3.6 การประเมินผลการฝึกอบรม

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

เมื่อเปรียบเทียบกับโครงข่ายประสาทเทียมแบบหมุนวน (CNN) ในปัจจุบันและโครงข่ายประสาทเทียมแบบป้อนล่วงหน้า (FNN) ก่อนหน้านี้ ความแม่นยำของโมเดลที่มีอยู่ในชุดการฝึกเพิ่มขึ้นจาก 51.39% เป็น 76.99% และความแม่นยำในชุดการฝึกก็เพิ่มขึ้นจาก 49.52% สูงถึง 71.70% ประสิทธิภาพของโมเดลได้รับการปรับปรุงอย่างมาก

น่าประหลาดใจที่พารามิเตอร์ของ CNN (592, 554) จริงๆ แล้วน้อยกว่าพารามิเตอร์ของ FNN (646, 260) มาก แต่ประสิทธิภาพของโมเดลได้รับการปรับปรุงอย่างมาก และการปรับปรุงนี้จำเป็นต้องเปลี่ยนสถาปัตยกรรมโมเดลเพื่อรวมเลเยอร์แบบ Convolutional เท่านั้น แบทช์ สามารถรับรู้ได้โดยการทำให้เลเยอร์หนึ่งเป็นมาตรฐานและปิดการใช้งานเลเยอร์ แม้ว่า CNN จะมีพารามิเตอร์น้อยกว่า FNN แต่จำนวนเลเยอร์นั้นมากกว่ามาก ซึ่งเป็นเหตุผลว่าทำไมข้อดีของโครงข่ายประสาทเทียมระดับลึก เนื่องจากเลเยอร์กลางของเครือข่ายจับคุณลักษณะระดับสูงที่เราสนใจมากที่สุด

สรุป

สรุป

บทความนี้แนะนำแนวคิดหลักของการเรียนรู้เชิงลึกที่จำเป็นในการเริ่มสร้างแบบจำลองเชิงลึก ใช้ Keras เพื่อสร้าง feed-forward neural network (FNN) และฝึกฝนโมเดลเพื่อทำนายคลาสของรูปภาพที่กำหนดในชุดข้อมูล CIFAR-10 จากนั้นเราจะปรับปรุงสถาปัตยกรรมนี้โดยการแนะนำเลเยอร์แบบหมุนวน เลเยอร์การทำให้เป็นมาตรฐานแบบแบทช์ และเลเยอร์การปิดใช้งานเพื่อสร้างโครงข่ายประสาทเทียมแบบหมุนวน (CNN)

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

คุณสามารถค้นหา SignalPlus ใน Plugin Store ของ ChatGPT 4.0 เพื่อรับข้อมูลการเข้ารหัสแบบเรียลไทม์ หากคุณต้องการรับข้อมูลอัปเดตของเราทันที โปรดติดตามบัญชี Twitter ของเรา @SignalPlus_Web 3 หรือเข้าร่วมกลุ่ม WeChat ของเรา (เพิ่มผู้ช่วยตัวน้อย WeChat: chillywzq) กลุ่ม Telegram และชุมชน Discord เพื่อสื่อสารและโต้ตอบกับเพื่อน ๆ มากขึ้น

คุณสามารถค้นหา SignalPlus ใน Plugin Store ของ ChatGPT 4.0 เพื่อรับข้อมูลการเข้ารหัสแบบเรียลไทม์ หากคุณต้องการรับข้อมูลอัปเดตของเราทันที โปรดติดตามบัญชี Twitter ของเรา @SignalPlus_Web 3 หรือเข้าร่วมกลุ่ม WeChat ของเรา (เพิ่มผู้ช่วยตัวน้อย WeChat: chillywzq) กลุ่ม Telegram และชุมชน Discord เพื่อสื่อสารและโต้ตอบกับเพื่อน ๆ มากขึ้น

SignalPlus Official Website: https://www.signalplus.com

AI
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
คลังบทความของผู้เขียน
SignalPlus
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android