📚📖งาน .Workshop W11📖📚
- ให้นักศึกษาอธิบายที่มาของจำนวน paramerter และขนาดของภาพที่ออกจาก Model(outputที่ได้) ทุกแบบให้เข้าใจมีที่มาที่ไปอย่างไร พร้อมอธิบาย
- ให้นักศึกษาเพิ่มจำนวนภาพสำหรับ 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
จากภาพที่เราทำการใส่ภาพแมวเข้าไป
สร้าง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 แผ่น
คำนวณ
จากรูป ภาพแมวมี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