"Kuru ürünler" şarkı türlerini tanımlamak için sinir ağını kullanır (kod eklenir)

Xinzhiyuan Raporu

DataSet: Bu makale GTZAN Genre Collection müzik veri setini kullanır, adres:

Bu veri seti, 10 farklı türde dağıtılmış 1000 farklı şarkı, tür başına 100 şarkı içerir ve her şarkı yaklaşık 30 saniye sürer.

Kullanılan kitaplık: Python kitaplığı librosa, şarkıların özelliklerini ayıklamak ve Mel-frekans cepstral katsayılarını (MFCC) kullanmak için kullanılır.

MFCC değeri insan işitme duyusunu taklit eder ve konuşma tanıma ve müzik türü tespitinde geniş bir uygulama yelpazesine sahiptir. MFCC değeri doğrudan sinir ağına girilecektir.

MFCC'yi Anlamak

MFCC'yi iki örnekle gösterelim. Lütfen Kick Loop 5 ve Whistling through Stereo Surgeon'u indirin. Biri bas davul, diğeri tiz düdük. Açıkça farklılar ve MFCC değerlerinin farklı olduğunu görebilirsiniz.

Koda gidelim (bu makale için tüm kod dosyaları Github bağlantısında bulunabilir).

Aşağıda, içe aktarmanız gereken içeriklerin bir listesi verilmiştir:

  • kütüphane

  • glob, dosyaları farklı dizin türlerinde listelemeniz gerekir

  • dizi

  • matplotlib, MFCC grafikleri çizin

  • Keras sıra modeli, tipik bir ileri beslemeli sinir ağı

  • Yoğun sinir ağı katmanı, yani birçok nöron içeren bir katman.

Örneğin, evrişimden farklı olarak, bir 2D gösterimi vardır. Her nöron katmanı için bir aktivasyon işlevi sağlamanıza izin veren içe aktarma aktivasyonunu ve sınıfın adını rock, disko vb. tek sıcak kodlama , Aşağıdaki gibi:

Bu şekilde, MFCC'nin değerini görüntülemek için resmi olarak bir yardımcı fonksiyon geliştirdiniz.

Önce şarkıyı yükleyin ve ardından MFCC değerini ondan çıkarın. Ardından, librosa kitaplığındaki spektrogram olan specshow'u kullanın.

Bu pedal tamburudur:

Düşük frekans: Kick döngüsü 5

Basın düşük frekanslarda çok belirgin olduğu görülebilir. Başka pek çok frekans gösterilmemiştir. Bununla birlikte, ıslık sesinin spektrogramı açıkça daha yüksek bir frekans temsiline sahiptir:

Yüksek frekans: Islık

Renk kırmızıya ne kadar koyu veya yakınsa, o frekans aralığında enerji o kadar büyük olur.

Sınırlı şarkı türü

Düdük sesinin frekansındaki değişiklikleri bile görebilirsiniz. İşte disko şarkılarının frekansları:

Şarkı türü / türü: Disco

İşte frekans çıkışı:

Disko Şarkıları

Atımları önceki çıktıda görebilirsiniz, ancak yalnızca 30 saniye uzunluğunda olduklarından, bireysel vuruşları görmek zordur. Klasik müzikle karşılaştırdığımızda, klasik müziğin çok fazla vuruşa sahip olmadığını, ancak sürekli bir bas çizgisine sahip olduğunu göreceksiniz.Örneğin, aşağıdaki çello bas çizgisi:

Şarkı türü: Klasik

İşte hip-hop müziğinin frekansları:

Şarkı türü: HipHop

HipHop şarkıları

Biraz diskoya benziyor ve aralarındaki ince farkları ayırt etmek bir sinir ağı problemidir.

Burada yalnızca MFCC değerini yükleyen başka bir yardımcı işlev daha var, ancak bu sefer sinir ağı için hazırlanıyorsunuz:

