This commit is contained in:
Jean-Marc Valin 2018-07-23 17:05:21 -04:00
parent 211435f5d3
commit b6af21f31c
2 changed files with 17 additions and 5 deletions

View file

@ -1,6 +1,6 @@
from keras import backend as K from keras import backend as K
from keras.engine.topology import Layer from keras.engine.topology import Layer
from keras.layers import activations, initializers, regularizers, constraints, InputSpec, Conv1D from keras.layers import activations, initializers, regularizers, constraints, InputSpec, Conv1D, Dense
import numpy as np import numpy as np
class GatedConv(Conv1D): class GatedConv(Conv1D):
@ -42,13 +42,16 @@ class GatedConv(Conv1D):
self.out_dims = filters self.out_dims = filters
self.nongate_activation = activations.get(activation) self.nongate_activation = activations.get(activation)
def call(self, inputs, memory=None): def call(self, inputs, cond=None, memory=None):
if memory is None: if memory is None:
mem = K.zeros((K.shape(inputs)[0], self.mem_size, K.shape(inputs)[-1])) mem = K.zeros((K.shape(inputs)[0], self.mem_size, K.shape(inputs)[-1]))
else: else:
mem = K.variable(K.cast_to_floatx(memory)) mem = K.variable(K.cast_to_floatx(memory))
inputs = K.concatenate([mem, inputs], axis=1) inputs = K.concatenate([mem, inputs], axis=1)
ret = super(GatedConv, self).call(inputs) ret = super(GatedConv, self).call(inputs)
if cond is not None:
d = Dense(2*self.out_dims, use_bias=False, activation='linear')
ret = ret + d(cond)
ret = self.nongate_activation(ret[:, :, :self.out_dims]) * activations.sigmoid(ret[:, :, self.out_dims:]) ret = self.nongate_activation(ret[:, :, :self.out_dims]) * activations.sigmoid(ret[:, :, self.out_dims:])
if self.return_memory: if self.return_memory:
ret = ret, inputs[:, :self.mem_size, :] ret = ret, inputs[:, :self.mem_size, :]

View file

@ -4,6 +4,7 @@ import math
from keras.models import Model from keras.models import Model
from keras.layers import Input, LSTM, CuDNNGRU, Dense, Embedding, Reshape, Concatenate, Lambda, Conv1D, Add, Multiply, Bidirectional, MaxPooling1D, Activation from keras.layers import Input, LSTM, CuDNNGRU, Dense, Embedding, Reshape, Concatenate, Lambda, Conv1D, Add, Multiply, Bidirectional, MaxPooling1D, Activation
from keras import backend as K from keras import backend as K
from keras.initializers import VarianceScaling
from mdense import MDense from mdense import MDense
import numpy as np import numpy as np
import h5py import h5py
@ -34,12 +35,20 @@ def new_wavenet_model(fftnet=False):
rfeat = rep(cfeat) rfeat = rep(cfeat)
#tmp = Concatenate()([pcm, rfeat]) #tmp = Concatenate()([pcm, rfeat])
tmp = pcm tmp = pcm
init = VarianceScaling(scale=1.5,mode='fan_avg',distribution='uniform')
for k in range(10): for k in range(10):
res = tmp res = tmp
tmp = Concatenate()([tmp, rfeat])
dilation = 9-k if fftnet else k dilation = 9-k if fftnet else k
c = GatedConv(units, 2, dilation_rate=2**dilation, activation='tanh') '''#tmp = Concatenate()([tmp, rfeat])
tmp = Dense(units, activation='relu')(c(tmp)) c = GatedConv(units, 2, dilation_rate=2**dilation, activation='tanh', kernel_initializer=init)
tmp = Dense(units, activation='relu')(c(tmp, cond=rfeat))'''
tmp = Concatenate()([tmp, rfeat])
c1 = CausalConv(units, 2, dilation_rate=2**dilation, activation='tanh')
c2 = CausalConv(units, 2, dilation_rate=2**dilation, activation='sigmoid')
tmp = Multiply()([c1(tmp), c2(tmp)])
tmp = Dense(units, activation='relu')(tmp)
if k != 0: if k != 0:
tmp = Add()([tmp, res]) tmp = Add()([tmp, res])