CNN คืออะไร? 

โครงข่าย CNN ที่ประกอบด้วย Convolutional Layers, ReLU, Pooling, Fully Connected, Dropout
โครงข่าย Convolution Neural Network (CNN) 
Convolutional Neural Network (CNN) หรือเครือข่ายประสาทเทียมแบบคอนโวลูชัน

 Convolutional Neural Network (CNN) เป็นเทคนิคใน  Deep Learning (DL) ที่ใช้ในการประมวลผลข้อมูลที่มีโครงสร้าง เช่น ภาพและวิดีโอ โดย CNN เป็นส่วนหนึ่งของ Machine Learning ที่เน้นการเรียนรู้จากข้อมูลเพื่อทำนายผลหรือจำแนกประเภท ในขณะที่ Deep Learning เป็นสาขาหนึ่งของ Machine Learning ที่ใช้โครงข่ายประสาทเทียม (Artificial Neural Networks)  ที่มีหลายชั้น (Deep Networks) เพื่อเรียนรู้และทำความเข้าใจลักษณะข้อมูลที่ซับซ้อน โดย CNN ถูกพัฒนาเพื่อทำให้การประมวลผลภาพและข้อมูลเชิงพื้นที่มีประสิทธิภาพมากขึ้น

Convolutional Neural Network (CNN) หรือเรียกว่า เครือข่ายประสาทเทียมแบบคอนโวลูชัน ซึ่งถูกออกแบบมาเพื่อการประมวลผลข้อมูลที่มีโครงสร้างแบบ 2 มิติ เช่น รูปภาพ หรือข้อมูลสัญญาณที่จัดเรียงในลักษณะคล้ายรูปภาพ เช่น สัญญาณเสียง หรือวิดีโอ เป็นต้น โดย CNN มีโครงสร้าง ดังนี้
  1. Convolution Layer ใช้ฟิลเตอร์หรือเคอร์เนล (kernel) ขนาดเล็กเลื่อนผ่านข้อมูลอินพุต (เช่น ภาพ) เพื่อคำนวณคุณสมบัติ (features) ที่สำคัญ ชั้นนี้จะช่วยลดความซับซ้อนของการประมวลผลภาพโดยไม่สูญเสียข้อมูลสำคัญ จะได้ผลลัพธ์ที่ได้เรียกว่า "feature map"
  2. Pooling Layer เป็นชั้นที่ทำหน้าที่ในการลดขนาดของข้อมูล (down-sampling) เพื่อทำให้การคำนวณมีประสิทธิภาพมากขึ้น และลดการ overfitting ตัวอย่างของ pooling ได้แก่ Max Pooling (เลือกค่ามากที่สุดในพื้นที่เล็กๆ) และ Average Pooling (ค่าเฉลี่ย)
  3. Activation Function จะใช้ฟังก์ชันไม่เชิงเส้น เช่น ReLU (Rectified Linear Unit) เพื่อเพิ่มความสามารถในการเรียนรู้ลักษณะเชิงซับซ้อน
  4. Fully Connected Layer เป็นชั้นที่เชื่อมต่อโครงข่ายทั้งหมด ใช้สำหรับการจำแนกประเภท (classification) หรือการคาดการณ์ผลลัพธ์
  5. Dropout Layer ใช้ลด overfitting โดยสุ่มปิดบางหน่วยในโครงข่ายระหว่างการฝึก

ตัวอย่างการใช้ CNN

import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam

# โหลดข้อมูล MNIST
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)

# แปลงค่าพิกเซลให้อยู่ในช่วง [0, 1]
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0

# จำนวนคลาส (ใน MNIST มี 10 คลาส คือ 0-9)
num_classes = 10

# แปลง Label
y_train = to_categorical(y_train, num_classes)
y_test = to_categorical(y_test, num_classes)

# Build and compile model
model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(x_train.shape[1], x_train.shape[2])))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
model.add(Dense(10, activation='softmax', name='Output'))

model.compile(optimizer=Adam(learning_rate=0.001),
              loss='categorical_crossentropy',  # ใช้ categorical_crossentropy แทน sparse_categorical_crossentropy เพราะ label เป็น one-hot
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10, batch_size=200, validation_data=(x_test, y_test))

score = model.evaluate(x_test, y_test)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