Aynı anda yüklenen şey şarkının MFCC değeridir ancak bu değerler -250 ile +150 arasında olabileceğinden sinir ağı için iyi değildir. -1 ila +1 veya 0 ila 1'e yakın bir değer girmeniz gerekir.

Bu nedenle, her şarkının maksimum ve mutlak değerini hesaplamak gerekir. Ardından tüm değerleri maksimum değere bölün. Ek olarak, şarkının uzunluğu biraz farklıdır, bu nedenle yalnızca 25.000 MFCC değerinin seçilmesi gerekir. Sinir ağına girdiğiniz şeyin boyutunun her zaman aynı olduğundan çok emin olmalısınız, çünkü yalnızca çok fazla giriş nöronu vardır ve ağ kurulduğunda değiştirilemez.

MFCC değerini ve tür adını almak için şarkıları sınırlayın

Daha sonra, tüm farklı türleri ve veri kümesindeki tüm şarkıları dolaşacak ve ardından MFCC değerini ve tür adını oluşturacak olan _features_and_labels adlı bir işlev vardır:

Yukarıdaki ekran görüntüsünde gösterildiği gibi, tüm özelliklerin ve etiketlerin bir listesini hazırlayın. 10 türün tümünden geçin. Her tür için, o klasördeki dosyaları kontrol edin. 'üretir /' + tür + '/ *. Au 'klasörü, veri kümesinin nasıl organize edildiğini gösterir.

Bu klasörü işlerken, her dosyanın 100 şarkısı olacaktır; özellikleri çıkarabilir ve bu özellikleri all_features.append (features) listesine koyabilirsiniz. Bu şarkının tür adının da bir listede listelenmesi gerekir. Bu nedenle, sonunda tüm özellikler 1000 giriş içerecek ve tüm etiketler de 1000 giriş içerecektir. Tüm özellikler söz konusu olduğunda, bu 1.000 girişin her biri 25.000 girişe sahip olacaktır. Bu 1000 x 25000'lik bir matristir.

Tüm güncel etiketler için blues, classic, country, disco, hip-hop, caz, metal, pop, reggae ve rock gibi kelimeleri içeren 1000 giriş listesi bulunmaktadır. Bu bir sorundur çünkü sinir ağı kelimeleri veya harfleri tahmin etmez. Ona tek sıcak kodlama vermeniz gerekiyor, bu da buradaki her kelimenin on ikili sayı olarak temsil edileceği anlamına geliyor.

  • Blues söz konusu olduğunda, 1'den sonra 9 sıfır gelir.

  • Klasik (klasik) durumda, 0'ı 1 ve ardından 9 sıfır gelir. Ve bunun gibi. İlk olarak, tüm benzersiz adları hesaplamak üzere bunları tamsayı olarak döndürmek için np.unique (all_labels, return_inverse = True) komutunu kullanın. Ardından, bu tam sayıları tek etkin kodlamaya dönüştürmek için to_categorical işlevini kullanın.

Yani, döndürülen şey 1000x10 boyutudur. 1000 şarkı olduğu için, her şarkıda tek sıcak kodlamayı temsil eden 10 ikili sayı vardır. Ardından, bir araya getirilen tüm özellikleri, onehot_labels'ı tek bir matrise ve tek sıcak matrise döndürmek için return np.stack (all_features) komutunu kullanın. Bu nedenle, üst işlevi çağırın ve özellikleri ve etiketleri kaydedin:

Doğruluğu sağlamak için, lütfen aşağıdaki ekran görüntüsünde gösterildiği gibi özellikleri ve etiket şeklini yazdırın. Karakteristik 1000 × 25000 ve etiket 1000 × 10'dur. Şimdi, veri kümesini bir sütuna bölün ve bölünmeyi test edin. Bölmeyi gerçekleştirmek için işaretlerin% 80'ini training_split = 0.8 olarak tanımlayın:

Ardından, sinir ağını oluşturun:

