语音情感分析开发者必读之作,一定带来一个解决新方案( 三 )


# 裁剪64*64*3的区域
temp1 = temp[:,j*20:j*20+64,:]
#temp1 = cv2.(temp[:,j*20:j*20+64,:],(227,227))
# 的数据结构是一个5944长度的列表
# 其中每一个元素都是一个2维的列表
# 2维列表中第1维是标签,形如'W_1_1',即
# [i][0] = 'L_0_0'
# 2维列表的第2维是64×64×3的图像,即
# [i][1].shape = (64,64,3)
.([[i][0]+'_'+str(j) , temp1])
1
卷积神经网络采用的结构,所以还需要将64×64×3 64\\×64×3的图像到227×227×3 227\\×227×3 。cv2.默认的数据格式是,也就是类型,特别占用内存,容易爆掉(如果你有64G内存,当我没说) 。所以要特别小心,这里我采用半精度格式,实验证明半精度对最后结果没什么影响 。
# 到227*227*3
# 容易爆内存,分段执行
= []
for i in range(len()):
temp = cv2.([i][1],(227,227)).('')
.([[i][0] , temp])
# 的数据结构是一个5944长度的列表
# 其中每一个元素都是一个2维的列表
# 2维列表中第1维是标签,形如'W_1_1',即
# [i][0] = 'L_0_0'
# 2维列表的第2维是227×227×3的图像,即
# [i][1].shape = (227,227,3)
其实和的数据结构是一样的,只不过图片的尺寸变了而已 。
下一步是网络的搭建和训练 。打标签的时候注意,从一个音频文件中生成的227×227×3 227\\×227×3的图像都打成同一个情感标签,采用one-hot编码 。是训练集,数据尺寸(N,227,227,3),是标签文件,数据格式(N,7) 。应网友的建议,把One-hot标签的生成代码重写了一遍 。
# 训练数据
= []
for i in range(len()):
.([i][1])
= np.array() # 训练数据转成格式
# 做如下规定
# W ==> 0
# L ==> 1
# E ==> 2
# A ==> 3
# F ==> 4
# T ==> 5
# N ==> 6
= []
for i in range(len()):
if [i][0][0] == 'W':
.(0)
if [i][0][0] == 'L':
.(1)
if [i][0][0] == 'E':
.(2)
if [i][0][0] == 'A':
.(3)
if [i][0][0] == 'F':
.(4)
if [i][0][0] == 'T':
.(5)
if [i][0][0] == 'N':
.(6)
# 将0-6的标签转换成(0,0,1,0,0,0,0)的独热码
from keras.utils.
= ()
1
网络训练的对应代码如下 。
keras
from keras.
from keras.Input,Dense,,,,,
from keras.,,
from keras.,add
from keras.,
from keras.Model,
from keras.utils.
from keras.
from keras,# 优化器,正则化项
from keras.SGD, Adam
# 参数设置
= 32
= 50
,= 227, 227 # 输入图片尺寸
= (, , 3)
# 模型保存的路径
= './model/.h5'
=
=
# = [0:900]/[0:900].max()
# = [0:900]
print(' shape:', .shape)
print(.shape[0], 'train ')
#
model = ()
model.add((96,(11,11),=(4,4),=(227,227,3),='valid',='relu',=''))
model.add((=(3,3),=(2,2)))
model.add((256,(5,5),=(1,1),='same',='relu',=''))
model.add((=(3,3),=(2,2)))
model.add((384,(3,3),=(1,1),='same',='relu',=''))
model.add((384,(3,3),=(1,1),='same',='relu',=''))
model.add((256,(3,3),=(1,1),='same',='relu',=''))
model.add((=(3,3),=(2,2)))
model.add(())
model.add(Dense(4096,='relu'))
model.add((0.5))
model.add(Dense(4096,='relu'))
model.add((0.5))
model.add(Dense(7,=''))
#ZF-Net
#model = ()
#model.add((96,(7,7),=(2,2),=,='valid',='relu',=''))
#model.add((=(3,3),=(2,2)))
#model.add((256,(5,5),=(2,2),='same',='relu',=''))