তারিখটা মনে রেখো! গুগল I / O মে 18-20 মে এখনই রেজিস্টার করুন
This page was translated by the Cloud Translation API.
Switch to English

পরিবেশগত শব্দ শ্রেণিবিন্যাসের জন্য YAMNet এর সাথে স্থানান্তর শিক্ষা

টেনসরফ্লো.আর.জে দেখুন গুগল কোলাবে চালান গিটহাবে দেখুন নোটবুক ডাউনলোড করুন টিএফ হাব মডেল দেখুন

YAMNet একটি অডিও ইভেন্টের শ্রেণিবদ্ধ যা হাসি, দোলা বা সাইরেনের মতো 521 ক্লাসের অডিও ইভেন্টগুলির পূর্বাভাস দিতে পারে।

এই টিউটোরিয়ালে আপনি শিখবেন কীভাবে:

  • অনুমানের জন্য YAMNet মডেলটি লোড করুন এবং ব্যবহার করুন।
  • বিড়াল এবং কুকুরের শব্দগুলির শ্রেণিবদ্ধ করতে YAMNet এম্বেডিংগুলি ব্যবহার করে একটি নতুন মডেল তৈরি করুন।
  • আপনার মডেলকে মূল্যায়ন ও রফতানি করুন।

টেনসরফ্লো এবং অন্যান্য লাইব্রেরি আমদানি করুন

টেনসরফ্লো I / O ইনস্টল করে শুরু করুন, যা অডিও ফাইলগুলি ডিস্কের বাইরে লোড করা আপনার পক্ষে সহজ করে দেবে।

pip install -q tensorflow_io
import os

from IPython import display
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

import tensorflow as tf
import tensorflow_datasets as tfds
import tensorflow_hub as hub
import tensorflow_io as tfio

ইয়ামনেট সম্পর্কে

ইয়ামনেট হ'ল একটি অডিও ইভেন্ট শ্রেণিবদ্ধকারী যা অডিও তরঙ্গরূপটিকে ইনপুট হিসাবে গ্রহণ করে এবং অডিওসেট অ্যান্টোলজি থেকে 521 অডিও ইভেন্টের প্রত্যেকটির জন্য স্বতন্ত্র পূর্বাভাস দেয়।

অভ্যন্তরীণভাবে, মডেল অডিও সিগন্যাল থেকে "ফ্রেম" বের করে এবং এই ফ্রেমের ব্যাচগুলি প্রক্রিয়া করে। মডেলের এই সংস্করণটি ফ্রেমগুলি ব্যবহার করে যা 0.96s দীর্ঘ এবং প্রতি 0.48 সেটে একটি ফ্রেম বের করে।

মডেলটি 1-ডি ফ্লোট 32 টেনসর বা নুমপি অ্যারে গ্রহণ করে যথেচ্ছ দৈর্ঘ্যের একটি তরঙ্গরূপ ধারণ করে, এটি পরিসরে মনো-16 কেএইচজেড নমুনা হিসাবে প্রতিনিধিত্ব করে [-1.0, +1.0] । এই টিউটোরিয়ালটিতে আপনাকে একটি .wav ফাইলকে সঠিক ফর্ম্যাটে রূপান্তর করতে সহায়তা করার কোড রয়েছে।

মডেলটি ক্লাস স্কোর, এম্বেডিংস (যা আপনি স্থানান্তর শেখার জন্য ব্যবহার করবেন) এবং লগ মেল বর্ণালীতে অন্তর্ভুক্ত 3 আউটপুট দেয়। আপনি এখানে আরও বিশদ খুঁজে পেতে পারেন, এবং এই টিউটোরিয়ালটি বাস্তবে এগুলি ব্যবহার করে আপনাকে এগিয়ে নিয়ে যাবে।