การทำงานของ CNN

  1. รับข้อมูลอินพุตเข้ามาในโมเดล เช่น ภาพขนาด 28x28 พิกเซล
  2. ผ่านชั้นคอนโวลูชัน เพื่อทำการสกัดคุณสมบัติที่สำคัญ เช่น รูปแบบ หรือโครงสร้างเฉพาะในภาพ
  3. ลดขนาดข้อมูลผ่านการ Pooling เพื่อรักษาคุณสมบัติสำคัญ
  4. แปลงข้อมูลเพื่อเชื่อมกันทุกชั้นโดย Fully Connected Layer
  5. โมเดลสำหรับนำไปทำนาย

สรุป 

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


อ้างอิง
Convolutional Neural Networks (CNN): สร้าง Model เพื่อทำ Image Classification ด้วย TensorFlow ,[ออนไลน์], เข้าถึงได้จาก https://medium.com/@app.kkloft/convolutional-neural-networks-cnn-สร้าง-model-เพื่อทำ-image-classification-ด้วย-tensorflow-58173661cfeb
Image Classification ด้วย Convolutional Neural Network (CNN) บน TensorFlow และ Streamlit ,[ออนไลน์], เข้าถึงได้จาก https://medium.com/@arkrapong.char/image-classification-ด้วย-convolutional-neural-network-cnn-บน-tensorflow-และ-streamlit-9d7d33f8aa14
สร้างโมเดล Deep learnning: CNN. ง่ายๆ สำหรับการจำแนกรูปภาพ ,[ออนไลน์], เข้าถึงได้จาก https://witscodes.wordpress.com/2020/01/26/สร้างโมเดล-deep-learning-cnn-convnet/
 
กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
Q - แก้ขนาดรูปภาพแสดงเท่ากันเฉพาะบางขนาดยังไงครับ
โดย Sakana พ 09 ก.ค. 2025 2:51 pm บอร์ด Programming - PHP
1
31
พ 09 ก.ค. 2025 3:28 pm โดย Sakana View Topic Q - แก้ขนาดรูปภาพแสดงเท่ากันเฉพาะบางขนาดยังไงครับ
วิธีแก้ไขรับโปรเจค Online Tools ที่รับมาต่อจากคนอื่น แล้ว UI ไม่เหมือนเดโม้
โดย Sakana อ 08 ก.ค. 2025 4:40 pm บอร์ด PHP Knowledge
0
38
อ 08 ก.ค. 2025 4:40 pm โดย Sakana View Topic วิธีแก้ไขรับโปรเจค Online Tools ที่รับมาต่อจากคนอื่น แล้ว UI ไม่เหมือนเดโม้
สอบถามเชื่อม MDRental กับ openERP ถ้าใช้ create มี Error
โดย eange08 อ 08 ก.ค. 2025 1:39 pm บอร์ด Joomla Dev
9
26
อ 08 ก.ค. 2025 7:14 pm โดย eange08 View Topic สอบถามเชื่อม MDRental กับ openERP ถ้าใช้ create มี Error
สอบถามฟิจเจอร์ขำระเงิน QR Code ของ E-Payment ในใบแจ้งหนี้ [MDRental]
โดย eange08 จ 07 ก.ค. 2025 1:11 pm บอร์ด Joomla Dev
5
19
จ 07 ก.ค. 2025 3:10 pm โดย tsukasaz View Topic สอบถามฟิจเจอร์ขำระเงิน QR Code ของ E-Payment ในใบแจ้งหนี้ [MDRental]
Falsy ใน Python คืออ่ะไร
โดย Sakana ศ 04 ก.ค. 2025 4:41 pm บอร์ด Python Knowledge
0
69
ศ 04 ก.ค. 2025 4:41 pm โดย Sakana View Topic Falsy ใน Python คืออ่ะไร
Python ใช้ count() แทน for loop ในการนับจำนวน
โดย Sakana พฤ 03 ก.ค. 2025 6:30 pm บอร์ด Python Knowledge
0
78
พฤ 03 ก.ค. 2025 6:30 pm โดย Sakana View Topic Python ใช้ count() แทน for loop ในการนับจำนวน
การจัดการข้อมูล Python ด้วย filter() + reduce()
โดย Sakana พฤ 03 ก.ค. 2025 5:52 pm บอร์ด Python Knowledge
0
69
พฤ 03 ก.ค. 2025 5:52 pm โดย Sakana View Topic การจัดการข้อมูล Python ด้วย filter() + reduce()
itertools จัดการข้อมูลวนซ้ำอย่างมีประสิทธิภาพใน Python
โดย Sakana พ 02 ก.ค. 2025 4:31 pm บอร์ด Python Knowledge
0
77
พ 02 ก.ค. 2025 4:31 pm โดย Sakana View Topic itertools จัดการข้อมูลวนซ้ำอย่างมีประสิทธิภาพใน Python