Introduction to Deep Learning CNN #2

boom626
5 min readOct 12, 2019

--

subject:AI for IT (520341–2560) Date: 10/10/2019

📚📖งาน .Workshop W11📖📚

  1. ให้นักศึกษาอธิบายที่มาของจำนวน paramerter และขนาดของภาพที่ออกจาก Model(outputที่ได้) ทุกแบบให้เข้าใจมีที่มาที่ไปอย่างไร พร้อมอธิบาย
  2. ให้นักศึกษาเพิ่มจำนวนภาพสำหรับ Train/Test Model เพื่อทำนายว่าเป็นภาพแมวหรือไม่ใช่ภาพแมว จำนวน Class ละไม่น้อยกว่า 100 รูป โดยแบ่ง Train 80% Test 20% พร้อมอธิบาย

เรียน🤨

**เนื่องจากจะทำให้ Story could not be saved because it exceeds the maximum length. จึงแยก เป็น #1 ไว้

อธิบาย🤨

อธิบายที่มาของจำนวน paramerter และขนาดของภาพที่ออกจาก Model ทุกแบบให้เข้าใจ

Visualizing CNN

จากภาพที่เราทำการใส่ภาพแมวเข้าไป

มี320แถว 400คอลัมม์ 3channel, ,shape = 320 , 400 , 3; คือ สูง , กว้าง , สีR,G,B

สร้างneural network ที่มีชั้นconvolแบบ2มิติ 1ชั้น ซึ่งมีแผ่น kernelขนาด3*3 โดยแต่ละchannelมีkernel 3แผ่น บอกลักษณะด้วยฟังก์ชั่น model.add ตัว input_shape

โดย inputของcatคือ 320 * 400 (cat.shape)

ซึ่งภาพแมวมี3 channel มี kernel 1 แผ่น โดยในmodelกำหนดให้มี kernel 3แผ่นoutputออกมาของแต่ละchannel 3 แผ่น นำoutputของแต่ละchannel มาบวกกันได้รวม 3 แผ่น

จำนวน w (parameter) ทั้งหมด

คำนวณ

จากรูป ภาพแมวมีchannelที่มีขนาด320*400= 3 channel มีkernelขนาด3*3 แต่ละchannel มีkernel = 3แผ่น นำkernelไปทาบ slide บนแต่ละchannel ชนขอบก็หยุด แบบไม่Pad ได้output ขนาด318*398 ในแต่ละchannel ได้ 3 แผ่น รวม9แผ่น แล้วนำทั้งหมดมาบวกกันก็ได้ภาพขนาด 318*398 ทั้งหมด 3 แผ่น

จะได้ว่า จำนวน parameter ทั้งหมด 84 มาจาก…3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*3(จำนวนchannel) =81 แล้วบวกค่าbias +3 =84

key : bias 1 เม็ด ต่อ 1 ชั้น =เวลาบวกกันในแต่ละชั้นจะบวก1เม็ดลงไป

นำภาพแมวเข้าmodel ซึ่งmodelของเรามีแค่ชั้นเดียวคือcnn เวลาใส่ข้อมูลเข้าmodelจะใส่เป็นชุดใส่เข้าไปหลายภาพ(ทำเป็นbatch=ชุดของภาพ) แต่เรามีภาพแค่ภาพเดียว ก็ทำการขยายมิติขึ้นมาอีก1มิติก่อนเข้าmodel ทำชุดละ1ภาพ(เพราะมีภาพเดียว) นำภาพที่ขยายมิติไปทำการpredict ได้output แล้ว showภาพผ่านcnn โดยต้องหดกลับเพราะเราจะshowที่ละภาพ ไม่ใช่ที่ละหลายภาพ

** weight แต่ละครั้งถูกสุ่มไม่เท่ากัน มีโอกาศที่สีจะเปลี่ยนแปลงได้

ลองทำการปรับขนาดแผ่น kernelจากขนาด3*3 เป็น kernelขนาด10*10

จะได้ outputที่มีขนาดภาพน้อยลงจากเดิมเป็นขนาด318*398 เหลือขนาด311*391

จำนวน parameter ทั้งหมด 903 มาจาก …10*10 (kernel)*3(จำนวนkernelในแต่ละchannel)*3(จำนวนchannel) =900 แล้วบวกค่าbias +3 =903

