<?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>DEV Community: Chuthita_1025</title>
    <description>The latest articles on DEV Community by Chuthita_1025 (@snow_chuthita).</description>
    <link>https://dev.to/snow_chuthita</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3031063%2Ff939d999-360b-494b-999e-e1806f0d2e76.jpg</url>
      <title>DEV Community: Chuthita_1025</title>
      <link>https://dev.to/snow_chuthita</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/snow_chuthita"/>
    <language>en</language>
    <item>
      <title>การจำแนกเสียง Audio Classification ด้วย Python</title>
      <dc:creator>Chuthita_1025</dc:creator>
      <pubDate>Wed, 09 Apr 2025 12:58:20 +0000</pubDate>
      <link>https://dev.to/snow_chuthita/kaarcchamaenkesiiyng-audio-classification-dwy-python-562d</link>
      <guid>https://dev.to/snow_chuthita/kaarcchamaenkesiiyng-audio-classification-dwy-python-562d</guid>
      <description>&lt;p&gt;ในบทความนี้จะพูดถึงการใช้ Deep Learning และเทคนิค Convolutional Neural Networks (CNN) ในการจำแนกเสียงจากข้อมูลเสียง (Audio Dataset) โดยการแปลงข้อมูลเสียงเป็น Spectrogram และนำเข้าไปยังโมเดล CNN เพื่อให้สามารถจำแนกประเภทเสียงได้&lt;/p&gt;

&lt;p&gt;บทความนี้ เราจะมาดู Deep Learning และเทคนิค Convolutional Neural Networks (CNN) ในการจำแนกเสียงจากข้อมูลเสียง ใน Python กัน เราจะใช้ Google Colab ในการรันโค้ด โดย dataset ที่เราจะใช้เป็นตัวอย่างคือ เสียงกีตาร์ และ เสียงคีย์บอร์ดเปียโน จากเว็บไซต์ &lt;a href="https://freesound.org/" rel="noopener noreferrer"&gt;Freesound&lt;/a&gt; สามารถโหลดไฟล์เสียงได้&lt;a href="https://drive.google.com/drive/folders/1wtfVU8MotTpKTQO2tr_f50MZ9PHajnSZ?usp=drive_link" rel="noopener noreferrer"&gt;ที่นี่&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;โดยจะมีเสียงกีตาร์ และเปียโนที่เอาไว้ train โฟลเดอร์ละ 2 เสียง และเสียงที่เอาไว้ test อีกอย่างละ 1 เสียง&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%2F92yo5bjmjbchp3f08iy9.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%2F92yo5bjmjbchp3f08iy9.png" alt="Image description" width="443" height="450"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ขั้นตอนที่ 1: การเตรียมข้อมูลสำหรับโมเดล
&lt;/h2&gt;

&lt;p&gt;ในขั้นแรก เราใช้ librosa ไลบรารีที่ใช้ในการประมวลผลเสียง เพื่อโหลดไฟล์เสียงและแปลงข้อมูลเสียงเป็น Spectrogram ซึ่งเป็นภาพที่แสดงถึงการเปลี่ยนแปลงของความถี่ (frequency) ในช่วงเวลา (time) โดยใช้เทคนิค Short-Time Fourier Transform (STFT) ซึ่งจะช่วยให้เราสามารถวิเคราะห์การเปลี่ยนแปลงของความถี่ได้&lt;/p&gt;

&lt;p&gt;ต่อมา เราจะทำการแยกข้อมูลเสียงในโฟลเดอร์ guitar และ keyb โดยใช้ฟังก์ชัน spect() ที่จะทำการโหลดไฟล์เสียงจากแต่ละโฟลเดอร์และแปลงเป็น Spectrogram จากนั้นจัดเก็บข้อมูลลงในตัวแปร x และ y ซึ่ง x เก็บข้อมูล Spectrogram และ y เก็บ Label ที่บ่งชี้ประเภทของเครื่องดนตรี (0 = กีตาร์, 1 = คีย์บอร์ด)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import librosa, librosa.display
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Audio
import os
from tqdm import tqdm
import warnings

def spect(wave):
    f, sr = librosa.load(wave, duration=0.9)
    st = librosa.stft(f)
    spectrogram = np.abs(st)
    return spectrogram

x = list()
y = list()

# อ่านไฟล์เสียงจากโฟลเดอร์ต่าง ๆ
gt_files = os.listdir('/content/guitar/')
kb_files = os.listdir('/content/keyb/')

