阿里云——零基础入门语音识别——食物声音识别——代码跑通及解析

大佬代码在这
我也是个垃圾,初学者练习这个项目,我认为第一步是熟悉这个平台的使用,这种云编程不同于pycharm,初学者可能会感觉十分别扭(比如垃圾的我),所以我在这个笔记里尽可能详细的说一下如何让大佬代码在自己的notebook里跑一边,只有知道了总体流程,才能写出属于自己的东西。

强调一下,代码是大佬的,我们只是借鉴一下,所以想要有所进步,还需要自己的努力。
零基础入门语音识别——食物声音识别
打开我给的连接,会是这个样子
![在这里插入图片描述](https://img-blog.csdnimg.cn/eabb06b2c546490d843e3b74b10在这里插入图片描述

该注册的注册,该登录的登录。
然后报名参赛。
以后就可以在自己的个人中心找到了
在这里插入图片描述
进入比赛,点击论坛,新建notebook(建议用这种方式新建,因为这样你的notebook会自动挂载比赛所需要的数据集,当然,今天跑的代码不需要)
在这里插入图片描述
然后会是这样的,可以在左下角新建,这时,你的代码是无法修改的,记住带点击右上角的编辑,进入notebook,

在这里插入图片描述
进入以后把这些没用的删了,用小剪刀这个工具,
在这里插入图片描述
然后点击+号,新建cell,把这篇文章开头的链接的大佬的代码复制过去,不要漏,然后从上往下,依次运行(单个三角形),注意一定要确定当前这个框里的代码全部跑完再运行下一行。
在这里插入图片描述
这个*号代表正在运行,
在这里插入图片描述
空的代表没有运行,
在这里插入图片描述
数字代表的是成功运行的,注意数字的顺序,一定要的按顺序的,如果出现12324这种,代表你分步运行时出错了,
当然,你也可以点击双三角在这里插入图片描述
直接运行所有,但是我觉得初学者还是一步一步的看到代码运行的状态,对学习帮助更好一些(因人而异把)

特别强调,对于基本没有接触过深度学习的小白来说,代码运行时间绝对会是一个难忘的经历,我运行了

运行成功了

好了,现在开始进行解释:

!wget http://tianchi-competition.oss-cn-hangzhou.aliyuncs.com/531887/train_sample.zip

!wget你可以理解为netebook用来下载数据的命令

!unzip -qq train_sample.zip
!\rm train_sample.zip

使用unzip函数解压缩,通过\rm将压缩包删除
所以,对于训练集和测试集,我们先下载好压缩包,解压后删除原本压缩包。

# 基本库

import pandas as pd
import numpy as np

from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.model_selection import GridSearchCV

from sklearn.preprocessing import MinMaxScaler

1、train_test_split返回切分的数据集train/test。
将训练集划分为训练集和测试集,这点和机器学习相同。
随机划分样本数据为训练集和测试集的,当然也可以人为的切片划分。

2、
sklearn.metrics里面会有很多的评价指标,即用于检验机器学习模型效果的定量指标。
sklearn中的classification_report函数用于显示主要分类指标的文本报告.在报告中显示每个类的精确度,召回率,F1值等信息。

3、GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数。
(GridSearchCV的名字其实可以拆分为两部分,GridSearch和CV,即网格搜索和交叉验证。这两个名字都非常好理解。网格搜索,搜索的是参数,即在指定的参数范围内,按步长依次调整参数,利用调整的参数训练学习器,从所有的参数中找到在验证集上精度最高的参数,这其实是一个训练和比较的过程。)

4、MinMaxScaler的功能是将每个元素(特征,feature)转换成给定范围的值。
(对数据进行预处理的,主要功能可以概括成标准化和归一化。MinMaxScaler是一个归一化的函数,可以将范围所放在指定的范围区间内)

# 加载深度学习框架(搭建分类模型所需要的库)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPool2D, Dropout
from tensorflow.keras.utils import to_categorical 
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC

#加载音频处理库
pip install librosa --user

# 其他库
import os
import librosa
import librosa.display
import glob 

加载深度学习框架(搭建分类模型所需要的库)

keras系列︱Sequential与Model模型、keras基本结构功能(一)
sklearn.ensemble库,支持众多集成学习算法和模型。
RandomForestClassifier是非常具有代表性的Bagging集成算法,它的所有基评估器都是决策树,分类树组成的森林就叫做随机森林分类器,回归树所集成的森林就叫做随机森林回归器。

sklearn.svm库支持向量机,主要用于分类,回归和异常检测。SVC全称是C-Support Vector Classification,是一种基于libsvm的支持向量机,由于其时间复杂度为O(n^2),所以当样本数量超过两万时难以实现。
keras网络结构(关于keras先了解一下,我学习后再做笔记)
在这里插入图片描述
#加载音频处理库
pip install librosa --user
下面的感兴趣仔细看一下,不想看的话就跳过吧,反正知道这个库时用来处理声音数据的就行了,大佬的代码里用到的东西,我还会再仔细说明的。
原文在这里
在这里插入图片描述
其他:
os 是python环境下对文件,文件夹执行操作的一个模块。

librosa.display模块并不默认包含在librosa中,使用时要单独引入,是用来做音频特征的显示。

glob是UNIX程序,用来匹配路径文件名

好了,现在我们已经把数据集下载好了,并且把要用到的库也导入了,该进行数据集的处理了

#特征提取及数据集的创建
feature = []
label = []
# 建立类别标签,不同类别对应不同的数字。
label_dict = {'aloe': 0, 'burger': 1, 'cabbage': 2,'candied_fruits':3, 'carrots': 4, 'chips':5,
                  'chocolate': 6, 'drinks': 7, 'fries': 8, 'grapes': 9, 'gummies': 10, 'ice-cream':11,
                  'jelly': 12, 'noodles': 13, 'pickles': 14, 'pizza': 15, 'ribs': 16, 'salmon':17,
                  'soup': 18, 'wings': 19}
label_dict_inv = {v:k for k,v in label_dict.items()}

做好上述准备以后,我们开始进入数据的特征提取,首先建立特征值矩阵,以及标签矩阵,给不同的声音建立类别名称以及唯一的数字编号与之对应,然后将数字编号和类别调换位置,从矩阵的角度看是逆矩阵
在这里插入图片描述

from tqdm import tqdm
def extract_features(parent_dir, sub_dirs, max_file=10, file_ext="*.wav"):
    c = 0
    label, feature = [], []
    for sub_dir in sub_dirs:
        for fn in tqdm(glob.glob(os.path.join(parent_dir, sub_dir, file_ext))[:max_file]): # 遍历数据集的所有文件
            
           # segment_log_specgrams, segment_labels = [], []
            #sound_clip,sr = librosa.load(fn)
            #print(fn)
            label_name = fn.split('/')[-2]
            label.extend([label_dict[label_name]])
            X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
            mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram),并把它作为特征
            feature.extend([mels])
            
    return [feature, label]