ลองทำการลดcannelจาก3แผ่นเหลือ1แผ่น ให้outputสุดทท้ายเหลือ 1 channel

จึงต้องทำการปรับฟังก์ชั่นในการแสดง จะได้ภาพออกมาดีขึ้นเพราะลดchannel outputออกมา 1

จำนวน parameter ทั้งหมด 28มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*1(จำนวนchannel) =27 แล้วบวกค่าbias +1 =28

ลองปรับchannelเป็นขนาด 15*15

สังเกตว่าจะไม่ได้เรื่องความระเอียดของภาพ เนื่องจากเอาแผ่นใหญ่ไปทาบ ไปคูณ บวกกัน แต่จะได้ feature(คุณลักษณะของภาพ)

จำนวน parameter ทั้งหมด 676 มาจาก …15*15 (kernel)*3(จำนวนkernelในแต่ละchannel)*1(จำนวนchannel output) =676 แล้วบวกค่าbias +1 =676

เวลาเอาเข้าmodelจะต้องผ่านฟังก์ชัน ตัวActivation Functionด้วย ซึ่งมีหลายตัว เช่น sigmoid(ใสค่าบวกค่าลบไปแล้วสุดท้ายoutputที่ออกมาจากฟังก์ชั่นคือ ค่าตั้งแต่ 0–1 เท่านั้น) ,ReLU(ถ้าค่าเป็นลบได้ouput 0 แต่ถ้าบวกเอาค่าเดิมของมัน)

Add a relu activation

ใส่ Activation Function :ReLU

แมวที่ได้ สีจะออกม่วงๆ คือกรองเอาค่าลบออก

จำนวน parameter ทั้งหมด 28มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*1(จำนวนchannel) =27 แล้วบวกค่าbias +1 =28

ใส่ filterในแต่ละchannel จำนวน3 แผ่น

จำนวน parameter ทั้งหมด 84มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*3(จำนวนchannel) =81แล้วบวกค่าbias +3 =84

มีอยู่หลายวิธีในการทำ pool อย่างเช่น average pool,max pool

Max Pooling

คือการยุบรวม โดยปกติไม่ทำการ slide จะทาบหาค่ามากที่สุด จากรูปได้ 20 30 34 37 ยุบกลายเป็นภาพเล็ก

ภาพที่ได้มีความละเอียดต่ำลง เนื่องจากทำการยุบรวมจากpixel 5*5 ให้เหลือ 1 pixel

จำนวน parameter ทั้งหมด 28มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*1(จำนวนchannel) =27 แล้วบวกค่าbias +1 =28

รูปนี้channelที่เป็นoutputคือ 3

ใส่max pool 5*5 เหลือขนาด 63*79 เพราะผ่านชั้น convol ชั้นcnnเข้ามาเหลือ318*398 เอาแผ่น5*5ทาบเข้าไปทำmax pool เหลือ1

คือ 318/5=63 (เศษปัดทิ้งไม่สนใจ) ,398/5=79 เพราะงั้นภาพสุดท้ายคือภาพขนาด 63*79

ประโยชน์ของ max pool คือทำให้modelเล็กลง เร็ว ประหยัด แม่นขึ้น เพราะเอาส่วนรายละเอียดออกจาก5*5เหลือ 1 เหมือนเป็นภาพสรุปของแมว ว่าแมวทุกตัวจะมีหน้าตาประมาณนี้ทั้งหมด ไม่ว่าแมวจะแตกต่างมันก็บอกว่าเป็นแมว

จำนวน parameter ทั้งหมด 84มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*3(จำนวนchannel) =81แล้วบวกค่าbias +3 =84

เอา Activation and max pooling ผสมกัน

max pool เหมือนเดิม รูปนี้channelที่เป็นoutputคือ 1 ขนาดภาพเล็กลง ใส่Activate ReLU

จำนวน parameter ทั้งหมด 28มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*1(จำนวนchannel) =27 แล้วบวกค่าbias +1 =28

max pool เหมือนเดิม รูปนี้channelที่เป็นoutputคือ 3ขนาดภาพเล็กลง ใส่Activate ReLU

รุปนี้ทำการเพิ่ม feature

จำนวน parameter ทั้งหมด 84มาจาก …3*3 (kernel)*3(จำนวนkernelในแต่ละchannel)*3(จำนวนchannel) =81แล้วบวกค่าbias +3 =84

