Skip to content

Commit e825450

Browse files
author
Suwon Shon
committed
cosmetic updates
1 parent 8412aab commit e825450

6 files changed

+312
-43
lines changed

scripts/ivector_dataset.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import numpy as np
2-
# import tensorflow as tf
32
from tensorflow.python.framework import dtypes
43

54
## ivector : Sampels X Dimension (2darray)
@@ -77,4 +76,4 @@ def next_batch(self,
7776

7877

7978

80-
79+

scripts/ivector_dataset.py~

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import numpy as np
2+
# import tensorflow as tf
3+
from tensorflow.python.framework import dtypes
4+
5+
## ivector : Sampels X Dimension (2darray)
6+
## labels : Samples (1darray)
7+
8+
class DataSet(object):
9+
10+
def __init__(self,
11+
ivectors,
12+
labels,
13+
dtype=dtypes.float32):
14+
15+
self._ivectors = ivectors
16+
self._labels = labels
17+
self._epochs_completed = 0
18+
self._index_in_epoch = 0
19+
self._num_examples = ivectors.shape[0]
20+
self._dimension = ivectors.shape[1]
21+
22+
23+
@property
24+
def ivectors(self):
25+
return self._ivectors
26+
27+
@property
28+
def labels(self):
29+
return self._labels
30+
31+
@property
32+
def num_examples(self):
33+
return self._num_examples
34+
35+
@property
36+
def epochs_completed(self):
37+
return self._epochs_completed
38+
39+
@property
40+
def dimension(self):
41+
return self._dimension
42+
43+
def next_batch(self,
44+
batch_size,
45+
shuffle):
46+
head = self._index_in_epoch
47+
48+
# shuffling dataset at first batch of every epoch
49+
if head == 0 and shuffle:
50+
perm = np.arange(self._num_examples)
51+
np.random.shuffle(perm)
52+
self._ivectors = self.ivectors[perm]
53+
self._labels = self.labels[perm]
54+
55+
# for last batch size => [total - batch_size : total]
56+
if head + batch_size > self._num_examples:
57+
self._index_in_epoch = self._num_examples - batch_size
58+
head = self._index_in_epoch
59+
60+
# Last batch (reset index)
61+
if head + batch_size == self._num_examples:
62+
self._epochs_completed +=1
63+
tail = self._index_in_epoch + batch_size
64+
self._index_in_epoch = 0
65+
return self._ivectors[head:tail], self._labels[head:tail]
66+
67+
#normal batch
68+
else:
69+
self._index_in_epoch += batch_size
70+
tail = self._index_in_epoch
71+
return self._ivectors[head:tail], self._labels[head:tail]
72+
73+
74+
75+
76+
77+
78+
79+
80+

scripts/ivector_tools.py

+7-33
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
2-
# coding: utf-8
3-
4-
51
import numpy as np
62
import os, re,gzip,struct
73
import scipy as sc
@@ -24,6 +20,7 @@ def read_ivector_text(file):
2420
file.close()
2521

2622
return ivector
23+
2724
def read_ivector_binary(file, point):
2825

2926
ivecfile = open(file,'r')
@@ -42,24 +39,12 @@ def read_ivector_binary(file, point):
4239
sample_type = 'float64'
4340

4441
temp=ivecfile.read(1) #int-size
45-
4642
vec_size=struct.unpack('<i',ivecfile.read(4))[0]
47-
48-
4943
ivector = np.fromfile(ivecfile,sample_type,vec_size)
50-
51-
# print binary
52-
# print sample_type
53-
# print temp
54-
# print vec_size
55-
# print np.sum(np.power(ivector,2))
56-
5744
ivecfile.close()
5845

59-
6046
return ivector
6147

62-
6348
def read_ivector_key(file):
6449
spkid = []
6550
ivec_pointer=[]
@@ -73,55 +58,44 @@ def read_ivector_key(file):
7358
total_num +=1
7459

7560
return spkid, ivec_pointer,total_num
61+
7662
def length_norm(mat):
7763
mat = mat.transpose()
7864
norm_mat = []
7965
for line in mat:
8066
temp = line/np.math.sqrt(sum(np.power(line,2)))
8167
norm_mat.append(temp)
8268
norm_mat = np.array(norm_mat)
83-
return norm_mat.transpose()
84-
8569

70+
return norm_mat.transpose()
8671

8772
def lda(mat,label):
8873
# mat = observation x dim ( for example, 8x600 for 8 obs and 600dim ivector)
8974
# label = num_utts (for example, [2,4,2] for 8 observations)
90-
91-
# ivec = [[0,1,2], [0,5,10],[1,5,3],[5,2,1],[5,3,6]]
92-
# ivec = np.array(ivec,dtype='float')
93-
# print np.shape(ivec)
94-
# print ivec
95-
# label = [2,3]
75+
9676
#Sw = np.inner(mat.transpose(), mat.transpose())
9777
Sw = np.dot(mat.transpose(), mat)
9878
mu_c=[]
9979
pre_iter2 = 0
10080
for iter1, iter2 in enumerate(label):
10181
idx = np.arange(pre_iter2,pre_iter2+iter2)
10282
pre_iter2 += iter2
103-
10483
temp = mat[idx]
10584
mu_c.append(np.math.sqrt(iter2) * np.mean(temp,axis=0))
106-
# mu_c.append(np.mean(temp,axis=0))
85+
10786
mu_c = np.array(mu_c)
108-
# Sb = np.inner(mu_c.transpose(),mu_c.transpose())
87+
10988
Sb = np.dot(mu_c.transpose(),mu_c)
11089
[D, V] = np.linalg.eig(np.linalg.inv(Sw).dot(Sb))
111-
# D = np.real(D)
112-
# V = np.real(V)
11390
descend_idx = (-D).argsort()
11491
V= V[:,descend_idx]
11592
V = length_norm(V)
116-
#print V
11793

11894
return V
11995

12096

12197
def load_ivector_fromtextark(foldername,num_arks):
12298
#loading ivectors from text-ark files
123-
#foldername = '../db_ivectors/data/ivectors_callmynet_enrollment_gmm_2048/'
124-
#num_arks = 3
12599

126100
spkid, point, total_num=read_ivector_key(foldername+'ivector.scp')
127101
ivec1 = []
@@ -133,4 +107,4 @@ def load_ivector_fromtextark(foldername,num_arks):
133107
ivec1=np.append(ivec1,temp,axis=0)
134108
spk_ivectors = ivec1
135109
print 'total',total_num,'ivector were saved on spk_ivector variable(shape is',np.shape(spk_ivectors),' )'
136-
return spk_ivectors, spkid, point, total_num
110+
return spk_ivectors, spkid, point, total_num

scripts/ivector_tools.py~

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
2+
# coding: utf-8
3+
4+
5+
import numpy as np
6+
import os, re,gzip,struct
7+
import scipy as sc
8+
9+
def read_ivector_text(file):
10+
11+
file = open(file,'r')
12+
13+
ivector = []
14+
for line in file:
15+
a = line.split('[ ')
16+
b=a[1].split(' ]')
17+
c= b[0].split(' ')
18+
dim = np.size(c)
19+
d=np.array(c)
20+
e=d.astype('float32')
21+
ivector.append(e)
22+
23+
print np.shape(ivector)
24+
file.close()
25+
26+
return ivector
27+
def read_ivector_binary(file, point):
28+
29+
ivecfile = open(file,'r')
30+
31+
ivecname = ivecfile.read(point)
32+
#print ivecname
33+
34+
#binary flag
35+
binary=ivecfile.read(2)
36+
#print binary
37+
#type flag (FV for 4 byteor DV for 8)
38+
type=ivecfile.read(3)
39+
if type == 'FV ':
40+
sample_type='float32'
41+
if type =='DV ':
42+
sample_type = 'float64'
43+
44+
temp=ivecfile.read(1) #int-size
45+
46+
vec_size=struct.unpack('<i',ivecfile.read(4))[0]
47+
48+
49+
ivector = np.fromfile(ivecfile,sample_type,vec_size)
50+
51+
# print binary
52+
# print sample_type
53+
# print temp
54+
# print vec_size
55+
# print np.sum(np.power(ivector,2))
56+
57+
ivecfile.close()
58+
59+
60+
return ivector
61+
62+
63+
def read_ivector_key(file):
64+
spkid = []
65+
ivec_pointer=[]
66+
total_num = 0
67+
scpfile = open(file,'r')
68+
for line in scpfile:
69+
#print line
70+
temp = re.split(' |:|\n',line)
71+
spkid.append(temp[0])
72+
ivec_pointer.append(int(temp[2]))
73+
total_num +=1
74+
75+
return spkid, ivec_pointer,total_num
76+
def length_norm(mat):
77+
mat = mat.transpose()
78+
norm_mat = []
79+
for line in mat:
80+
temp = line/np.math.sqrt(sum(np.power(line,2)))
81+
norm_mat.append(temp)
82+
norm_mat = np.array(norm_mat)
83+
return norm_mat.transpose()
84+
85+
86+
87+
def lda(mat,label):
88+
# mat = observation x dim ( for example, 8x600 for 8 obs and 600dim ivector)
89+
# label = num_utts (for example, [2,4,2] for 8 observations)
90+
91+
# ivec = [[0,1,2], [0,5,10],[1,5,3],[5,2,1],[5,3,6]]
92+
# ivec = np.array(ivec,dtype='float')
93+
# print np.shape(ivec)
94+
# print ivec
95+
# label = [2,3]
96+
#Sw = np.inner(mat.transpose(), mat.transpose())
97+
Sw = np.dot(mat.transpose(), mat)
98+
mu_c=[]
99+
pre_iter2 = 0
100+
for iter1, iter2 in enumerate(label):
101+
idx = np.arange(pre_iter2,pre_iter2+iter2)
102+
pre_iter2 += iter2
103+
104+
temp = mat[idx]
105+
mu_c.append(np.math.sqrt(iter2) * np.mean(temp,axis=0))
106+
# mu_c.append(np.mean(temp,axis=0))
107+
mu_c = np.array(mu_c)
108+
# Sb = np.inner(mu_c.transpose(),mu_c.transpose())
109+
Sb = np.dot(mu_c.transpose(),mu_c)
110+
[D, V] = np.linalg.eig(np.linalg.inv(Sw).dot(Sb))
111+
# D = np.real(D)
112+
# V = np.real(V)
113+
descend_idx = (-D).argsort()
114+
V= V[:,descend_idx]
115+
V = length_norm(V)
116+
#print V
117+
118+
return V
119+
120+
121+
def load_ivector_fromtextark(foldername,num_arks):
122+
#loading ivectors from text-ark files
123+
#foldername = '../db_ivectors/data/ivectors_callmynet_enrollment_gmm_2048/'
124+
#num_arks = 3
125+
126+
spkid, point, total_num=read_ivector_key(foldername+'ivector.scp')
127+
ivec1 = []
128+
spk_ivectors = []
129+
ivec1 = read_ivector_text(foldername+'ivector.1.ark')
130+
for iter1 in np.arange(2,num_arks+1):
131+
temp = []
132+
temp = read_ivector_text(foldername+'ivector.'+str(iter1)+'.ark')
133+
ivec1=np.append(ivec1,temp,axis=0)
134+
spk_ivectors = ivec1
135+
print 'total',total_num,'ivector were saved on spk_ivector variable(shape is',np.shape(spk_ivectors),' )'
136+
return spk_ivectors, spkid, point, total_num

scripts/siamese_model.py

-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ def __init__(self):
1212
scope.reuse_variables()
1313
self.a1,self.b2,self.o2 = self.network(self.x2)
1414

15-
1615
# Create loss
1716
self.y_ = tf.placeholder(tf.float32, [None])
1817
self.loss = self.loss_with_cds()
@@ -25,7 +24,6 @@ def network(self, x):
2524
conv1 = self.conv_layer(x, kernel_size,stride,depth,'conv1')
2625
conv1r = tf.nn.relu(conv1)
2726
n_prev_weight = int(x.get_shape()[1])
28-
# pool1 = tf.layers.max_pooling1d(conv1,4,2,'same')
2927
conv1_d = tf.reshape(conv1r,[-1, n_prev_weight/stride*depth])
3028

3129
kernel_size =10
@@ -34,15 +32,12 @@ def network(self, x):
3432
conv2 = self.conv_layer(conv1_d, kernel_size,stride,depth,'conv2')
3533
conv2r = tf.nn.relu(conv2)
3634
n_prev_weight = int(conv1_d.get_shape()[1])
37-
# pool2 = tf.layers.max_pooling1d(conv2,4,4,'same')
3835
conv2_d = tf.reshape(conv2r,[-1, n_prev_weight/stride*depth])
3936

4037
fc1 = self.fc_layer(conv1_d, 1500, "fc1")
4138
ac1 = tf.nn.relu(fc1)
42-
# fc1_drop = tf.nn.dropout(ac1, 0.1)
4339
fc2 = self.fc_layer(ac1, 600, "fc2")
4440
ac2 = tf.nn.relu(fc2)
45-
# fc2_drop = tf.nn.dropout(ac2, 0.1)
4641
fc3 = self.fc_layer(ac2, 200, "fc3")
4742
return fc1,fc2,fc3
4843

@@ -56,12 +51,9 @@ def xavier_init(self,n_inputs, n_outputs, uniform=True):
5651

5752
def fc_layer(self, bottom, n_weight, name):
5853
print( bottom.get_shape())
59-
assert len(bottom.get_shape()) == 2
6054
n_prev_weight = bottom.get_shape()[1]
61-
# initer = tf.truncated_normal_initializer(stddev=0.01)
6255
initer = self.xavier_init(int(n_prev_weight),n_weight)
6356
W = tf.get_variable(name+'W', dtype=tf.float32, shape=[n_prev_weight, n_weight], initializer=initer)
64-
# b = tf.get_variable(name+'b', dtype=tf.float32, initializer=tf.constant(0.01, shape=[n_weight], dtype=tf.float32))
6557
b = tf.get_variable(name+'b', dtype=tf.float32, initializer=tf.random_uniform([n_weight],-0.001,0.001, dtype=tf.float32))
6658
fc = tf.nn.bias_add(tf.matmul(bottom, W), b)
6759
return fc

0 commit comments

Comments
 (0)