Tqdm 库,它是一个快速,可扩展的Python进度条,可以在 Python 长循环中添加一个进度提示信息,用户只需要封装任意的迭代器 tqdm(iterator)。在这里插入图片描述
你在notebook里面看到的红色的进度条就是这个库,防止深度学习时间太长,而你认为电脑卡住了。。。。如下就是在notebook里面的表现。
在这里插入图片描述
定义一个函数extract_features对输入的路径下的音频文件提取特征值
对定义的函数里面一些函数的解释:
1、glob.glob链接在这
glob.glob(pathname) 返回所有匹配的文件路径列表。它只有一个参数 pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。用这个函数返回文件路径的信息,链接里面例子挺好的。

2、python路径拼接os.path.join()函数的用法链接在这
在这里插入图片描述
在大佬的代码里,大佬按照顺序把父目录,子目录,文件拼接成一条路径,方便后续操作。
3、librosa.load官方文档链接
链接是librosa官方文档,十分全面,如果只想看.load的内容点击这里
在这里插入图片描述
res_type=‘kaiser_fast’:高速度

4、librosa.feature.melspectrogram
计算梅尔频谱(mel spectrogram),并把它作为特征

这个函数的返回值[feature, label],特征和标签

函数已经定义好了,接下来开始使用了

# 自己更改目录
parent_dir = './train_sample/'
save_dir = "./"
folds = sub_dirs = np.array(['aloe','burger','cabbage','candied_fruits',
                             'carrots','chips','chocolate','drinks','fries',
                            'grapes','gummies','ice-cream','jelly','noodles','pickles',
                            'pizza','ribs','salmon','soup','wings'])

# 获取特征feature以及类别的label
temp = extract_features(parent_dir,sub_dirs,max_file=100)

上面这段代码就不细讲了,调用函数罢了。



将特征矩阵创建为ndarray数组,这是利用了numpy相较于python的array (对象实际为指向内存位置的指针)的计算的优势,并将得到的数组进行转置。

