def TestModel(self, datapath='', str_dataset='dev', data_count=32): ''' 测试检验模型效果 ''' data = DataSpeech(self.datapath, str_dataset) #data = self.data #data.LoadDataList(str_dataset) num_data = data.GetDataNum() # 获取数据的数量 if (data_count <= 0 or data_count > num_data): # 当data_count为小于等于0或者大于测试数据量的值时,则使用全部数据来测试 data_count = num_data try: gen = data.data_genetator(data_count) #for i in range(1): # [X, y, input_length, label_length ], labels = gen #r = self._model.test_on_batch([X, y, input_length, label_length ], labels) r = self._model.evaluate_generator(generator=gen, steps=1, max_queue_size=data_count, workers=1, use_multiprocessing=False) print(r) except StopIteration: print('[Error] Model Test Error. please check data format.')
def TrainModel(self, datapath, epoch=2, save_step=1000, filename='model_speech/LSTM_CNN_model'): ''' 训练模型 参数: datapath: 数据保存的路径 epoch: 迭代轮数 save_step: 每多少步保存一次模型 filename: 默认保存文件名,不含文件后缀名 ''' data = DataSpeech(datapath) data.LoadDataList('train') num_data = DataSpeech.GetDataNum() # 获取数据的数量 for epoch in range(epoch): # 迭代轮数 print('[running] train epoch %d .' % epoch) n_step = 0 # 迭代数据数 while True: try: print('[message] epoch %d . Have train datas %d+' % (epoch, n_step * save_step)) # data_genetator是一个生成器函数 yielddatas = data.data_genetator(self.BATCH_SIZE) self._model.fit_generator(yielddatas, save_step, nb_worker=2) n_step += 1 except StopIteration: print('[error] generator error. please check data format.') break self.SaveModel(comment='_e_' + str(epoch) + '_step_' + str(n_step))
def TestModel(self, datapath, str_dataset='dev'): ''' 测试检验模型效果 ''' data = DataSpeech(datapath) data.LoadDataList(str_dataset) num_data = DataSpeech.GetDataNum() # 获取数据的数量 try: gen = data.data_genetator(num_data) for i in range(1): X, y = gen r = self._model.test_on_batch(X, y) print(r) except StopIteration: print('[Error] Model Test Error. please check data format.')
def TrainModel(self, datapath='', epoch=2, batch_size=32, save_step=1000, filename='model_speech/speech_model'): ''' 训练模型 参数: datapath: 数据保存的路径 epoch: 迭代轮数 save_step: 每多少步保存一次模型 filename: 默认保存文件名,不含文件后缀名 ''' data = DataSpeech(self.datapath, 'train', LoadToMem=False) #data = self.data #data.LoadDataList() num_data = data.DataNum # 获取数据的数量 for epoch in range(epoch): # 迭代轮数 print('[running] train epoch %d .' % epoch) n_step = 0 # 迭代数据数 while (n_step * save_step * batch_size < num_data): try: print('[message] epoch %d . Have train datas %d * %d+' % (epoch, batch_size, n_step * save_step)) # data_genetator是一个生成器函数 yielddatas = data.data_genetator(batch_size, self.AUDIO_LENGTH) #self._model.fit_generator(yielddatas, save_step, nb_worker=2) self._model.fit_generator(yielddatas, save_step) n_step += 1 except StopIteration: print('[error] generator error. please check data format.') break self.SaveModel(comment='_e_' + str(epoch) + '_step_' + str(n_step * save_step)) self.TestModel(self.datapath, str_dataset='train', data_count=16) self.TestModel(self.datapath, str_dataset='dev', data_count=16)