ref: 617e462be36bba4f3a1a0fba4a212cb9dded3236
parent: b65031ef642ae5b525a88cdda142804398cdd3ce
author: Jean-Marc Valin <jmvalin@jmvalin.ca>
date: Mon Jun 25 21:31:44 EDT 2018
using features (except pitch gain which has NaNs for now)
--- a/dnn/lpcnet.py
+++ b/dnn/lpcnet.py
@@ -12,12 +12,19 @@
rnn_units=64
pcm_bits = 8
pcm_levels = 2**pcm_bits
+nb_used_features = 37
+
def new_wavernn_model():
pcm = Input(shape=(None, 1))
+ feat = Input(shape=(None, nb_used_features))
+
+ rep = Lambda(lambda x: K.repeat_elements(x, 160, 1))
+
rnn = CuDNNGRU(rnn_units, return_sequences=True)
+ rnn_in = Concatenate()([pcm, rep(feat)])
md = MDense(pcm_levels, activation='softmax')
- ulaw_prob = md(rnn(pcm))
+ ulaw_prob = md(rnn(rnn_in))
- model = Model(pcm, ulaw_prob)
+ model = Model([pcm, feat], ulaw_prob)
return model
--- a/dnn/train_lpcnet.py
+++ b/dnn/train_lpcnet.py
@@ -24,7 +24,7 @@
pcmfile = sys.argv[1]
feature_file = sys.argv[2]
nb_features = 54
-nb_used_features = 38
+nb_used_features = lpcnet.nb_used_features
feature_chunk_size = 15
pcm_chunk_size = 160*feature_chunk_size
@@ -44,8 +44,8 @@
features = np.reshape(features, (nb_frames, feature_chunk_size, nb_features))
features = features[:, :, :nb_used_features]
-checkpoint = ModelCheckpoint('lpcnet1b_{epoch:02d}.h5')+checkpoint = ModelCheckpoint('lpcnet1c_{epoch:02d}.h5') #model.load_weights('wavernn1c_01.h5')model.compile(optimizer=Adam(0.002, amsgrad=True, decay=2e-4), loss='sparse_categorical_crossentropy', metrics=['sparse_categorical_accuracy'])
-model.fit(in_data, out_data, batch_size=batch_size, epochs=30, validation_split=0.2, callbacks=[checkpoint])
+model.fit([in_data, features], out_data, batch_size=batch_size, epochs=30, validation_split=0.2, callbacks=[checkpoint])
--
⑨