gt_files = [f for f in gt_files if os.path.isfile(os.path.join('/content/guitar/', f))]
kb_files = [f for f in kb_files if os.path.isfile(os.path.join('/content/keyb/', f))]

# แปลงเสียงกีตาร์เป็น Spectrogram และเก็บในตัวแปร
for f in tqdm(gt_files):
    file1 = 'guitar/' + f
    data = spect(file1)
    x.append(data)
    y.append([0, 1])  # กีตาร์ = [0, 1]

# แปลงเสียงคีย์บอร์ดเป็น Spectrogram และเก็บในตัวแปร
for f in tqdm(kb_files):
    file1 = 'keyb/' + f
    data = spect(file1)
    x.append(data)
    y.append([1, 0])  # คีย์บอร์ด = [1, 0]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ขั้นตอนที่ 2: การฝึกโมเดลด้วย Convolutional Neural Networks (CNN)
&lt;/h2&gt;

&lt;p&gt;ในขั้นตอนนี้เราจะนำเข้า sklearn สำหรับการสร้างชุดฝึกโมเดล tensorflow สำหรับการคำนวณสร้าง deeplearning และนำข้อมูลที่เตรียมไว้มาใช้ในการฝึกโมเดล CNN ซึ่งมีการใช้ Conv2D เพื่อการเรียนรู้ฟีเจอร์จาก Spectrogram ในการประมวลภาพ และ MaxPooling2D เพื่อลดขนาดข้อมูล พร้อมทั้งใช้ Dense และ Flatten เพื่อให้สามารถจำแนกประเภทเสียงได้&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from sklearn.model_selection import train_test_split
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten
from keras.optimizers import RMSprop

# แบ่งข้อมูลเป็น training และ testing
x = np.array(x)
y = np.array(y)
x = x.reshape(x.shape[0], x.shape[1], x.shape[2], 1)

xtrain, xtest, ytrain, ytest = train_test_split(x, y, train_size=0.8, random_state=42)

# สร้างโมเดล CNN
model = Sequential([
    Conv2D(128, (3, 3), activation='relu', input_shape=xtrain.shape[1:]),
    MaxPooling2D(pool_size=(2, 2)),
    Conv2D(128, (3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2)),
    Dense(16),
    Dense(8),
    Flatten(),
    Dense(2, activation='softmax')
])