YAMNet এর একটি নির্দিষ্ট ব্যবহার উচ্চ-স্তরের বৈশিষ্ট্য এক্সট্র্যাক্টর হিসাবে রয়েছে: YAMNet এর 1024-D এম্বেডিং আউটপুটটি অন্য অগভীর মডেলের ইনপুট বৈশিষ্ট্য হিসাবে ব্যবহার করা যেতে পারে যা কোনও নির্দিষ্ট কাজের জন্য অল্প পরিমাণে ডেটা প্রশিক্ষণ দেওয়া যেতে পারে। এটি প্রচুর লেবেলযুক্ত ডেটার প্রয়োজন ছাড়াই এবং বড় কোনও মডেলকে শেষ থেকে শেষ পর্যন্ত প্রশিক্ষণ না দিয়ে বিশেষায়িত অডিও ক্লাসিফায়ারগুলির দ্রুত তৈরি করার অনুমতি দেয়।

আপনি YAMNet এর এম্বেডিংস আউটপুটটি স্থানান্তর শেখার জন্য ব্যবহার করবেন এবং এর উপরে এক বা একাধিক ঘন স্তরকে প্রশিক্ষণ দেবেন।

প্রথমে, আপনি মডেলটি চেষ্টা করে দেখুন এবং অডিও শ্রেণিবদ্ধকরণের ফলাফলগুলি দেখতে পাবেন। এরপরে আপনি ডেটা প্রি-প্রসেসিং পাইপলাইন তৈরি করবেন।

টেনসরফ্লো হাব থেকে YAMNet লোড হচ্ছে

আপনি সাউন্ড ফাইলগুলি থেকে এম্বেডিংগুলি বের করার জন্য টেনসরফ্লো হাব থেকে YAMNet ব্যবহার করতে যাচ্ছেন।

টেনসরফ্লো হাব থেকে কোনও মডেল লোড করা সহজবোধ্য: মডেলটি চয়ন করুন, এর URL টি অনুলিপি করুন এবং load ফাংশনটি ব্যবহার করুন।

0 বি 2 এফ 1 বিসি 490

মডেলগুলি লোড এবং মডেলগুলির বেসিক ব্যবহারের টিউটোরিয়াল অনুসরণ করে আপনি একটি নমুনা wav ফাইল ডাউনলোড করবেন এবং অনুমানটি চালাবেন।

testing_wav_file_name = tf.keras.utils.get_file('miaow_16k.wav',
                                                'https://storage.googleapis.com/audioset/miaow_16k.wav',
                                                cache_dir='./',
                                                cache_subdir='test_data')

print(testing_wav_file_name)
Downloading data from https://storage.googleapis.com/audioset/miaow_16k.wav
221184/215546 [==============================] - 0s 0us/step
./test_data/miaow_16k.wav

অডিও ফাইলগুলি লোড করার জন্য আপনার একটি ফাংশন প্রয়োজন। প্রশিক্ষণ ডেটা নিয়ে কাজ করার পরে এগুলি পরে ব্যবহার করা হবে।

# Util functions for loading audio files and ensure the correct sample rate

@tf.function
def load_wav_16k_mono(filename):
    """ read in a waveform file and convert to 16 kHz mono """
    file_contents = tf.io.read_file(filename)
    wav, sample_rate = tf.audio.decode_wav(
          file_contents,
          desired_channels=1)
    wav = tf.squeeze(wav, axis=-1)
    sample_rate = tf.cast(sample_rate, dtype=tf.int64)
    wav = tfio.audio.resample(wav, rate_in=sample_rate, rate_out=16000)
    return wav
testing_wav_data = load_wav_16k_mono(testing_wav_file_name)

_ = plt.plot(testing_wav_data)

# Play the audio file.
display.Audio(testing_wav_data,rate=16000)

পিএনজি

ক্লাস ম্যাপিং লোড করুন

YAMNet সনাক্ত করতে সক্ষম এমন শ্রেণীর নামগুলি লোড করা গুরুত্বপূর্ণ। ম্যাপিং ফাইল উপস্থিত yamnet_model.class_map_path() এ, csv ফর্ম্যাট।

class_map_path = yamnet_model.class_map_path().numpy().decode('utf-8')
class_names =list(pd.read_csv(class_map_path)['display_name'])

