<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: 22</title>
    <description>The latest articles on Forem by 22 (@zylinn_0cae881f240bcde0a3).</description>
    <link>https://forem.com/zylinn_0cae881f240bcde0a3</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3026374%2Fe0e988b1-1a0d-4931-81fa-2cdeed4c6c2a.jpeg</url>
      <title>Forem: 22</title>
      <link>https://forem.com/zylinn_0cae881f240bcde0a3</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zylinn_0cae881f240bcde0a3"/>
    <language>en</language>
    <item>
      <title>การจดจำดอกไม้โดยใช้ Convolutional Convolutional Neural Network</title>
      <dc:creator>22</dc:creator>
      <pubDate>Wed, 09 Apr 2025 16:51:15 +0000</pubDate>
      <link>https://forem.com/zylinn_0cae881f240bcde0a3/kaarcchdcchamdkaimodyaich-convolutional-convolutional-neural-network-3mde</link>
      <guid>https://forem.com/zylinn_0cae881f240bcde0a3/kaarcchdcchamdkaimodyaich-convolutional-convolutional-neural-network-3mde</guid>
      <description>&lt;p&gt;ในบทความนี้ เราจะใช้ Convolutional Neural Network (CNN) เพื่อแก้ปัญหาการจำแนกรูปภาพแบบ Supervised Image &lt;br&gt;
โดยเป็นการจำแนกชนิดของดอกไม้ ได้แก่ Anemone, Daisy, Lily, Orchid, Peony และ Rose&lt;/p&gt;

&lt;p&gt;เมื่อเราเข้าใจแนวคิดของ Convolutional Neural Network แล้ว ก็สามารถเริ่มทำโปรเจกต์นี้ได้เลย!&lt;/p&gt;
&lt;h2&gt;
  
  
  ขั้นตอนการทำงานของโมเดล
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.) การนำเข้าโมดูลที่จำเป็น&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import numpy as np 
import pandas as pd
import cv2
import matplotlib.pyplot as plt
from PIL import Image
from tensorflow.keras import layers
from tensorflow.keras.preprocessing.image import ImageDataGenerator, load_img
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.layers import Activation, Dropout, Flatten, Dense
from tensorflow.keras.optimizers import Adam
import tensorflow as tf
import os
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.) การนำเข้าชุดข้อมูลและการเตรียมข้อมูลเบื้องต้น&lt;/strong&gt;&lt;br&gt;
ให้ทำการดาวน์โหลดไฟล์ข้อมูลที่จะใช้ หากข้อมูลที่นำเข้าเป็นไฟล์ zip สามารถใช้โค้ดด้านล่างนี้เพื่อแตกไฟล์ได้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from zipfile import ZipFile
file_name = '/content/flowers.zip'

with ZipFile(file_name, 'r') as zip:
  zip.extractall()
  print('Done')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from zipfile import ZipFile
file_name = '/content/test_img.zip'

with ZipFile(file_name, 'r') as zip:
  zip.extractall()
  print('Done')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;เมื่อดาวน์โหลดชุดข้อมูลเรียบร้อยแล้ว เราจำเป็นต้องปรับขนาดของภาพด้วย โดยสามารถกำหนดขนาดของภาพได้โดยใช้โค้ดด้านล่างนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;base_dir = '/content/flowers/flowers'

img_size = 224
batch = 64
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.) ตัวสร้างข้อมูลภาพ&lt;/strong&gt;&lt;br&gt;
สำหรับการใช้ตัวสร้างข้อมูลภาพ ให้ทำตามโค้ดด้านล่างนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;train_datagen = ImageDataGenerator(rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True,validation_split=0.2)
test_datagen = ImageDataGenerator(rescale=1. / 255,validation_split=0.2)

train_datagen = train_datagen.flow_from_directory(base_dir,target_size=(img_size, img_size),subset='training',batch_size=batch)
test_datagen = test_datagen.flow_from_directory(base_dir,target_size=(img_size, img_size),subset='validation',batch_size=batch)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3soqsk1qgzagq6mix14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3soqsk1qgzagq6mix14.png" alt="Image description" width="425" height="67"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.) การพัฒนาโมเดล&lt;/strong&gt;&lt;br&gt;
จากจุดนี้เราจะเริ่มสร้างโมเดล CNN โดยใช้ไลบรารี TensorFlow เนื่องจาก TensorFlow มีฟังก์ชันที่ครบถ้วนและจำเป็นสำหรับการกำหนดโครงสร้างของ Convolutional Neural Network และใช้ในการฝึกโมเดลกับชุดข้อมูลด้วย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model = Sequential()
model.add(Conv2D(filters=64, kernel_size=(5, 5), padding='same',activation='relu', input_shape=(224, 224, 3)))
model.add(MaxPooling2D(pool_size=(2, 2)))