temp = np.array(temp)
data = temp.transpose()



# 获取特征
X = np.vstack(data[:, 0])

# 获取标签
Y = np.array(data[:, 1])
print('X的特征尺寸是:',X.shape)
print('Y的特征尺寸是:',Y.shape)

np.vstack函数的作用是按垂直方向(行顺序)堆叠数组构成一个新的数组,
在这里插入图片描述

# 在Keras库中:to_categorical就是将类别向量转换为二进制(只有0和1)的矩阵类型表示
Y = to_categorical(Y)

在这里插入图片描述


'''最终数据'''
print(X.shape)
print(Y.shape)



X_train, X_test, Y_train, Y_test = train_test_split(X, Y, random_state = 1, stratify=Y)
print('训练集的大小',len(X_train))
print('测试集的大小',len(X_test))

说一下random_state = 1,计算机伪随机,需要种子,然后还有一个参数,怕你不好找,我截图了。
在这里插入图片描述
这是翻译:
在这里插入图片描述


X_train = X_train.reshape(-1, 16, 8, 1)
X_test = X_test.reshape(-1, 16, 8, 1)



建立模型

搭建CNN网络

准备工作做了那么多,该进行和深度学习有关的知识了。

model = Sequential()

# 输入的大小
input_dim = (16, 8, 1)

model.add(Conv2D(64, (3, 3), padding = "same", activation = "tanh", input_shape = input_dim))# 卷积层
model.add(MaxPool2D(pool_size=(2, 2)))# 最大池化
model.add(Conv2D(128, (3, 3), padding = "same", activation = "tanh")) #卷积层
model.add(MaxPool2D(pool_size=(2, 2))) # 最大池化层
model.add(Dropout(0.1))
model.add(Flatten()) # 展开
model.add(Dense(1024, activation = "tanh"))
model.add(Dense(20, activation = "softmax")) # 输出层:20个units输出20个类的概率

# 编译模型,设置损失函数,优化方法以及评价标准
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics = ['accuracy'])

搭建cnn网络,这些内容在这篇文章里,我没法细讲了,最近我会好好写一篇卷积神经网络的笔记。如果你学了cnn,我觉得上面的代码不用讲。


看一下模型
model.summary()



# 训练模型
model.fit(X_train, Y_train, epochs = 20, batch_size = 15, validation_data = (X_test, Y_test))

到了模型训练的环节,前期所有的准备都是为了这行代码,当然,深度学习的灵魂也在这里,这里是最耗费时间的地方,请做好思想准备,最好晚上睡觉的时候运行这段代码。。。毕竟cpu8个小时跑不完(哭死),建议打开gpu(但是没排上队(再次哭死))



预测测试集

def extract_features(test_dir, file_ext="*.wav"):
    feature = []
    for fn in tqdm(glob.glob(os.path.join(test_dir, file_ext))[:]): # 遍历数据集的所有文件
        X, sample_rate = librosa.load(fn,res_type='kaiser_fast')
        mels = np.mean(librosa.feature.melspectrogram(y=X,sr=sample_rate).T,axis=0) # 计算梅尔频谱(mel spectrogram),并把它作为特征
        feature.extend([mels])
    return feature
X_test = extract_features('./test_a/')
X_test = np.vstack(X_test)
predictions = model.predict(X_test.reshape(-1, 16, 8, 1))
preds = np.argmax(predictions, axis = 1)
preds = [label_dict_inv[x] for x in preds]

path = glob.glob('./test_a/*.wav')
result = pd.DataFrame({'name':path, 'label': preds})

result['name'] = result['name'].apply(lambda x: x.split('/')[-1])
result.to_csv('submit.csv',index=None)

列示出测试集下所有的音频文件行数


