【放假第3天】人工智能-分类器项目案例和神经网络算法

02基于傅里叶变换的音乐识别

先前我们是把-有特点-的30s给抽取出来了,如果不是可能会带来困难

傅里叶变换
把时间轴上的数据转变为频率轴上的数据
波峰和波谷变换的越快,频率越大

应用:
识别
对于很刺耳的声音还可去噪音

不需要了解公式
在scipy这个模块下面fft函数
在这里插入图片描述

#跟先前学的那个....就当复习巩固吧
#准备音乐数据

import numpy as np
from sklearn import linear_model,datasets
import matplotlib.pyplot as plt
from scipy.stats import norm
from scipy import fft
from scipy.io import wavfile
#wavfile是读取wav格式的音乐文件  但是他不能读取au格式的,所以转成了,不是简单加了个wav后缀



#无论你的歌是30s还是3min,都是存这个多,占得磁盘的空间也一样
def create_fft(g,n):
    #果然不熟悉啊,还在纠结g,g就是参数呀
    rad="C:/Users/Michelle/Desktop/data/1215 AI/trainset/"+g+"/converted"+g+"."+str(n).zfill(5)+".au.wav"
    #上次做project就是纠结这个类型的怎么写,还是没掌握好知识啊,浪费那么多时间,一个个傻瓜式输入
    sample_rate,x=wavfile.read(rad) #这是个元祖,采样率   猜的越多,信息损失越少
    fft_features=abs(fft(x)[:1000])#取了1000个hz
    sad="C:/Users/Michelle/Desktop/data/1215 AI/trainset/"+g+str(n).zfill(5)+".fft"
    #存到某个具体的路径中去 但是后面生成的是fft.npy,不用管  
    np.save(sad,fft_features)

    
#create fft
genre_list=["classical","jazz","country","pop","rock","metal"]
for g in genre_list:
    #100是序列的index的索引号  0-99
    for n in range(100):
        create_fft(g,n)

        
#加载训练数据集,分割训练集和测试集,进行分类器训练
#构造训练集

genre_list=["classical","jazz","country","pop","rock","metal"]
x=[]
y=[]
for g in genre_list:
    for n in range(100):
        rad="C:/Users/Michelle/Desktop/data/1215 AI/trainset/"+g+'.'+str(n).zfill(5)+".fft"+".npy"
        fft_features=np.load(rad)
        x.append(fft_features)#1000行特征值
        y.append(genre_list.index(g))#就是前面的类别

x=np.array(x)        
y=np.array(y)
#sklearn 通常不能读原始list 变成二维数组类型


#使用sklearn来构造两种分类器
from sklearn.linear_model import LogisticRegression
model=LogisticRegression()  #创建一个对象
#也可以设定参数
#model=LogisticRegression(multi_class='ovr',solver='sag',max_iter=1000)
model.fit(x,y)

'''
#可以采用python内建的持久性模型 pickle 来保存 scikit的模型
#https://blog.csdn.net/answer3lin/article/details/84791576
import pickle
s=pickle.dumps(clf)#把model传进到clf里面 就可以接着使用这个模型
clf2=pickle.loads(s)
clf2.predict(x[0])

'''

print("Starting read wavfile...")
sample_rate,test=wavfile.read("C:/Users/Michelle/Desktop/data/1215 AI/trainset/sample/heibao-wudizirong-remix.wav")
testdata_fft_features=abs(fft(test))[:1000]
print(sample_rate,testdata_fft_features,len(testdata_fft_features))
type_index=model.predict([testdata_fft_features])[0]
print(type_index)
print(genre_list[type_index])#把上面的index传进来转成具体类型

注意:音乐分为单声道和双声道。因为两个耳朵不一样,会产生立体声的感觉,这个代码是单声道的

04人工神经网络开始
机器学习–拟人

有监督的机器学习

多元线性回归
回归/预测

逻辑回归
分类

神经网络(仿生)
预测
非线性的算法,非线性的算法可以来解决更加复杂的问题
神经网络算法也是后面深度学习的时候的基础
ANN artificial neural network
MLP multiple layer percepton
CNN RNN

Q:神经网络需要考虑的基本要素有哪些?
A:1,激活函数的选择,对应神经元里面的逻辑,两部分,相乘相加和非线性的变化,相乘相加是固定不变的
非线性的变化可以有很多选择,根据效果来
2,网络拓扑结构,处理更加复杂的问题,就需要更多的网络层,就需要每层上面设置更多的人工神经元
3,在去求解神经网络模型的时候,w0…wn,选择什么样优化算法,SGD一样适用!

Q:激活函数有哪些?
A:1,Sigmoid函数,0到1之间 2,Tangent函数,-1到1之间 3,Relu函数,max(0,x)

Q:神经网络算法的隐藏层意义何在?
A:1,如果有隐藏层的话,就多了推理有演绎的能力
2,每多一个隐藏层,推理和演绎的过程更多,考虑的更深入
3,隐藏层的隐藏节点如果比之前的层上面的节点数要多,相当于进行了升维,考虑的因素更多,考虑的更全面
4,隐藏层的隐藏节点如果比之前的层上面的节点数要少,相当于进行了降维,去前面进行了归纳总结

Q:为什么神经网络的神经元那么小
A:因为它本身就是解决某个特定的问题,比如图像,语音等,所以他也不需要那么多

主要参考:
https://blog.csdn.net/illikang/article/details/82019945
在这里插入图片描述
在这里插入图片描述

隐藏层是为了便于推理和演绎
感觉像是decision tree 一步步判断

#多层感知机(MLP)原理简介
https://www.cnblogs.com/bonelee/p/9092080.html

from sklearn.neural_network import MLPClassifier

x=[[0.,0.],[1.,1.]]#输入层有两个输入节点  x1和x2   x1和x2
y=[0,1]#输出层有两个输出节点

clf=MLPClassifier(solver='sgd',alpha=1e-5,activation="logistic",hidden_layer_sizes=(5,2),max_iter=2000,tol=1e-4)
#tol是阈值,梯度时候小于这个值。连接数w 5X2 左边五个右边两个 5个隐藏层,每个隐藏层有2个节点  (5,4,20)三个隐藏层分别是(100,)一层隐藏层,100个节点
clf.fit(x,y)

predicted_value=clf.predict([[2.,2.],[-1,-2.]])
print(predicted_value)
predicted_proba=clf.predict_proba([[2.,2.],[-1,-2.]])
print(predicted_proba)

print([coef.shape for coef in clf.coefs_])
print([coef for coef in clf.coefs_])

结果

[1 1]
[[0.4281369  0.5718631 ]
 [0.42847389 0.57152611]]
[(2, 5), (5, 2), (2, 1)]
#看下面你能发现是 2--5---2的连接方式
2*5   5*2  2*5  矩阵
[array([[-0.36689325,  0.42728148, -0.38030335,  0.52292748, -0.35062165],
       [-0.46673022, -0.4280824 ,  0.09152046, -0.42497603, -0.41494944]]), array([[-0.08710417, -0.36887777],
       [ 0.27390546,  0.03801725],
       [-0.07852458,  0.25256175],
       [-0.38455056, -0.02148564],
       [ 0.1512115 ,  0.49742954]]), array([[ 0.67742899],
       [-0.26601937]])]

06 后面的是R的concrete分析 5个变量,能看懂但是不大想看先放弃吧

发布了39 篇原创文章 · 获赞 1 · 访问量 471

猜你喜欢

转载自blog.csdn.net/qq_40647378/article/details/103572765