TensorFlow练习12: 判断男声女声
本帖训练一个简单的神经网络模型,用来判断声音是男是女。
本帖数据集取自voice-gender项目,这个项目使用了n种分类模型,并比较了准确率,但是它没有使用神经网络模型,本帖算是一个补充。
数据集
这个数据集是经过R语言处理过的,它提取出了.WAV文件的一些声音属性。如果你想自己从wav文件中提取声音属性,参看voice-gender项目中一个叫sound.R源码文件。
数据集字段:”meanfreq”,”sd”,”median”,”Q25″,”Q75″,”IQR”,”skew”,”kurt”,”sp.ent”,”sfm”,”mode”,”centroid”,”meanfun”,”minfun”,”maxfun”,”meandom”,”mindom”,”maxdom”,”dfrange”,”modindx”,”label”。最后一个字段标记了是男声还是女声,前面字段是声音属性。
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
import os
import requests
import pandas as pd
import numpy as np
import random
import tensorflow as tf # 0.12
from sklearn.model_selection import train_test_split
# 下载数据集
if not os.path.exists('voice.csv'):
url = 'http://blog.topspeedsnail.com/wp-content/uploads/2016/12/voice.csv'
data = requests.get(url).content
with open('voice.csv', 'wb') as f:
f.write(data)
voice_data = pd.read_csv('voice.csv')
#print(voice_data.head())
#print(voice_data.tail())
voice_data = voice_data.values
# 分离声音特性和分类
voices = voice_data[:, :-1]
labels = voice_data[:, -1:] # ['male'] ['female']
# 把分类转为one-hot
labels_tmp = []
for label in labels:
tmp = []
if label[0] == 'male':
tmp = [1.0, 0.0]
else: # 'female'
tmp = [0.0, 1.0]
labels_tmp.append(tmp)
labels = np.array(labels_tmp)
# shuffle
voices_tmp = []
lables_tmp = []
index_shuf = [i for i in range(len(voices))]
random.shuffle(index_shuf)
for i in index_shuf:
voices_tmp.append(voices[i])
lables_tmp.append(labels[i])
voices = np.array(voices_tmp)
labels = np.array(lables_tmp)
train_x, test_x, train_y, test_y = train_test_split(voices, labels, test_size=0.1)
banch_size = 64
n_banch = len(train_x) // banch_size
X = tf.placeholder(dtype=tf.float32, shape=[None, voices.shape[-1]]) # 20
Y = tf.placeholder(dtype=tf.float32, shape=[None, 2])
# 3层(feed-forward)
def neural_network():
w1 = tf.Variable(tf.random_normal([voices.shape[-1], 512], stddev=0.5))
b1 = tf.Variable(tf.random_normal([512]))
output = tf.matmul(X, w1) + b1
w2 = tf.Variable(tf.random_normal([512, 1024],stddev=.5))
b2 = tf.Variable(tf.random_normal([1024]))
output = tf.nn.softmax(tf.matmul(output, w2) + b2)
w3 = tf.Variable(tf.random_normal([1024, 2],stddev=.5))
b3 = tf.Variable(tf.random_normal([2]))
output = tf.nn.softmax(tf.matmul(output, w3) + b3)
return output
# 训练神经网络
def train_neural_network():
output = neural_network()
cost = tf.reduce_mean(tf.reduce_sum(tf.nn.softmax_cross_entropy_with_logits(output, Y)))
lr = tf.Variable(0.001, dtype=tf.float32, trainable=False)
opt = tf.train.AdamOptimizer(learning_rate=lr)
var_list = [t for t in tf.trainable_variables()]
train_step = opt.minimize(cost, var_list=var_list)
#saver = tf.train.Saver(tf.global_variables())
#saver.restore(sess, tf.train.latest_checkpoint('.'))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
#summary_writer = tf.train.SummaryWriter('voices')
for epoch in range(200):
sess.run(tf.assign(lr, 0.001 * (0.97 ** epoch)))
for banch in range(n_banch):
voice_banch = train_x[banch*banch_size:(banch+1)*(banch_size)]
label_banch = train_y[banch*banch_size:(banch+1)*(banch_size)]
_, loss = sess.run([train_step, cost], feed_dict={X: voice_banch, Y: label_banch})
print(epoch, banch, loss)
# 准确率
prediction = tf.equal(tf.argmax(output, 1), tf.argmax(Y, 1))
accuracy = tf.reduce_mean(tf.cast(prediction, dtype=tf.float32))
accuracy = sess.run(accuracy, feed_dict={X: test_x, Y: test_y})
print("准确率", accuracy)
#prediction = sess.run(output, feed_dict={X: test_x})
train_neural_network()
|
TensorFlow练习12: 判断男声女声相关推荐
- tf12: 判断男声女声
本帖训练一个简单的神经网络模型,用来判断声音是男是女. 本帖数据集取自voice-gender项目,这个项目使用了n种分类模型,并比较了准确率,但是它没有使用神经网络模型,本帖算是一个补充. 数据集 ...
- 第十八章 12判断string类型字符串是否为空
// 12判断string类型字符串是否为空 /*#include <iostream> #include <string> using namespace std; int ...
- TensorFlow 1.12.2 发布,修复 GIF 构造安全漏洞
开发四年只会写业务代码,分布式高并发都不会还做程序员? TensorFlow 1.12.2 发布了,此处本修复了一个潜在的安全漏洞: 精心设计的 GIF 图像可以在解码过程中产生空指针解引用 更新 ...
- Win10 tensorflow 1.12 gpu + CUDA10 + Anaconda3-4.4 python3.6 安装过程
陆续折腾了几天终于把tensorflow gpu版本装完了.特此记录详细安装过程:(如有什么问题和坑,欢迎交流!^_^) 我装的各版本文件: Cuda 10 Ananconda3-4.4 tensor ...
- NVIDA GTX2080 Ubuntu18.04 cuda10.0 cudnn7.5 tensorflow 1.12 install
NVIDA GTX2080 Ubuntu18.04 cuda10.0 cudnn7.5 tensorflow 1.12 install 心仪已久的显卡2080终于到了,Ubuntu18这么帅,怎么还能 ...
- 男声女声分类之SVM
男声女声分类之svm 目录 男声女声分类之svm svc 数据 模型构建预测 svc 1.支撑向量机SVM是一种非常重要和广泛的机器学习算法,它的算法出发点是尽可能找到最优的决策边界,使得模型的泛化能 ...
- 机器学习 实验二 男声女声分类
机器学习 实验二 男声女声分类 一.实验环境 PC机,Python 二.代码 #%%import pandas as pd from sklearn.preprocessing import Stan ...
- TensorFlow GPU 版本安装个人总结:Win10 + Python3.5 + CUDA 9.0.176 + cudnn v7.5.0.56 + TensorFlow 1.12.0
TensorFlow GPU 版本安装个人总结:Win10 + Python3.5 + CUDA 9.0.176 + cudnn v7.5.0.56 + TensorFlow 1.12.0 接触机器学 ...
- 男声变女声 matlab,使用matlab判断男声与女声
%filename:manwoman.m %different man from woman. %=================================================== ...
最新文章
- 阅读笔记:Solving the “false positives” problem in fraud prediction
- pid调节软件_非常实用的PID算法和PID控制原理
- 药品研发 计算机系统验证,基于验证的药品研发项目申报系统的设计
- Sublime Test3 添加一键格式化XML文件插件
- (网页)java数组去重总结(转)
- EasyUI 添加一行的时候 行号出现负数的解决方案
- 设计模式Demo制作bug以及反思集锦
- python 读xml_python读取xml文件
- 准考证打印系统关闭怎么办_2021国家公务员考试准考证打印系统关闭了怎么办...
- 指导老师对计算机论文的评语,指导老师对论文的评语
- 2012最新JQuery插件
- A Game of Thrones(97)
- ios android与wp,在iOS与Android间选择WP
- 实现一周之内自动登录的 cookie和session还有localStorage的存储机制
- Vulkan简介(2)
- 《增长黑客》Sean Ellis epub+mobi+azw3
- float取小数点后四位
- java中实现工厂日历_Java实现的日历功能完整示例
- 炒菜机器人放食材的顺序_炒菜机器人的制作方法
- 《第六周RFID作业》物联112118 林家辉
热门文章
- 调用script方法_自己撸一个代码生成器输入参数和方法
- mysql 查询商品列表 显示tag_javascript - MYSQL——怎么一个sql语句查询出用户和用户商品的列表啊...
- 如何基于Kubernetes构建完整的DevOps流水线
- SSM-SpringMVC-30:SpringMVC中InitBinder的骇客级优化
- 《JAVA与模式》之命令模式
- iOS中系统自带正则表达式的应用
- Django admin coercing to Unicode: need string or buffer, tuple found
- android对话框的使用(下)
- 有关Expander组件的研究——Silverlight学习笔记[33]
- matlab ia模块,MathWorks发布MATLAB和SimulinkR2020a版本,为工程师和科学家提供更多AI功能...