for name in class_names[:20]:
  print(name)
print('...')
Speech
Child speech, kid speaking
Conversation
Narration, monologue
Babbling
Speech synthesizer
Shout
Bellow
Whoop
Yell
Children shouting
Screaming
Whispering
Laughter
Baby laughter
Giggle
Snicker
Belly laugh
Chuckle, chortle
Crying, sobbing
...

অনুমান চালান

YAMNet ফ্রেম-স্তরের শ্রেণি-স্কোর সরবরাহ করে (অর্থাত্ প্রতিটি ফ্রেমের জন্য 521 স্কোর)। ক্লিপ-স্তরের পূর্বাভাসগুলি নির্ধারণের জন্য, স্কোরগুলি প্রতি শ্রেণিতে ফ্রেম জুড়ে একত্রিত করা যায় (উদাহরণস্বরূপ, গড় বা সর্বাধিক সমষ্টি ব্যবহার করে)। এটি scores_np.mean(axis=0) দ্বারা নীচে করা হয়েছে। অবশেষে, ক্লিপ-স্তরে সর্বোচ্চ-স্কোর করা ক্লাসটি সন্ধানের জন্য, আমরা 521 মোট স্কোর সর্বোচ্চ গ্রহণ করি।

scores, embeddings, spectrogram = yamnet_model(testing_wav_data)
class_scores = tf.reduce_mean(scores, axis=0)
top_class = tf.argmax(class_scores)
infered_class = class_names[top_class]

print(f'The main sound is: {infered_class}')
print(f'The embeddings shape: {embeddings.shape}')
The main sound is: Animal
The embeddings shape: (13, 1024)

ইসি -50 ডেটাসেট

ESC-50 ডেটাসেট , এখানে ভাল বর্ণিত, 2000 পরিবেশগত অডিও রেকর্ডিংয়ের (প্রতিটি 5 সেকেন্ড দীর্ঘ) লেবেলযুক্ত সংগ্রহ। তথ্য প্রতি ক্লাসে 40 টি উদাহরণ সহ 50 টি শ্রেণি নিয়ে গঠিত।

এর পরে, আপনি এটি ডাউনলোড এবং এক্সট্রাক্ট করবেন।

_ = tf.keras.utils.get_file('esc-50.zip',
                        'https://github.com/karoldvl/ESC-50/archive/master.zip',
                        cache_dir='./',
                        cache_subdir='datasets',
                        extract=True)
Downloading data from https://github.com/karoldvl/ESC-50/archive/master.zip
645693440/Unknown - 47s 0us/step

ডেটা অন্বেষণ করুন

প্রতিটি ফাইলের মেটাডেটা ./datasets/ESC-50-master/meta/esc50.csv তে CSV ফাইলে নির্দিষ্ট করা আছে

এবং সমস্ত অডিও ফাইল ./datasets/ESC-50-master/audio/

আপনি ম্যাপিংয়ের সাথে একটি পান্ডাস ডেটাফ্রেম তৈরি করবেন এবং এটি ডেটার আরও স্পষ্টরূপে দেখতে ব্যবহার করবেন।

esc50_csv = './datasets/ESC-50-master/meta/esc50.csv'
base_data_path = './datasets/ESC-50-master/audio/'

pd_data = pd.read_csv(esc50_csv)
pd_data.head()

তথ্য ফিল্টার করুন

ডেটাফ্রেমে ডেটা দেওয়া, আপনি কিছু রূপান্তর প্রয়োগ করবেন:

  • সারিগুলি ফিল্টার করুন এবং কেবলমাত্র নির্বাচিত ক্লাস (কুকুর এবং বিড়াল) ব্যবহার করুন। আপনি যদি অন্য কোনও ক্লাস ব্যবহার করতে চান তবে এখান থেকে আপনি তাদের চয়ন করতে পারেন।
  • পুরো পথ পেতে ফাইলের নাম পরিবর্তন করুন। এটি পরে লোডিংকে আরও সহজ করে তুলবে।
  • নির্দিষ্ট সীমার মধ্যে লক্ষ্যমাত্রা পরিবর্তন করুন। এই উদাহরণে, কুকুর 0 থাকবে, তবে বিড়াল 5 এর মূল মানের পরিবর্তে 1 হয়ে যাবে।