Sıralı bir sinir ağı elde edeceksiniz. İlk katman, 100 nörondan oluşan yoğun bir katmandır. İlk katmanda, giriş boyutunu veya giriş şeklini, bu örnekte 25000 vermeniz gerekir.

Bu, her örneğin kaç tane girdi değerine sahip olduğunu gösterir. İlk katmanda 25000100'e bağlanacaktır.

İlk katman, giriş, ağırlık ve önyargı terimlerinin ağırlıklı toplamını gerçekleştirecek ve ardından relu aktivasyon işlevini çalıştıracaktır. relu, 0'dan küçük herhangi bir şeyin 0 olacağı ve 0'dan yüksek herhangi bir şeyin değerin kendisi olacağı anlamına gelir.

Daha sonra bu 100, çıktı katmanı olan diğer 10'a bağlanacaktır. Nedeni 10, çünkü tek sıcak kodlamayı tamamladınız ve kodlamada 10 ikili sayı var.

Kodda kullanılan aktivasyon softmax, 10'un çıktısını almanızı ve toplamları 1'e kadar çıkacak şekilde normalleştirmenizi söyler. Bu şekilde, sonunda olasılıklar haline gelirler. Şimdi 10 arasında en yüksek puanı veya en yüksek olasılığı tahmin olarak düşünün. Bu, doğrudan en yüksek sayı konumuna karşılık gelecektir. Örneğin, 4. konumdaysa diskodur.

Ardından modeli derleyin, Adam gibi bir iyileştirici seçin ve kayıp fonksiyonunu tanımlayın. Birden fazla çıktınız olduğundan, sınıflandırma çapraz entropi gerçekleştirmek ve doğruluğu ölçmek isteyebilirsiniz, böylece her zaman gösterilen kayba ek olarak, değerlendirme sırasında doğruluğu da görebilirsiniz. Ancak doğruluk daha anlamlıdır. Ardından, model.summary yazdır, katman hakkında size ayrıntılı bilgi verecektir. Şöyle görünüyor:

100 nörondan oluşan birinci katmanın çıktı şekli 100 değer olmalıdır çünkü 100 nöron vardır ve yoğun ikinci katmanın çıktısı 10'dur çünkü 10 nöron vardır. Öyleyse neden ilk katmanda 2,5 milyon parametre veya ağırlık var? Bunun nedeni 25.000 girişinizin olmasıdır.

25.000 girişiniz var ve her giriş 100 yoğun nörondan birine gidiyor. Bu nedenle, bu 2,5 milyondur ve sonra 100 ekleyin, çünkü 100 nöronun her birinin kendi önyargı terimi vardır ve kendi önyargı ağırlığının da öğrenilmesi gerekir.

Yaklaşık 2,5 milyon parametreniz veya ağırlığınız var. Ardından, uygunluğu çalıştırın. Bu, eğitim girdisi ve eğitim etiketleri gerektirir ve istediğiniz dönem sayısını elde edin. 10 istiyorsan, eğitimli girişte 10 kez tekrar et. Bu sayıyı size söylemesi için bir grup boyutuna ihtiyacı vardır. Bu durumda, ağırlık güncellenmeden önce şarkının çaprazlanması gerekir; ve validation_split 0,2'dir, bu da eğitim girdisinin% 20'sinin alınması ve bölünmesi gerektiği anlamına gelir. Aslında, bir hak yoktur Her dönemden sonra ne kadar iyi performans gösterdiğini değerlendirmek için onu eğitir ve kullanır. Aslında, doğrulama bölümü hiç eğitilmemiştir, ancak doğrulama bölümü ilerlemeyi istediğiniz zaman kontrol etmenizi sağlar.

Son olarak, eğitim ve testi önceden ayırdığınız için, test ve test verilerini değerlendirin ve test verilerinin kaybını ve doğruluğunu yazdırın. Aşağıdakiler eğitim sonuçlarıdır:

