在这个实验里我们用的原始资料集在这里下载
或是直接从这里下载 csv 跟 notebook 就好
这个资料集名称叫做 GTZAN ,里头一共有 10 种类型的音乐,每种类型有 100 首歌曲,每首歌曲都是 30 秒钟
这 10 种音乐类型为:
0: "disco",
1: "metal",
2: "reggae",
3: "blues",
4: "rock",
5: "classical",
6: "jazz",
7: "hiphop",
8: "country",
9: "pop"
除此之外,他很好心的帮我们把 features 萃取出来了,你还会额外有两个 csv 档,分别是 features_3_sec 跟 features_30_sec
features_3_sec 把一首 30 秒的歌切成 10 个音框,每个音框 3 秒,然後计算每 3 秒的 features,所以他的features 数是原本的 10 倍
我们就用它提供给的 csv 档来做即可
import pandas as pd
import numpy as np
from sklearn.preprocessing import LabelEncoder
data = pd.read_csv("features_3_sec.csv")
data.head()
# (9990,60)
data.shape
# 移除有档名的那栏
data = data.drop(labels='filename',axis=1)
# 最後一栏是类别 (str)
class_list = data.iloc[:,-1]
# 用 LabelEncoder 帮我们把类别编码
convert = LabelEncoder()
y = convert.fit_transform(class_list)
y
x = data.iloc[:,:-1]
x
接着我们要把喂进去的 feature data 常态分布化,这样平均值会变成 0, 标准差变为 1,使离群值影响降低
from sklearn.preprocessing import StandardScaler
fit = StandardScaler()
X = fit.fit_transform(np.array(x,dtype=float))
再切分成 train, valid 两份 data
from sklearn.model_selection import train_test_split
X_train,x_test, Y_train, y_test = train_test_split(X,y,test_size=0.2)
print(len(Y_train),len(y_test))
开始 build 我们的模型吧,单纯用 FCN 就好了
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential(
[
Dense(512,input_shape=(X_train.shape[1],),activation='relu'),
Dense(256,activation='relu'),
Dense(128,activation='relu'),
Dense(64,activation='relu'),
Dense(10,activation='softmax')
]
)
model.summary()
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics='accuracy')
开 Train
history = model.fit(
X_train,
Y_train,
validation_data=(x_test,y_test),
epochs=600,
batch_size=128
)
到这里差不多 test data 就有 9 成的准确率了,我们来看一下 loss 长怎样
from matplotlib import pyplot
pyplot.plot(history.history['loss'], label='train')
pyplot.plot(history.history['val_loss'], label='test')
pyplot.legend()
pyplot.show()
其实你会发现比较恼人的部分是在萃取资料的 feature,以这个资料集来说一段音乐用了 60 个 feature,如果想要试在其他音乐上的话就必须生出那 60 个 feature。当然也可以试着用比较少的 feature 来做,但效果在这个 model 上就会开始变差,或是要训练的更久才能一样好。总而言之,我们确实证明了声音的 feature 是可以让机器来区别音乐种类的。
>>: [Day 4] 资料产品第二层 - 资料加工术 - 资料验证与清洗
Leetcode #2. Add Two Numbers 简单来说就是要做两个链结的加总 ex.1 ...
来到了第 26 天,其实我们快把所有的模组都走过一遍了,今天是最後一天单独介绍某个特色的,接下来 3...
09-02-2021 如何开始使用React 本章内容 将React加到网页中 只需部分使用时 建立...
#12. Drawing App 这次要挑战的是比小画家还阳春的绘图app,会利用到canvas a...
立即函式简介 立即函式 IIFE (Immediately Invoked Function Exp...