# คอมไพล์โมเดล หรือการเตรียมโมเดลสำหรับการฝึกฝน
model.compile(optimizer=RMSprop(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# ฝึกฝนโมเดล 100 รอบ
history = model.fit(xtrain, ytrain, epochs=100, validation_data=(xtest, ytest))

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;จากผลลัพธ์การ train ครบ 100 ครั้ง&lt;/strong&gt;&lt;br&gt;
ผลการ train ครั้งที่ 100 พบว่าตัวโมเดลมี ความแม่นยำสูงในการฝึก (accuracy: 1.0000) และค่าความสูญเสียต่ำในข้อมูลการฝึก (loss: 4.6967e-05) ซึ่งบ่งชี้ว่าโมเดลสามารถจำแนกประเภทของข้อมูลในชุดการฝึกได้ดี แต่ในขณะเดียวกัน, โมเดลไม่สามารถทำนายผลได้ดีในข้อมูลทดสอบ (val_accuracy: 1.0000) และค่าความสูญเสียต่ำมาก (val_loss: 0.0000) ซึ่งแสดงถึงผลที่ดีในการทดสอบ.&lt;/p&gt;

&lt;p&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%2Fkcurr0vvl23cw69lrcn1.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%2Fkcurr0vvl23cw69lrcn1.png" alt="Image description" width="800" height="143"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ต่อมาจะใช้ matplotlib เพื่อวาดกราฟที่แสดงถึง ค่า loss และ accuracy ของโมเดลที่เราได้ฝึกในแต่ละรอบ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;plt.figure(figsize=(8,8))
plt.title('loss value')
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.legend(['loss', 'val_loss'])
print('los:', history.history['loss'][-1])
print('val_loss:', history.history['val_loss'][-1])
plt.show()
plt.figure(figsize=(8,8))
plt.title('Accuracy')
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.legend(['accuracy', 'val_accuracy'])
print('acc:', history.history['accuracy'][-1])
print('val_acc:', history.history['val_accuracy'][-1])
plt.show()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;los: 4.6966906666057184e-05&lt;br&gt;
val_loss: 0.0&lt;/code&gt;&lt;/p&gt;

&lt;p&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%2Fi584bht9h1106pic5rrp.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%2Fi584bht9h1106pic5rrp.png" alt="Image description" width="800" height="816"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;acc: 1.0&lt;br&gt;
val_acc: 1.0&lt;/code&gt;&lt;/p&gt;

&lt;p&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%2Fau0yugk7iaw8u5vqw1dd.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%2Fau0yugk7iaw8u5vqw1dd.png" alt="Image description" width="800" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;จากผลลัพธ์&lt;/strong&gt; แสดงให้เห็นว่าในช่วงการฝึก (Training) โมเดลมีความแม่นยำสูงในการฝึก (accuracy: 1.0000) และ ค่าความสูญเสียต่ำในข้อมูลการฝึก (loss: 4.6967e-05) และในขณะเดียวกัน มีความแม่นยำสูงในข้อมูลทดสอบ (val_accuracy: 1.0000) และ ค่าความสูญเสียเป็น 0 ในข้อมูลทดสอบ (val_loss: 0.0) ซึ่งบ่งชี้ว่าโมเดลสามารถเรียนรู้ได้ดีทั้งในข้อมูลการฝึกและข้อมูลทดสอบ&lt;/p&gt;

&lt;p&gt;ซึ่งการเรียนรู้ของโมเดลนั้นจะขึ้นอยู่กับข้อมูล Audio ที่นำมาเทรน หากเป็นเสียงที่ต่างกันมากก็จะมี accuracy มาก หากเป็นเสียงที่คล้ายกันมากก็อาจทำให้ accuracy ลดลง&lt;/p&gt;
&lt;h2&gt;
  
  
  ขั้นตอนที่ 3: การประเมินผลและทดลองใช้
&lt;/h2&gt;

&lt;p&gt;หลังจากฝึกฝนโมเดลแล้ว, เราสามารถนำโมเดลไปใช้ในการทำนายประเภทของเสียงจากไฟล์เสียงอื่นๆ ในที่นี้คือไฟล์เสียงที่เราเตรียมไว้สำหรับการ test โดยใช้ฟังก์ชัน wav2predict() ที่จะทำการแปลงเสียงเป็น Spectrogram และทำนายว่าเป็นเสียงของ กีตาร์ หรือ คีย์บอร์ด&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def wav2predict(sf):
    data = spect(sf)
    data2arr = np.array(data)
    testsound = data2arr.reshape(1, data2arr.shape[0], data2arr.shape[1], 1)
    p = model.predict(testsound)
    label = ['keyboard', 'guitar']
    i = np.argmax(p)
    prop = np.max(p)
    result = label[i]
    return result, prop
&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;music = '/content/47025__sub-d__guitar-swell-5.wav'
r = wav2predict(music)
print (r)
Audio(music)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fresm0eh4mv92zhhm2e1g.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%2Fresm0eh4mv92zhhm2e1g.png" alt="Image description" width="505" height="158"&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;music = '/content/618060__puniho__lofi-piano-loop-15-80bpm.wav'
r = wav2predict(music)
print (r)
Audio(music)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fi1a0xvnqletuvy4me8jd.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%2Fi1a0xvnqletuvy4me8jd.png" alt="Image description" width="492" height="156"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ซึ่งโมเดลตัวนี้ก็สามารถบอกได้อย่างถูกต้องว่าอันไหนคือเสียงเปียโนและอันไหนคือเสียงกีต้าร์&lt;/p&gt;

&lt;h2&gt;
  
  
  ตัวอย่างเพิ่มเติม
&lt;/h2&gt;

&lt;p&gt;คราวนี้จะลองให้ตัวโมเดลแยกเสียงสัตว์ดูบ้าง ระหว่างเสียงนก และแมว&lt;br&gt;
โดยจะมีเสียงนก และแมวที่เอาไว้ train โฟลเดอร์ละ 2 เสียง และเสียงที่เอาไว้ test อีกอย่างละ 1 เสียง&lt;/p&gt;

&lt;p&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%2F9o0jkp28qm0aaqvw4dyk.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%2F9o0jkp28qm0aaqvw4dyk.png" alt="Image description" width="435" height="456"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ขั้นตอนที่ 1: การเตรียมข้อมูลสำหรับโมเดล
&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;import librosa, librosa.display
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import Audio
import os
from tqdm import tqdm
import warnings

def spect(wave):
    f, sr = librosa.load(wave, duration=0.9)
    st = librosa.stft(f)
    spectrogram = np.abs(st)
    return spectrogram

x = list()
y = list()

# อ่านไฟล์เสียงจากโฟลเดอร์ต่าง ๆ
cat_files = os.listdir('/content/cat/')
bird_files = os.listdir('/content/bird/')

cat_files = [f for f in cat_files if os.path.isfile(os.path.join('/content/cat/', f))]
bird_files = [f for f in bird_files if os.path.isfile(os.path.join('/content/bird/', f))]

# แปลงเสียงกีตาร์เป็น Spectrogram และเก็บในตัวแปร
for f in tqdm(cat_files):
    file1 = 'cat/' + f
    data = spect(file1)
    x.append(data)
    y.append([0, 1])  # แมว = [0, 1]

# แปลงเสียงคีย์บอร์ดเป็น Spectrogram และเก็บในตัวแปร
for f in tqdm(bird_files):
    file1 = 'bird/' + f
    data = spect(file1)
    x.append(data)
    y.append([1, 0])  # นก = [1, 0]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ขั้นตอนที่ 2: การฝึกโมเดลด้วย Convolutional Neural Networks (CNN)
&lt;/h2&gt;

&lt;p&gt;นำโมเดลมา train ด้วยวิธีเดิม&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from sklearn.model_selection import train_test_split
import tensorflow as tf
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten
from keras.optimizers import RMSprop

# แบ่งข้อมูลเป็น training และ testing
x = np.array(x)
y = np.array(y)
x = x.reshape(x.shape[0], x.shape[1], x.shape[2], 1)

xtrain, xtest, ytrain, ytest = train_test_split(x, y, train_size=0.8, random_state=42)

# สร้างโมเดล CNN
model = Sequential([
    Conv2D(128, (3, 3), activation='relu', input_shape=xtrain.shape[1:]),
    MaxPooling2D(pool_size=(2, 2)),
    Conv2D(128, (3, 3), activation='relu'),
    MaxPooling2D(pool_size=(2, 2)),
    Dense(16),
    Dense(8),
    Flatten(),
    Dense(2, activation='softmax')
])

# คอมไพล์โมเดล หรือการเตรียมโมเดลสำหรับการฝึกฝน
model.compile(optimizer=RMSprop(learning_rate=0.0001), loss='categorical_crossentropy', metrics=['accuracy'])

# ฝึกฝนโมเดล 100 รอบ
history = model.fit(xtrain, ytrain, epochs=100, validation_data=(xtest, ytest))

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;จากผลลัพธ์การ train ครบ 100 ครั้ง *&lt;/em&gt;&lt;br&gt;
ผลการ train ครั้งที่ 100 โมเดลมี ความแม่นยำสูง ในการฝึก (accuracy: 1.0000) และ ค่าความสูญเสียต่ำ ในข้อมูลการฝึก (loss: 2.1301e-04) ในขณะที่มี ความแม่นยำสูง ในข้อมูลทดสอบ (val_accuracy: 1.0000) และ ค่าความสูญเสียต่ำ ในข้อมูลทดสอบ (val_loss: 0.0161)&lt;/p&gt;

&lt;p&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%2F1a6xtk7pcquxcwktng34.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%2F1a6xtk7pcquxcwktng34.png" alt="Image description" width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;los: 0.00021300744265317917&lt;br&gt;
val_loss: 0.016095701605081558&lt;/code&gt;&lt;/p&gt;

&lt;p&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%2Ftyco9lkrfhn0bamds38g.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%2Ftyco9lkrfhn0bamds38g.png" alt="Image description" width="800" height="816"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;acc: 1.0&lt;br&gt;
val_acc: 1.0&lt;/code&gt;&lt;/p&gt;

&lt;p&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%2Fn1dbq8jsjwbhigaad5ad.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%2Fn1dbq8jsjwbhigaad5ad.png" alt="Image description" width="800" height="816"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;จากผลลัพธ์&lt;/strong&gt; แสดงให้เห็นว่าในช่วงการฝึก (Training) โมเดลมีความแม่นยำสูงในการฝึก (accuracy: 1.0000) และ ค่าความสูญเสียต่ำในข้อมูลการฝึก (loss: 0.00021300744265317917) ขณะเดียวกันโมเดลยังคงสามารถทำนายผลได้ดีในข้อมูลทดสอบ (val_accuracy: 1.0000) และ ค่าความสูญเสียต่ำในข้อมูลทดสอบ (val_loss: 0.016095701605081558)&lt;/p&gt;
&lt;h2&gt;
  
  
  ขั้นตอนที่ 3: การประเมินผลและทดลองใช้
&lt;/h2&gt;

&lt;p&gt;นำโมเดลมาลองทดสอบจำแนกเสียงจากไฟล์เสียงอื่น ๆ ในที่นี้คือไฟล์เสียงที่เราเตรียมไว้สำหรับการ test&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def wav2predict(sf):
    data = spect(sf)
    data2arr = np.array(data)
    testsound = data2arr.reshape(1, data2arr.shape[0], data2arr.shape[1], 1)
    p = model.predict(testsound)
    label = ['bird', 'cat']
    i = np.argmax(p)
    prop = np.max(p)
    result = label[i]
    return result, prop
&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;music = '/content/Tombird.mp3'
r = wav2predict(music)
print (r)
Audio(music)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fphrnnoowpgix8s0g0x9s.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%2Fphrnnoowpgix8s0g0x9s.png" alt="Image description" width="553" height="187"&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;music = '/content/513713__luke100000__birds-chirping.wav'
r = wav2predict(music)
print (r)
Audio(music)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&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%2Fdhhk2bjkqwximnsmfu64.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%2Fdhhk2bjkqwximnsmfu64.png" alt="Image description" width="550" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;สรุปผล&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;ในบทความนี้เราได้ใช้เทคนิค Deep Learning และ CNN ในการจำแนกเสียงจากเครื่องดนตรีคือ เสียงกีตาร์ และเสียงคีย์บอร์ดเปียใน และจำแนกเสียงสัตว์คือ เสียงนก และเสียงแมว  โดยเริ่มจากการแปลงข้อมูลเสียงเป็น Spectrogram และนำข้อมูลนี้ไปฝึกโมเดลเพื่อทำนายประเภทของเสียงอื่น ๆ ซึ่งเทคนิคนี้สามารถประยุกต์ใช้ในการจำแนกประเภทเสียงอื่น ๆ ได้เช่นกัน&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Colab
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://colab.research.google.com/drive/1CKlzyhyeJadcRGqRiPWUz5YpRgOUm5gY?usp=drive_link" rel="noopener noreferrer"&gt;Audio Classification Animal Sound&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://colab.research.google.com/drive/15tDnlMpkfF3co9kjoJqrGd1QbmoFrBO0?usp=drive_link" rel="noopener noreferrer"&gt;Audio Classification Instrument Sound&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sorapong.medium.com/audio-classification-%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%88%E0%B8%B3%E0%B9%81%E0%B8%99%E0%B8%81%E0%B9%80%E0%B8%AA%E0%B8%B5%E0%B8%A2%E0%B8%87%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2-%E0%B9%82%E0%B8%84%E0%B8%A3%E0%B8%87%E0%B8%82%E0%B9%88%E0%B8%B2%E0%B8%A2%E0%B8%9B%E0%B8%A3%E0%B8%B0%E0%B8%AA%E0%B8%B2%E0%B8%97%E0%B9%81%E0%B8%9A%E0%B8%9A-%E0%B8%84%E0%B8%AD%E0%B8%99%E0%B9%82%E0%B8%A7%E0%B8%A5%E0%B8%B9%E0%B8%8A%E0%B8%B1%E0%B9%88%E0%B8%99-cnn-2605b2d7ef2e" rel="noopener noreferrer"&gt;Audio Classification : การจำแนกเสียงด้วย โครงข่ายประสาทแบบ คอนโวลูชั่น (CNN)&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sound Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://freesound.org/" rel="noopener noreferrer"&gt;Freesound&lt;/a&gt; และ Youtube&lt;br&gt;
&lt;a href="https://drive.google.com/drive/folders/1wtfVU8MotTpKTQO2tr_f50MZ9PHajnSZ?usp=drive_link" rel="noopener noreferrer"&gt;ไฟล์เสียงที่ใช้ในการทดสอบทั้งหมด&lt;/a&gt;&lt;/p&gt;

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