my_classes = ['dog', 'cat']
map_class_to_id = {'dog':0, 'cat':1}

filtered_pd = pd_data[pd_data.category.isin(my_classes)]

class_id = filtered_pd['category'].apply(lambda name: map_class_to_id[name])
filtered_pd = filtered_pd.assign(target=class_id)

full_path = filtered_pd['filename'].apply(lambda row: os.path.join(base_data_path, row))
filtered_pd = filtered_pd.assign(filename=full_path)

filtered_pd.head(10)

অডিও ফাইলগুলি লোড করুন এবং এম্বেডিংগুলি পুনরুদ্ধার করুন

এখানে আপনি load_wav_16k_mono প্রয়োগ করবেন এবং মডেলের জন্য wav ডেটা প্রস্তুত করবেন।

ওয়াভ ডেটা থেকে এম্বেডিংগুলি বের করার সময়, আপনি আকৃতির একটি অ্যারে পাবেন (N, 1024) যেখানে N হ'ল ফ্রেমের সংখ্যা যা ইয়ামনেট খুঁজে পেয়েছে (প্রতি 0.48 সেকেন্ডের অডিওর জন্য একটি)।

আপনার মডেল প্রতিটি ফ্রেমকে একটি ইনপুট হিসাবে ব্যবহার করবে সুতরাং আপনাকে নতুন কলাম তৈরি করতে হবে যাতে প্রতি সারিতে একটি ফ্রেম থাকবে। এই নতুন সারিগুলি যথাযথভাবে প্রতিবিম্বিত করতে আপনাকে লেবেলগুলি এবং ভাঁজ কলামও প্রসারিত করতে হবে।

প্রসারিত ভাঁজ কলামটি মূল মান রাখে। আপনি ফ্রেমগুলি মিশ্রণ করতে পারবেন না কারণ বিভাজনগুলি করার সময়, আপনি একই অডিওর বিভিন্ন অংশে বিভক্ত হয়ে যেতে পারেন এবং এটি আমাদের বৈধতা এবং পরীক্ষার পদক্ষেপগুলিকে কম কার্যকর করে তোলে।

filenames = filtered_pd['filename']
targets = filtered_pd['target']
folds = filtered_pd['fold']

main_ds = tf.data.Dataset.from_tensor_slices((filenames, targets, folds))
main_ds.element_spec
(TensorSpec(shape=(), dtype=tf.string, name=None),
 TensorSpec(shape=(), dtype=tf.int64, name=None),
 TensorSpec(shape=(), dtype=tf.int64, name=None))
def load_wav_for_map(filename, label, fold):
  return load_wav_16k_mono(filename), label, fold

main_ds = main_ds.map(load_wav_for_map)
main_ds.element_spec
(TensorSpec(shape=<unknown>, dtype=tf.float32, name=None),
 TensorSpec(shape=(), dtype=tf.int64, name=None),
 TensorSpec(shape=(), dtype=tf.int64, name=None))
# applies the embedding extraction model to a wav data
def extract_embedding(wav_data, label, fold):
  ''' run YAMNet to extract embedding from the wav data '''
  scores, embeddings, spectrogram = yamnet_model(wav_data)
  num_embeddings = tf.shape(embeddings)[0]
  return (embeddings,
            tf.repeat(label, num_embeddings),
            tf.repeat(fold, num_embeddings))

# extract embedding
main_ds = main_ds.map(extract_embedding).unbatch()
main_ds.element_spec
(TensorSpec(shape=(1024,), dtype=tf.float32, name=None),
 TensorSpec(shape=(), dtype=tf.int64, name=None),
 TensorSpec(shape=(), dtype=tf.int64, name=None))

ডেটা বিভক্ত করুন