model.add(Conv2D(filters=64, kernel_size=(3, 3),padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(Conv2D(filters=64, kernel_size=(3, 3),padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(Conv2D(filters=64, kernel_size=(3, 3),padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))

model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dense(6, activation="softmax"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;การสรุปตัวโมเดล&lt;/strong&gt;&lt;br&gt;
ให้เราใช้โค้ดด้านล่างนี้ได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model.summary()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zcev4q8ijvq519wikh1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zcev4q8ijvq519wikh1.png" alt="Image description" width="800" height="589"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tf.keras.utils.plot_model(model,show_shapes = True,show_dtype = True,show_layer_activations = True)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm38g2otnh4nd74lw0a5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm38g2otnh4nd74lw0a5t.png" alt="Image description" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;การคอมไพล์โมเดล&lt;/strong&gt;&lt;br&gt;
เราสามารถใช้โค้ดด้านล่างนี้ได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss='categorical_crossentropy', metrics=['accuracy'])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;การฝึกฝนโมเดล&lt;/strong&gt;&lt;br&gt;
การฝึกฝนโมเดลอาจจะใช้เวลาสักครู่หนึ่ง โดยโมเดลของเราจะทำการฝึกเป็นเวลา 30 รอบ โดยการฝึกฝนโมเดลเราสามารถใช้โค้ดด้านล่างนี้ได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;epochs=30
model.fit(train_datagen,epochs=epochs,validation_data=test_datagen)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5hdfjweky2eflark4km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5hdfjweky2eflark4km.png" alt="Image description" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;การบันทึกและโหลดโมเดล&lt;/strong&gt;&lt;br&gt;
เมื่อเราบันทึกโมเดลเรียบร้อยแล้ว เราจะสามารถนำมาใช้เมื่อไรก็ได้โดยไม่ต้องฝึกโมเดลใหม่ซ้ำแล้วซ้ำอีก&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from tensorflow.keras.models import load_model
model.save('Model.h5')

savedModel=load_model('Model.h5')
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.) การประเมินผลและการคาดเดาด้วยโมเดล&lt;/strong&gt;&lt;br&gt;
ถ้าหากโมเดลยังให้ผลลัพธ์ไม่ดีเท่าที่ควร เราสามารถลองปรับค่าพารามิเตอร์ต่างๆเพื่อให้ได้ผลลัพธ์การคาดเดาที่ดีขึ้นได้เช่นกัน&lt;/p&gt;

&lt;p&gt;โดยโค้ดด้านล่างนี้จะเอาไว้ดูว่าแต่ละ class ถูกจับคู่กับเลขอะไรบ้าง&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;train_datagen.class_indices
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fafx4q66qgyjgoiovcxrq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fafx4q66qgyjgoiovcxrq.png" alt="Image description" width="743" height="47"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  การใช้งานโมเดล
&lt;/h2&gt;

&lt;p&gt;เราสามารถใช้โค้ดด้านล่างนี้ในการใช้งานโมเดลของเราได้เลย&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from keras.preprocessing import image

#Creating list for mapping
list_ = ['Anemone','Daisy','Lily','Orchid', 'Peony', 'Rose']

#Input image
test_image = image.load_img('/content/test_img/img1.jpg',target_size=(224,224))

#For show image
plt.imshow(test_image)
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)

# Result array
result = savedModel.predict(test_image)
print(result)

#Mapping result array with the main name list
i=0
for i in range(len(result[0])):
  if(result[0][i]==1):
    print(list_[i])
    break
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr4davhcvew7cknhp4oo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjr4davhcvew7cknhp4oo.png" alt="Image description" width="563" height="616"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;เราสามารถใช้งานโมเดลนี้ต่อไปกับรูปอื่นๆได้ด้วยโค้ดด้านล่างนี้เลย โดยเราสามารถเปลี่ยนรูปภาพได้จากบรรทัดนี้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test_image = image.load_img('/content/test_img/img.jpg',target_size=(224,224))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;และก็สามารถใช้โมเดลให้คาดเดาภาพได้ต่อตามความต้องการของเราได้เลย!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input image
test_image = image.load_img('/content/test_img/img2.jpg',target_size=(224,224))
#For show image
plt.imshow(test_image)
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)

# Result array
result = savedModel.predict(test_image)
print(result)

#Mapping result array with the main name list
i=0
for i in range(len(result[0])):
  if(result[0][i]==1):
    print(list_[i])
    break
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo60grufn2ccq7ju55sf6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo60grufn2ccq7ju55sf6.png" alt="Image description" width="568" height="617"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#Input image
test_image = image.load_img('/content/test_img/img3.jpg',target_size=(224,224))
#For show image
plt.imshow(test_image)
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)

# Result array
result = savedModel.predict(test_image)
print(result)

#Mapping result array with the main name list
i=0
for i in range(len(result[0])):
  if(result[0][i]==1):
    print(list_[i])
    break
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ผลลัพธ์จะออกมาดังนี้&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8971rwiot7nvtzo9n5t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx8971rwiot7nvtzo9n5t.png" alt="Image description" width="561" height="610"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  สรุปผล
&lt;/h2&gt;

&lt;p&gt;Convolutional Neural Network ออกแบบมาเพื่อประมวลผลข้อมูลที่มีโครงสร้างเป็นกริด เช่น รูปภาพ โดยเฉพาะอย่างยิ่งสำหรับงานที่เกี่ยวข้องกับการจดจำและประมวลผลภาพ โดยในบทความนี้ได้ทำการประยุกต์ใช้ Convolutional Neural Network มาใช้ในการจำแนกดอกไม้โดยใช้ชุดข้อมูลที่มีภาพของดอกไม้ประเภท​ต่างๆ&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;อ้างอิง&lt;/strong&gt;&lt;br&gt;
1.) &lt;a href="https://www.geeksforgeeks.org/flower-recognition-using-convolutional-neural-network/" rel="noopener noreferrer"&gt;https://www.geeksforgeeks.org/flower-recognition-using-convolutional-neural-network/&lt;/a&gt;&lt;br&gt;
2.) &lt;a href="https://drive.google.com/file/d/1pAtV0Tu-FhDrbWZ_tGeSaSnqnoaDh4rU/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1pAtV0Tu-FhDrbWZ_tGeSaSnqnoaDh4rU/view?usp=sharing&lt;/a&gt;&lt;br&gt;
3.) &lt;a href="https://drive.google.com/file/d/1BmKktbktPQmF3_70hUrH99Z8gUmXcuhZ/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1BmKktbktPQmF3_70hUrH99Z8gUmXcuhZ/view?usp=sharing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>deeplearning</category>
    </item>
  </channel>
</rss>
