-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathkw-generate.py
64 lines (47 loc) · 1.57 KB
/
kw-generate.py
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
import scipy.io.wavfile as wav
import tensorflow as tf
#from tf.keras.models import model_from_json
#import keras.backend as K
#from keras.optimizers import RMSprop
import numpy as np
model_from_json=tf.keras.models.model_from_json
n=100 # number of audio files to generate
dim=128 # dimensions
sr=16000 # sample rate
# define wasserstein loss function
def wasserstein_loss(y_true, y_pred):
return tf.keras.backend.mean(y_true * y_pred)
# model compilation arguments
mloss=wasserstein_loss # 'binary_crossentropy'
moptimizer=tf.keras.optimizers.RMSprop(lr=0.00005)
mmetrics=['accuracy']
# audio files and paths
afprefix="aud-kwg" # audio filename prefix for audio export
afformat="wav" # audio file format
afsubdir="audio" # audio sub directory
# model file and paths
msubdir="saved_model" # sub directory with saved models
mfilename="KW_gen" # model generator filename
mfformat="json" # model generator file format
wsuffix="_weights.hdf5" # model generator weights suffix
# load the json file
with open(msubdir+"/"+mfilename+"."+mfformat,"r") as f:
lm_json = f.read()
# load json file as keras model
lm = model_from_json(lm_json)
# load model weights
lm.load_weights(msubdir+"/"+mfilename+wsuffix)
# compile the model
lm.compile(loss=mloss, optimizer=moptimizer, metrics=mmetrics)
# make a random array
noise = np.random.normal(0,1,(n,dim))
# make a prediction
audio = lm.predict(noise)
# write wav files
for i in range(n):
a=[]
fname=afsubdir+"/"+afprefix+"-"+str(i)+"."+afformat
print("outputting",fname)
a = audio[i]
a *= 2**15
wav.write(fname,sr,a)