def tranferModel(nmt_base_model, en_len, fr_len, MAX_VOCAB, ENC_EMB_DIM, DEC_EMB_DIM, HID_DIM, EMB_TRAIN=True, GRU_LAYER=True, is_trainable=False): fr_vocab = en_vocab = MAX_VOCAB en_inputs = Input(shape=(en_len, ), name='en_inputs') tr_en_emb_layer = Embedding(en_vocab + 1, ENC_EMB_DIM, input_length=en_len, trainable=EMB_TRAIN, name='en_emb') tr_en_emb = tr_en_emb_layer(en_inputs) tr_en_emb_masked = Masking(name='en_emb_mask')(tr_en_emb) ### if GRU_LAYER: tr_en_gru = GRU(HID_DIM, return_state=True, dropout=0.5, name='en_gru') en_out, en_state = tr_en_gru(tr_en_emb_masked) else: tr_en_gru = LSTM(HID_DIM, return_state=True, dropout=0.5, name='en_lstm') en_out, en_state, en_carry = tr_en_gru(tr_en_emb_masked) if not is_trainable: tr_en_emb_layer.trainable = False tr_en_gru.trainable = False de_inputs = Input(shape=(fr_len - 1, ), name='de_inputs') tr_de_emb_layer = Embedding(fr_vocab + 1, DEC_EMB_DIM, input_length=fr_len - 1, trainable=EMB_TRAIN, name='de_emb') tr_de_emb = tr_de_emb_layer(de_inputs) tr_de_emb_masked = Masking(name='de_emb_mask')(tr_de_emb) ### if GRU_LAYER: tr_de_gru = GRU(HID_DIM, return_sequences=True, return_state=True, dropout=0.5, name='de_gru') de_out, _ = tr_de_gru(tr_de_emb_masked, initial_state=en_state) else: tr_de_gru = LSTM(HID_DIM, return_sequences=True, return_state=True, dropout=0.5, name='de_lstm') de_out, _, _ = tr_de_gru(tr_de_emb_masked, initial_state=[en_state, en_carry]) tr_de_dense_0 = TimeDistributed(Dense(HID_DIM, activation='relu', name='de_dense_0'), name='de_timedense_0') # fr_vocab tr_de_dense_0_output = tr_de_dense_0(de_out) ### tr_de_dense_1 = Dense(fr_vocab, activation='softmax', name='de_dense_1') # trainable de_pred = TimeDistributed(tr_de_dense_1, name='de_timedense_1')(tr_de_dense_0_output) if not is_trainable: tr_de_emb_layer.trainable = False tr_de_gru.trainable = False tr_de_dense_0.trainable = False # Define the new transfer learning model which accepts encoder/decoder inputs and outputs predictions nmt_emb = Model(inputs=[en_inputs, de_inputs], outputs=de_pred, name='transfer_learning_model') return nmt_emb, en_inputs, tr_en_emb_layer, tr_en_gru, en_state, \ de_inputs, tr_de_emb_layer, tr_de_gru, tr_de_dense_0, tr_de_dense_1
def new_lpcnet_model(rnn_units1=384, rnn_units2=16, nb_used_features=38, training=False, adaptation=False): pcm = Input(shape=(None, 3)) feat = Input(shape=(None, nb_used_features)) pitch = Input(shape=(None, 1)) dec_feat = Input(shape=(None, 128)) dec_state1 = Input(shape=(rnn_units1, )) dec_state2 = Input(shape=(rnn_units2, )) padding = 'valid' if training else 'same' fconv1 = Conv1D(128, 3, padding=padding, activation='tanh', name='feature_conv1') fconv2 = Conv1D(128, 3, padding=padding, activation='tanh', name='feature_conv2') embed = Embedding(256, embed_size, embeddings_initializer=PCMInit(), name='embed_sig') cpcm = Reshape((-1, embed_size * 3))(embed(pcm)) pembed = Embedding(256, 64, name='embed_pitch') cat_feat = Concatenate()([feat, Reshape((-1, 64))(pembed(pitch))]) cfeat = fconv2(fconv1(cat_feat)) fdense1 = Dense(128, activation='tanh', name='feature_dense1') fdense2 = Dense(128, activation='tanh', name='feature_dense2') cfeat = fdense2(fdense1(cfeat)) rep = Lambda(lambda x: K.repeat_elements(x, frame_size, 1)) rnn = GRU(rnn_units1, return_sequences=True, return_state=True, recurrent_activation="sigmoid", reset_after='true', name='gru_a') rnn2 = GRU(rnn_units2, return_sequences=True, return_state=True, recurrent_activation="sigmoid", reset_after='true', name='gru_b') rnn_in = Concatenate()([cpcm, rep(cfeat)]) md = MDense(pcm_levels, activation='softmax', name='dual_fc') gru_out1, _ = rnn(rnn_in) gru_out2, _ = rnn2(Concatenate()([gru_out1, rep(cfeat)])) ulaw_prob = md(gru_out2) if adaptation: rnn.trainable = False rnn2.trainable = False md.trainable = False embed.Trainable = False model = Model([pcm, feat, pitch], ulaw_prob) model.rnn_units1 = rnn_units1 model.rnn_units2 = rnn_units2 model.nb_used_features = nb_used_features model.frame_size = frame_size encoder = Model([feat, pitch], cfeat) dec_rnn_in = Concatenate()([cpcm, dec_feat]) dec_gru_out1, state1 = rnn(dec_rnn_in, initial_state=dec_state1) dec_gru_out2, state2 = rnn2(Concatenate()([dec_gru_out1, dec_feat]), initial_state=dec_state2) dec_ulaw_prob = md(dec_gru_out2) decoder = Model([pcm, dec_feat, dec_state1, dec_state2], [dec_ulaw_prob, state1, state2]) return model, encoder, decoder