আপনি ডেটাसेटকে ট্রেন, বৈধতা এবং পরীক্ষায় বিভক্ত করতে fold কলামটি ব্যবহার করবেন।

ভাঁজ মানগুলি যাতে একই মূল ওয়াভ ফাইল থেকে ফাইলগুলি একই বিভক্ত থাকে, আপনি ডেটাসেট বর্ণনা করে কাগজে আরও তথ্য পেতে পারেন।

শেষ পদক্ষেপটি হ'ল fold কলামটি ডেটাसेट থেকে সরিয়ে নেওয়া হয় যেহেতু আমরা প্রশিক্ষণ প্রক্রিয়াতে আর এটি ব্যবহার করব না।

cached_ds = main_ds.cache()
train_ds = cached_ds.filter(lambda embedding, label, fold: fold < 4)
val_ds = cached_ds.filter(lambda embedding, label, fold: fold == 4)
test_ds = cached_ds.filter(lambda embedding, label, fold: fold == 5)

# remove the folds column now that it's not needed anymore
remove_fold_column = lambda embedding, label, fold: (embedding, label)

train_ds = train_ds.map(remove_fold_column)
val_ds = val_ds.map(remove_fold_column)
test_ds = test_ds.map(remove_fold_column)

train_ds = train_ds.cache().shuffle(1000).batch(32).prefetch(tf.data.AUTOTUNE)
val_ds = val_ds.cache().batch(32).prefetch(tf.data.AUTOTUNE)
test_ds = test_ds.cache().batch(32).prefetch(tf.data.AUTOTUNE)

আপনার মডেল তৈরি করুন

আপনি বেশিরভাগ কাজ করেছেন! এরপরে, শুরু করার জন্য একটি খুব সাধারণ সিক্যুয়াল মডেল সংজ্ঞায়িত করুন - একটি হিডেন স্তর এবং বিড়াল এবং কুকুর চিনতে 2 আউটপুট।

my_model = tf.keras.Sequential([
    tf.keras.layers.Input(shape=(1024), dtype=tf.float32,
                          name='input_embedding'),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dense(len(my_classes))
], name='my_model')

my_model.summary()
Model: "my_model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 512)               524800    
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 1026      
=================================================================
Total params: 525,826
Trainable params: 525,826
Non-trainable params: 0
_________________________________________________________________
my_model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
                 optimizer="adam",
                 metrics=['accuracy'])

callback = tf.keras.callbacks.EarlyStopping(monitor='loss',
                                            patience=3,
                                            restore_best_weights=True)
history = my_model.fit(train_ds,
                       epochs=20,
                       validation_data=val_ds,
                       callbacks=callback)
Epoch 1/20
15/15 [==============================] - 9s 44ms/step - loss: 1.0453 - accuracy: 0.7777 - val_loss: 0.9861 - val_accuracy: 0.8687
Epoch 2/20
15/15 [==============================] - 0s 15ms/step - loss: 0.8652 - accuracy: 0.8792 - val_loss: 0.7134 - val_accuracy: 0.8750
Epoch 3/20
15/15 [==============================] - 0s 15ms/step - loss: 0.3509 - accuracy: 0.9152 - val_loss: 0.6370 - val_accuracy: 0.8687
Epoch 4/20
15/15 [==============================] - 0s 15ms/step - loss: 0.2967 - accuracy: 0.9251 - val_loss: 0.5815 - val_accuracy: 0.8687
Epoch 5/20
15/15 [==============================] - 0s 16ms/step - loss: 0.4210 - accuracy: 0.9088 - val_loss: 0.2190 - val_accuracy: 0.9062
Epoch 6/20
15/15 [==============================] - 0s 15ms/step - loss: 0.1619 - accuracy: 0.9356 - val_loss: 0.2064 - val_accuracy: 0.9187
Epoch 7/20
15/15 [==============================] - 0s 16ms/step - loss: 0.1516 - accuracy: 0.9338 - val_loss: 0.4003 - val_accuracy: 0.8687
Epoch 8/20
15/15 [==============================] - 0s 15ms/step - loss: 0.2017 - accuracy: 0.9417 - val_loss: 0.3810 - val_accuracy: 0.8813
Epoch 9/20
15/15 [==============================] - 0s 16ms/step - loss: 0.2145 - accuracy: 0.9124 - val_loss: 0.3235 - val_accuracy: 0.8750