!ls ./test_a/*.wav | wc -l

显示文件的行数,其中包含了total的一行,所以比上述的音频文件行数多一行

!wc -l submit.csv

结尾这部分做的不是特别好。。。。
在这里插入图片描述

  • 4
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 阿里云天池大赛是一个非常有名的数据科学竞赛平台,其中机器学习竞赛是其中的一个重要组成部分。在这个竞赛中,参赛者需要使用机器学习算法来解决各种各样的问题,例如图像识别、自然语言处理、推荐系统等等。 机器学习竞赛的解题过程通常包括以下几个步骤: 1. 数据预处理:参赛者需要对提供的数据进行清洗、特征提取、数据转换等操作,以便于后续的建模和训练。 2. 模型选择:参赛者需要选择适合当前问题的机器学习算法,并对其进行调参和优化。 3. 模型训练:参赛者需要使用训练数据对模型进行训练,并对训练过程进行监控和调整。 4. 模型评估:参赛者需要使用测试数据对模型进行评估,以确定其在实际应用中的性能表现。 5. 结果提交:参赛者需要将最终的模型结果提交到竞赛平台上进行评估和排名。 在机器学习竞赛中,成功的关键在于对问题的深入理解和对机器学习算法的熟练掌握。同时,参赛者还需要具备良好的团队合作能力和沟通能力,以便于在竞赛中取得更好的成绩。 ### 回答2: 阿里云天池大赛是一个非常受欢迎的机器学习竞赛平台,它汇集了大量来自世界各地的数据科学家,分享了一系列有趣的竞赛和可用的数据集,供参赛选手使用。机器学习篇中,我们将解析一些常见的阿里云天池大赛题目,让大家对机器学习竞赛有更深入的了解。 一、赛题选取 阿里云天池大赛的赛题通常与商业、医疗等复杂领域相关,选择数据集时要了解行业背景和数据质量,以准确地判断模型的准确性和适用性。此外,在选择赛题时,还要考虑与参赛选手一起合作的可能性,以及他们可能使用的算法和技术。因此,为了成功解决赛题,参赛者应当仔细研究题目的背景、数据、分析目标等内容,有助于更好地理解问题及其解决方案。 二、数据清洗 参赛者在使用数据时,需要对其进行实质性的预处理和清洗工作,以减少不准确的数据对结果的影响。预处理和清洗包括基本的数据处理,例如缺失值、异常值和重复值的处理,还需要利用可视化和探索性数据分析等技术来检查数据的分布情况、相互关系和异常值等问题。 三、特征选择 在构建模型之前,参赛选手必须确定哪些特征会对问题的解决产生实际影响。这个过程称为特征选择,它旨在通过保留最相关的特征来减少模型复杂性,提高准确性,并且还有助于减少数据集的维数。特征选择包括基于统计学和机器学习的算法,同时应该考虑特征的相关性和重要性。 四、建模和评估 参赛者在解决问题时,需要考虑使用何种算法,以及如何构建对应的模型。此外,还需在不同的算法和模型之间进行比较,并选择最优模型。最后,应该针对模型进行评估,以确保各种重要性能指标(例如准确性,召回率,精确度等)都得到最佳表现。 总的来说,机器学习是一种复杂而令人兴奋的技术,参赛者要考虑数据质量、数据清洗、特征选择、建模和评估等诸多因素。通过参加阿里云天池大赛,大家可以不断学习和练习,不仅提升自己的技能,同时还有机会获得丰厚的奖励。 ### 回答3: 阿里云天池大赛是一个集数据竞赛、人才选拔、行业交流、技术分享、产学研合作等多种功能于一体的大型平台。其中,机器学习篇的赛题挑战包括了各种典型机器学习场景,旨在挖掘数据中价值,提高数据应用和解决实际问题的能力。 在机器学习篇的赛题中,常见的任务包括分类、回归、聚类、推荐等,其中分类问题是最常见的任务之一。分类可以分为二分类、多分类、超大规模分类等多个子类型。对于分类问题,大家需要学习分类算法,如KNN、NB、SVM、LR、GBDT、XGBoost等,并熟悉如何调参等技巧。 回归问题主要是根据给定的样本数据,预测一个连续的数值。回归问题旨在找到独立变量(X)和连续依赖变量(Y)之间的关系,以便使用该模型来预测连续依赖变量的值。对于回归问题,大家需要掌握线性回归、岭回归、Lasso回归、ElasticNet回归等算法。 聚类问题是将相似的数据划分到同一类别中,相似度较高,不同类别之间相似度较低。对于聚类问题,大家需要学习如何使用K-means、DBSCAN、Hierarchical聚类算法。 推荐问题是根据用户的行为习惯,预测用户的需求,以便将相应的内容推荐给用户。推荐问题的数据通常包括用户的行为、物品的属性和用户的评分。推荐问题常用的算法包括CF、ALS、LFM等。除此之外,还有深度学习在图像识别、语音识别、自然语言处理、推荐、游戏AI等方面具有广泛的应用,如CNN、RNN、LSTM、GAN等。 总之,机器学习篇的赛题挑战涉及到各种典型机器学习算法和应用场景,需要大家掌握基础理论和实践技巧,并多参加实战项目和比赛练习,不断提升自己的能力和水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值