|
|
|
|
@@ -4,10 +4,10 @@ import numpy as np
|
|
|
|
|
from keras.models import Model,load_model,model_from_yaml
|
|
|
|
|
from keras.layers import Input,Concatenate,Lambda, Reshape, Dropout
|
|
|
|
|
from keras.layers import Dense,Conv2D, LSTM, Bidirectional, GRU
|
|
|
|
|
from keras.layers import BatchNormalization
|
|
|
|
|
from keras.layers import BatchNormalization,Activation
|
|
|
|
|
from keras.losses import categorical_crossentropy
|
|
|
|
|
from keras.utils import to_categorical
|
|
|
|
|
from keras.optimizers import RMSprop
|
|
|
|
|
from keras.optimizers import RMSprop,Adadelta,Adagrad,Adam,Nadam
|
|
|
|
|
from keras.callbacks import TensorBoard, ModelCheckpoint
|
|
|
|
|
from keras import backend as K
|
|
|
|
|
from keras.utils import plot_model
|
|
|
|
|
@@ -36,30 +36,38 @@ def ctc_lambda_func(args):
|
|
|
|
|
return K.ctc_batch_cost(labels, y_pred, input_length, label_length)
|
|
|
|
|
|
|
|
|
|
def segment_model(input_dim):
|
|
|
|
|
# input_dim = (100,100,1)
|
|
|
|
|
inp = Input(shape=input_dim)
|
|
|
|
|
cnv1 = Conv2D(filters=32, kernel_size=(5,9))(inp)
|
|
|
|
|
cnv2 = Conv2D(filters=1, kernel_size=(5,9))(cnv1)
|
|
|
|
|
dr_cnv2 = Dropout(rate=0.95)(cnv2)
|
|
|
|
|
# dr_cnv2
|
|
|
|
|
cn_rnn_dim = (dr_cnv2.shape[1].value,dr_cnv2.shape[2].value)
|
|
|
|
|
r_dr_cnv2 = Reshape(target_shape=cn_rnn_dim)(dr_cnv2)
|
|
|
|
|
b_gr1 = Bidirectional(GRU(512, return_sequences=True),merge_mode='sum')(r_dr_cnv2)
|
|
|
|
|
# b_gr1
|
|
|
|
|
b_gr2 = Bidirectional(GRU(512, return_sequences=True),merge_mode='sum')(b_gr1)
|
|
|
|
|
b_gr3 = Bidirectional(GRU(512, return_sequences=True),merge_mode='sum')(b_gr2)
|
|
|
|
|
# b_gr3
|
|
|
|
|
oup = Dense(2, activation='softmax')(b_gr3)
|
|
|
|
|
# oup
|
|
|
|
|
return Model(inp, oup)
|
|
|
|
|
|
|
|
|
|
def simple_segment_model(input_dim):
|
|
|
|
|
inp = Input(shape=input_dim)
|
|
|
|
|
b_gr1 = Bidirectional(GRU(256, return_sequences=True),merge_mode='sum')(inp)
|
|
|
|
|
# b_gr1
|
|
|
|
|
b_gr2 = Bidirectional(GRU(64, return_sequences=True),merge_mode='sum')(b_gr1)
|
|
|
|
|
b_gr3 = Bidirectional(GRU(1, return_sequences=True),merge_mode='sum')(b_gr2)
|
|
|
|
|
oup = Reshape(target_shape=(input_dim[0],))(b_gr3)
|
|
|
|
|
b_gr1 = Bidirectional(LSTM(32, return_sequences=True))(inp)
|
|
|
|
|
b_gr1 = Bidirectional(LSTM(16, return_sequences=True),merge_mode='sum')(b_gr1)
|
|
|
|
|
b_gr1 = LSTM(1, return_sequences=True,activation='softmax')(b_gr1)
|
|
|
|
|
# b_gr1 = LSTM(4, return_sequences=True)(b_gr1)
|
|
|
|
|
# b_gr1 = LSTM(2, return_sequences=True)(b_gr1)
|
|
|
|
|
# bn_b_gr1 = BatchNormalization(momentum=0.98)(b_gr1)
|
|
|
|
|
# b_gr2 = GRU(64, return_sequences=True)(b_gr1)
|
|
|
|
|
# bn_b_gr2 = BatchNormalization(momentum=0.98)(b_gr2)
|
|
|
|
|
# d1 = Dense(32)(b_gr2)
|
|
|
|
|
# bn_d1 = BatchNormalization(momentum=0.98)(d1)
|
|
|
|
|
# bn_da1 = Activation('relu')(bn_d1)
|
|
|
|
|
# d2 = Dense(8)(bn_da1)
|
|
|
|
|
# bn_d2 = BatchNormalization(momentum=0.98)(d2)
|
|
|
|
|
# bn_da2 = Activation('relu')(bn_d2)
|
|
|
|
|
# d3 = Dense(1)(b_gr1)
|
|
|
|
|
# # bn_d3 = BatchNormalization(momentum=0.98)(d3)
|
|
|
|
|
# bn_da3 = Activation('softmax')(d3)
|
|
|
|
|
oup = Reshape(target_shape=(input_dim[0],))(b_gr1)
|
|
|
|
|
return Model(inp, oup)
|
|
|
|
|
|
|
|
|
|
def write_model_arch(mod,mod_file):
|
|
|
|
|
@@ -75,7 +83,7 @@ def load_model_arch(mod_file):
|
|
|
|
|
|
|
|
|
|
def train_segment(collection_name = 'test',resume_weights='',initial_epoch=0):
|
|
|
|
|
# collection_name = 'story_test'
|
|
|
|
|
batch_size = 64
|
|
|
|
|
batch_size = 128
|
|
|
|
|
# batch_size = 4
|
|
|
|
|
model_dir = './models/segment/'+collection_name
|
|
|
|
|
create_dir(model_dir)
|
|
|
|
|
@@ -111,8 +119,8 @@ def train_segment(collection_name = 'test',resume_weights='',initial_epoch=0):
|
|
|
|
|
mode='auto',
|
|
|
|
|
period=1)
|
|
|
|
|
# train
|
|
|
|
|
rms = RMSprop()
|
|
|
|
|
model.compile(loss=categorical_crossentropy, optimizer=rms, metrics=[accuracy])
|
|
|
|
|
opt = RMSprop()
|
|
|
|
|
model.compile(loss=categorical_crossentropy, optimizer=opt, metrics=[accuracy])
|
|
|
|
|
write_model_arch(model,model_dir+'/speech_segment_model_arch.yaml')
|
|
|
|
|
epoch_n_steps = step_count(n_records,batch_size)
|
|
|
|
|
if resume_weights != '':
|
|
|
|
|
@@ -133,4 +141,4 @@ def train_segment(collection_name = 'test',resume_weights='',initial_epoch=0):
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
|
# pass
|
|
|
|
|
train_segment('story_phrases','./models/segment/story_phrases.1000/speech_segment_model-final.h5',1001)
|
|
|
|
|
train_segment('story_words')#,'./models/segment/story_phrases.1000/speech_segment_model-final.h5',1001)
|
|
|
|
|
|