
9.4
FFT
を用いて最初の分類器を作成する
179
列の最初の1000個だけを使用することにします。今の私たちの知識では、音楽ジャンル分類に関し
て、この1000個が最も重要な要素であるかどうかを知りません(先ほどのFFTをプロットした例で
は、周波数が1000Hz以下を多く占めていることはわかりますが)。後ほどこの要素の範囲を変更する
ときは、もちろんFFTのキャッシュファイルを生成し直す必要があります。
def create_fft(fn):
sample_rate, X = scipy.io.wavfile.read(fn)
fft_features = abs(scipy.fft(X)[:1000])
base_fn, ext = os.path.splitext(fn)
data_fn = base_fn + ".fft"
np.save(data_fn, fft
_features)
ここではNumPyの
save()
という関数を用いてデータを保存します。その関数を使うと、「
.npy
」
という拡張子が追加されます。私たちは、訓練または予測に用いる全ての WAVファイルに一度だけこ
の関数を用います。
FFTの読み込みに関連する部分は
read_fft()
という関数で、次のようになります。
def read_fft(genre_list, base_dir=GENRE_DIR):
X = []
y = []
for label, genre in enumerate(genre_list): ...