কোনও মাত্রাতিরিক্ত মানানসই নেই তা নিশ্চিত হওয়ার জন্য পরীক্ষার ডেটাতে মূল্যায়ন পদ্ধতিটি চালানো যাক।

loss, accuracy = my_model.evaluate(test_ds)

print("Loss: ", loss)
print("Accuracy: ", accuracy)
5/5 [==============================] - 0s 3ms/step - loss: 0.2594 - accuracy: 0.8938
Loss:  0.25935786962509155
Accuracy:  0.893750011920929

তুমি এটি করেছিলে!

আপনার মডেল পরীক্ষা করুন

এরপরে, কেবলমাত্র YAMNet ব্যবহার করে পূর্ববর্তী পরীক্ষা থেকে এম্বেড করার জন্য আপনার মডেলটি চেষ্টা করুন।

scores, embeddings, spectrogram = yamnet_model(testing_wav_data)
result = my_model(embeddings).numpy()

infered_class = my_classes[result.mean(axis=0).argmax()]
print(f'The main sound is: {infered_class}')
The main sound is: cat

এমন একটি মডেল সংরক্ষণ করুন যা সরাসরি কোনও ওয়াভ ফাইল ইনপুট হিসাবে নিতে পারে

আপনি যখন ইনপুট হিসাবে এম্বেডিংগুলি দেন তখন আপনার মডেল কাজ করে।

একটি বাস্তব পরিস্থিতিতে আপনি এটিকে সরাসরি সাউন্ড ডেটা দিতে চাইবেন।

এটি করার জন্য আপনি YAMNet কে আপনার মডেলের সাথে একক মডেলে একত্রিত করবেন যা আপনি অন্যান্য অ্যাপ্লিকেশনগুলির জন্য রফতানি করতে পারেন।

মডেলটির ফলাফলটি ব্যবহার করা আরও সহজ করার জন্য, চূড়ান্ত স্তরটি reduce_mean একটি reduce_mean অপারেশন হবে। পরিবেশন করার জন্য এই মডেলটি ব্যবহার করার সময়, আপনি যেমন নমুনা দেখবেন, আপনার চূড়ান্ত স্তরটির প্রয়োজন হবে। আপনি যদি কোনওটিকে সংজ্ঞায়িত না করেন, টিএফ একটি বর্ধিত একটি স্বয়ংক্রিয়ভাবে সংজ্ঞায়িত করবে যা পরীক্ষার পক্ষে এটি শক্ত করে তোলে কারণ প্রতিবার আপনি মডেলটিকে প্রশিক্ষণ দিচ্ছেন এটি পরিবর্তন করতে থাকবে। কোনও কাঁচা টিএফ অপারেশন ব্যবহার করার সময় আপনি এটিকে কোনও নাম নির্ধারণ করতে পারবেন না। এই সমস্যাটির সমাধান করার জন্য, আপনি একটি কাস্টম স্তর তৈরি করবেন যা কেবল reduce_mean প্রয়োগ করে আপনি এটিকে 'শ্রেণিবদ্ধ' বলবেন।

class ReduceMeanLayer(tf.keras.layers.Layer):
  def __init__(self, axis=0, **kwargs):
    super(ReduceMeanLayer, self).__init__(**kwargs)
    self.axis = axis

  def call(self, input):
    return tf.math.reduce_mean(input, axis=self.axis)
saved_model_path = './dogs_and_cats_yamnet'

input_segment = tf.keras.layers.Input(shape=(), dtype=tf.float32, name='audio')
embedding_extraction_layer = hub.KerasLayer(yamnet_model_handle,
                                            trainable=False, name='yamnet')