ลองทำหลายชั้น 2convol , 2activate ,2 max pool

มีอย่างละ2ชุด มีoutput channel 1

มีอย่างละ2ชุด มีoutput channel 3

มาทำการประกอบกันเพื่อทำclassifier model…

Simple Classifier Model

จาก modelด้านบน มาclassifier model ว่าเป็นแมวหรือไม่เป็นแมว ลองใช้ optimizer: adam

แบ่งคลาส โดยoutputจะออกมาแค่ 1 node ,Activate : sigmoid เพราะว่าเราต้องการให้ออกค่า 0 หรือ 1 (0=ไม่ใช่แมว , 1=แมว) และวัดaccuracy จะได้ชั้นั้งหมดที่เราสร้างขึ้นมามี convol ,activation ,max pool ,dropout ,flatten ,dense

พอได้max pool มาแล้วเอาทั้งหมดมาขยายยืดให้เป็นเส้นเดียวกัน แบบข้อมูล1มิติ แล้วต่อด้วย dense แต่outputมีแค่ 1 คือแมวหรือไม่แมว เพราะงั้นที่ทำเป็น 1มิติก็จะเชื่อมต่อกับoutputแค่ตัวเดียว ทุกเส้นเชื่อม=denseเชื่อมแค่node output เดียว

flattenได้parameter 10140 มาจากmax pool ,dropout คือจะได้ภาพขนาด 52*65 ทั้งหมด3แผ่นแล้วจับยืดได้เส้น1มิติยาว 10140 จุด แล้วชั้นสุดท้ายอีก1 ตัวdenseจึงมี10141

กำหนด batch size (มีแค่ภาพเดียว),epoch(จำนวนรอบท่องไปจนครบทั้งหมดกี่ครั้ง),x_train(เนื่องจากมีแค่ภาพเดียวต้องขยายให้เป็นชุดของภาพ),y_tain(ต้องบอกมันว่าเป็นแมวหรือไม่ใช่แมว 0=ไม่ใช่แมว , 1=แมว โดยทำเป็นชุดเหมือนกัน)

จะกลายเป็นภาพ1ภาพที่บอกว่าเป็นแมวหรือไม่ใช่แมว

Work🤨

ให้นักศึกษาเพิ่มจำนวนภาพสำหรับ Train/Test Model เพื่อทำนายว่าเป็นภาพแมวหรือไม่ใช่ภาพแมว จำนวน Class ละไม่้อยกว่า 100 รูป โดยแบ่ง Train 80% Test 20% พร้อมอธิบาย

เริ่มจากทำการเตียมข้อมูลภาพจำนวน200ภาพ ที่มีขนาดเท่ากันเพราะภาพที่จะเข้าmodelต้องขนาดเท่ากันด้วย

สุ่ม ให้รูปปนกัน…

ถ้ารูปไม่เท่ากันสามารภใช้ ฟังก์ชัน cv2.resize จัดการ หรือจะใช้ทำการปรับขนาดรูปได้ตามต้องการเช่น จากชุดรูปที่มี320*400 ลดเหลือ 32*32 เป็นต้น

ทำNormalizationจะทำก็ได้จะแม่นยำขึ้นทำให้เป็น1 คือหาร255 ซึ่งchannelรูปมีค่าmaxสุด เป็น255.0 จะได้ออกมาเป็นทศนิยม

ทำการแบ่งclasses ในที่นี้ให้ 0=cat ,1=notcat (มีเวลาจะกกลับมาแก้ให้เป็นแบบปกติค่ะ)

ต่อด้วยเอาข้อมูลภาพเข้า model โดยแบ่งเป็นTrain 80% Test 20%

สรุปmodelคร่าวๆดู

ทำการcompile model โดยกำหนด parameter ดังต่อไปนี้ แล้ว train

ทำการpredictข้อมูลtest

Accuracy ได้ดังนี้

😱😱😱😱

(ไม่แน่ใจทำผิดไรป่าว มันหลอกตาเกินไปค่ะ 55555 ไว้มีเวลาจะกลับมาแก้ไข^^)

ทั้งหมดนี้คือเพื่อการศึกษาแต่เพียงเท่านั้น…

นางสาวธารารัตน์ ชุ่มบุญชู 07600626

--

--