Çalışırken yazdırır ve her zaman kayıp ve doğruluk yazdırır. Bu, doğrulama setinde değil, eğitim setinin kendisinde olduğundan, bu 1.0'a çok yakın olmalıdır. 1.0'a yakın olmasını istemeyebilirsiniz, çünkü aşırı uyumu temsil edebilir, ancak yeterince uzun sürmesine izin verirseniz, eğitim setini hatırladığı için genellikle eğitim setinde 1.0 hassasiyetine ulaşacaktır.

Gerçekten önemsediğiniz şey, bir test setinin kullanılmasını gerektiren doğrulamanın doğruluğu. Test seti, daha önce hiç görülmemiş, en azından eğitim için olmayan verilerdir. Nihai doğruluk, önceden ayırdığınız test verilerine bağlıdır. Şimdi doğruluğunuz yaklaşık% 53. Bu düşük görünebilir, ancak 10 farklı tür olduğunu unutmayın. Rastgele tahminin doğruluğu% 10'dur, bu nedenle bu, rastgele tahmin etmekten çok daha iyidir.

marsyasweb.appspot.com/download/data_sets/.GTZAN Tür Koleksiyonu

https://freesound.org/people/Stereo Cerrah / sesler / 266093 /

https://freesound.org/people/grrlrighter/sounds/98195/

orijinal:

https://medium.com/@navdeepsingh_2336/identifying-the-genre-of-a-song-with-neural-networks-851db89c42f0

Xinzhiyuan AI DÜNYA 2018

Dünya Yapay Zeka Zirvesi Tam inceleme

Xinzhiyuan, 20 Eylül'de Pekin'deki Ulusal Kongre Merkezi'nde AI WORLD 2018 Dünya Yapay Zeka Zirvesi'ne ev sahipliği yaptı. Makine zekası ve insan kaderi.

Xinzhiyuan AI World 2018'in büyük olayını hatırlatarak:

IQIYI

Sabah: https://www.iqiyi.com/v_19rr54cusk.html

Öğleden sonra: https://www.iqiyi.com/v_19rr54hels.html

Sina:

Hangzhou "gizemli adam" 340.000 "Wandering Earth" e katıldı ve 3 milyon kazandı? Bir iş fırsatı mı görüyorsunuz? Gerçek o kadar basit değil!
önceki
Markanın yükselen trendini desteklemek için çifte çaba gösteren BAIC Saova, genç bir ekolojiye odaklanıyor
Sonraki
Bu bir polis itirafı: Hey, ne zamandır birlikteyiz?
Guangzhou konut fiyatları
Baowo BX5 gibi alternatif bir yerli ürün, sıkıcı tasarımı ve mükemmel mekanik nitelikleri nedeniyle nasıl kullanılır?
"Android'in Babası" cinsel taciz skandalı nedeniyle istifa etti, Google sadece korunmakla kalmadı, 90 milyon dolar verdi
Karısı ölümden kurtulduktan sonra 6 kelime yazdı ve kocası yerinde acı acı ağladı! Netizen: Böyle bir adam doğru evlendi
Makine öğrenimi belgeleri, "su enjeksiyon araştırması" nda uzmanlaşmak için "ön kayıt" ve ön inceleme gerektirir!
Lüksü yeniden tanımlayan Lexus amiral gemisi sedan Lexus LS, on yılın sonunda yerini alacak
2018 Hipokampus S5: İllüzyonu kırın, gençliğin gerçeğini ve özgürlüğünü görün
Japonca "CCTV" Çince programları başlattı. Tüm dünya Çince konuşuyor!
Guo Ailun, maçtan sonra kariyerine dönüp ağlamasının nedenini ortaya çıkardı ve amcası tarafından alay konusu oldu.
Tokyo Motor Show'da görülmeye en değer beş konsept otomobil: Japon markaları için tasarımın bir sonraki aşamasına mı liderlik ediyorsunuz?
Bazı şehirlerde konut fiyatlarına ilişkin görüşler
To Top