_, embeddings_output, _ = embedding_extraction_layer(input_segment)
serving_outputs = my_model(embeddings_output)
serving_outputs = ReduceMeanLayer(axis=0, name='classifier')(serving_outputs)
serving_model = tf.keras.Model(input_segment, serving_outputs)
serving_model.save(saved_model_path, include_optimizer=False)
INFO:tensorflow:Assets written to: ./dogs_and_cats_yamnet/assets
INFO:tensorflow:Assets written to: ./dogs_and_cats_yamnet/assets
tf.keras.utils.plot_model(serving_model)

পিএনজি

এটি প্রত্যাশার মতো কাজ করে তা যাচাই করতে আপনার সংরক্ষিত মডেলটি লোড করুন।

reloaded_model = tf.saved_model.load(saved_model_path)

এবং চূড়ান্ত পরীক্ষার জন্য: কিছু সাউন্ড ডেটা দেওয়া হলে, আপনার মডেলটি কি সঠিক ফলাফল ফেরায়?

reloaded_results = reloaded_model(testing_wav_data)
cat_or_dog = my_classes[tf.argmax(reloaded_results)]
print(f'The main sound is: {cat_or_dog}')
The main sound is: cat

যদি আপনি কোনও সার্ভিং সেটআপে আপনার নতুন মডেলটি চেষ্টা করতে চান তবে আপনি 'সার্ভিং_ডিফল্ট' স্বাক্ষর ব্যবহার করতে পারেন।

serving_results = reloaded_model.signatures['serving_default'](testing_wav_data)
cat_or_dog = my_classes[tf.argmax(serving_results['classifier'])]
print(f'The main sound is: {cat_or_dog}')
The main sound is: cat

(Ptionচ্ছিক) আরও কিছু পরীক্ষা

মডেল প্রস্তুত।

পরীক্ষার ডেটাসেটে এটি YAMNet এর সাথে তুলনা করা যাক।

test_pd = filtered_pd.loc[filtered_pd['fold'] == 5]
row = test_pd.sample(1)
filename = row['filename'].item()
print(filename)
waveform = load_wav_16k_mono(filename)
print(f'Waveform values: {waveform}')
_ = plt.plot(waveform)

display.Audio(waveform, rate=16000)
./datasets/ESC-50-master/audio/5-208030-A-0.wav
Waveform values: [-8.1445188e-09  2.4434048e-08 -1.9069315e-08 ...  4.7743935e-03
  3.6899315e-03  9.6165243e-04]

পিএনজি

# Run the model, check the output.
scores, embeddings, spectrogram = yamnet_model(waveform)
class_scores = tf.reduce_mean(scores, axis=0)
top_class = tf.argmax(class_scores)
infered_class = class_names[top_class]
top_score = class_scores[top_class]
print(f'[YAMNet] The main sound is: {infered_class} ({top_score})')

reloaded_results = reloaded_model(waveform)
your_top_class = tf.argmax(reloaded_results)
your_infered_class = my_classes[your_top_class]
class_probabilities = tf.nn.softmax(reloaded_results, axis=-1)
your_top_score = class_probabilities[your_top_class]
print(f'[Your model] The main sound is: {your_infered_class} ({your_top_score})')
[YAMNet] The main sound is: Domestic animals, pets (0.9738913774490356)
[Your model] The main sound is: dog (0.999991774559021)

পরবর্তী পদক্ষেপ

আপনি সবেমাত্র এমন একটি মডেল তৈরি করেছেন যা কুকুর বা বিড়ালের শব্দগুলিকে শ্রেণিবদ্ধ করতে পারে। একই ধারণা এবং সঠিক ডেটা দিয়ে আপনি উদাহরণস্বরূপ, তাদের গাওয়ার ভিত্তিতে পাখি সনাক্তকারী তৈরি করতে পারেন।

আমাদের আপনার সাথে আসা কি জানি! আপনার প্রকল্পটি সোশ্যাল মিডিয়ায় ভাগ করুন।