def fit_model(self): # 提前结束训练,避免过拟合,加快训练速度 # 如果连续若干轮迭代,模型都未能变得更好,就提前结束训练 # 连续patience轮迭代,准确率增加量都没有超过阈值min_delta,或者没有增加,则结束训练 early_stopping = EarlyStopping(monitor='acc', patience=5, min_delta=0.0001, verbose=1, mode='max') # train network # 逼近隐藏函数 => loss最小,优化问题 => 梯度下降,近似求解 history = self.model.fit(self.X, self.y, epochs=500, batch_size=1, verbose=1, callbacks=[early_stopping], shuffle=True) print( '\n========================== history ===========================') acc = history.history.get('acc') # fit函数返回History对象,它有一个history字典 loss = history.history['loss'] # acc和loss都是列表 print('train data acc:', acc ) # 训练数据的loss和acc,验证集的val_loss和val_acc,见印象笔记“2018.1.1-2018.1.22” print('train data loss:', loss) print( '\n======================= acc & loss ============================' ) for i in range(len(acc)): print('epoch {0:<4} | acc: {1:6.3f}% | loss: {2:<10.5f}'.format( i + 1, acc[i] * 100, loss[i])) plt_x = [x + 1 for x in range(len(acc))] plt_acc = plt_x, acc plt_loss = plt_x, loss tools.plot_figure('acc & loss', plt_acc, plt_loss)
def fit_model_with_generator(self): early_stopping = EarlyStopping(monitor='val_loss', patience=5, min_delta=0.0001, verbose=1, mode='min') # 训练集、验证集和测试集的比例为7:2:1 => done # steps应自适应于BATCH_SAMPLES_NUMBER => done batch_samples_number = parameters.BATCH_SAMPLES_NUMBER history = self.model.fit_generator( tools.generate_batch_samples_from_corpus(self.train_data_path, self.tokenizer, self.vocab_size, self.max_length), validation_data=tools.generate_batch_samples_from_corpus( self.val_data_path, self.tokenizer, self.vocab_size, self.max_length), validation_steps=self.val_samples_num / batch_samples_number, steps_per_epoch=self.train_samples_num / batch_samples_number, epochs=1000, verbose=1, callbacks=[early_stopping]) print( '\n========================== history ===========================') acc = history.history.get('acc') loss = history.history['loss'] val_acc = history.history['val_acc'] val_loss = history.history['val_loss'] print('train data acc:', acc) print('train data loss', loss) print('val data acc', val_acc) print('val data loss', val_loss) print( '\n======================= acc & loss & val_acc & val_loss ============================' ) for i in range(len(acc)): print('epoch {0:<4} | acc: {1:6.3f}% | loss: {2:<10.5f} |' ' val_acc: {3:6.3f}% | val_loss: {4:<10.5f}'.format( i + 1, acc[i] * 100, loss[i], val_acc[i] * 100, val_loss[i])) # 训练完毕后,将每轮迭代的acc、loss、val_acc、val_loss以画图的形式进行展示 => done plt_x = [x + 1 for x in range(len(acc))] plt_acc = plt_x, acc plt_loss = plt_x, loss plt_val_acc = plt_x, val_acc plt_val_loss = plt_x, val_loss tools.plot_figure('acc & loss & val_acc & val_loss', plt_acc, plt_loss, plt_val_acc, plt_val_loss)
= tools.extract_da_from_sol(fname_sf_p_1) t, sf_p_100_pe_kf, sf_p_100_pn_kf, sf_p_100_err_p_kf, pe_ref, pn_ref, \ sf_p_100_err_p_kf, sf_p_100_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_sf_p_100) t, sf_p_10000_pe_kf, sf_p_10000_pn_kf, sf_p_10000_err_p_kf, pe_ref, pn_ref, \ sf_p_10000_err_p_kf, sf_p_10000_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_sf_p_10000) """ Plot """ fig = tools.plot_figure([sf_p_0001_pe_kf, sf_p_1_pe_kf, sf_p_100_pe_kf, sf_p_10000_pe_kf, pe_ref], [sf_p_0001_pn_kf, sf_p_1_pn_kf, sf_p_100_pn_kf, sf_p_10000_pn_kf, pn_ref], 5, [len(sf_p_0001_pe_kf),len(sf_p_1_pe_kf),len(sf_p_100_pe_kf),len(sf_p_10000_pe_kf), len(pe_ref)], ["co-", "b*-", "rp-", "m+-", "g.-"], ["$s_{P0} =0.0001$", "$s_{P0} =1$", "$s_{P0} =100$", "$s_{P0} =10000$", "ref"], "Position", "East ($m$)", "North ($m$)", '', 1, 1, 0, [], 0, [], fs=FS_PLOT, if_use_shift=1, x_shift_legend=SHIFT_LEGEND_X+0.15) pdf_P0.savefig(fig) fig = tools.plot_figure([sf_p_0001_pe_kf, sf_p_1_pe_kf, sf_p_100_pe_kf, sf_p_10000_pe_kf, pe_ref], [sf_p_0001_pn_kf, sf_p_1_pn_kf, sf_p_100_pn_kf, sf_p_10000_pn_kf, pn_ref], 5, [len(sf_p_0001_pe_kf),len(sf_p_1_pe_kf),len(sf_p_100_pe_kf),len(sf_p_10000_pe_kf), len(pe_ref)], ["co-", "b*-", "rp-", "m+-", "g.-"], ["$s_{P0} =0.0001$", "$s_{P0} =1$", "$s_{P0} =100$", "$s_{P0} =10000$", "ref"], "Position", "East ($m$)", "North ($m$)", '', 1, 0, 1, [-2,2], 1, [-2,20], fs=FS_PLOT, if_use_shift=1, x_shift_legend=SHIFT_LEGEND_X+0.15,
vrw_001_err_p_kf, vrw_001_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_VRW_001) t, vrw_01_pe_kf, vrw_01_pn_kf, vrw_01_err_p_kf, pe_ref, pn_ref, \ vrw_01_err_p_kf, vrw_01_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_VRW_01) t, vrw_1_pe_kf, vrw_1_pn_kf, vrw_1_err_p_kf, pe_ref, pn_ref, \ vrw_1_err_p_kf, vrw_1_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_VRW_1) """ Plot """ fig = tools.plot_figure([vrw_0001_pe_kf, vrw_001_pe_kf, vrw_01_pe_kf, vrw_1_pe_kf, pe_ref], [vrw_0001_pn_kf, vrw_001_pn_kf, vrw_01_pn_kf, vrw_1_pn_kf, pn_ref], 5, [len(vrw_0001_pe_kf),len(vrw_001_pe_kf),len(vrw_01_pe_kf),len(vrw_1_pe_kf), len(pe_ref)], ["co-", "b*-", "r+-", "mp-", "g.-"], ["$q_a=0.001 m/s/\u221A s$","$q_a= 0.01 m/s/\u221A s$","$q_a= 0.1 m/s/\u221A s$", "$q_a= 1 m/s/\u221A s$", "ref"], "Position", "East ($m$)", "North ($m$)", '', 1, 1, 0, [], 0, [], fs=FS_PLOT, if_use_shift=1, x_shift_legend=SHIFT_LEGEND_X+0.3) pdf_Q_qa.savefig(fig) fig = tools.plot_figure([t, t, t, t], [vrw_0001_err_p_kf, vrw_01_err_p_kf, \ vrw_0001_sqt_cov_p_kf, vrw_01_sqt_cov_p_kf], 4, [len(t),len(t),len(t),len(t)], ["bo-", "r+-", "c-.","m:"], ["$e_{p}$ ($q_a= 0.001 m/s/\u221A s$)", "$e_{p}$ ($q_a= 0.1 m/s/\u221A s$)", "$\sigma_{p}$ ($q_a= 0.001 m/s/\u221A s$)", "$\sigma_{p}$ ($q_a= 0.1 m/s/\u221A s$)", ],
r_1_err_p_kf, r_1_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_R_1) t, r_10_pe_kf, r_10_pn_kf, r_10_err_p_kf, pe_ref, pn_ref, \ r_10_err_p_kf, r_10_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_R_10) t, r_100_pe_kf, r_100_pn_kf, r_100_err_p_kf, pe_ref, pn_ref, \ r_100_err_p_kf, r_100_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_R_100) """ Plot """ fig = tools.plot_figure([r_01_pe_kf, r_1_pe_kf, r_10_pe_kf, r_100_pe_kf, pe_ref], [r_01_pn_kf, r_1_pn_kf, r_10_pn_kf, r_100_pn_kf, pn_ref], 5, [len(r_01_pe_kf),len(r_1_pe_kf),len(r_10_pe_kf),len(r_100_pe_kf), len(pe_ref)], ["c*-", "bo-", "r+-", "mp-", "g.-"], ["$\sigma_{R}=0.1 m$","$\sigma_{R}= 1 m$","$\sigma_{R}= 10 m$", "$\sigma_{R}= 100 m$", "ref"], "Position", "East ($m$)", "North ($m$)", '', 1, 1, 0, [], 0, [], fs=FS_PLOT, if_use_shift=1, x_shift_legend=SHIFT_LEGEND_X+0.1) pdf_R.savefig(fig) fig = tools.plot_figure([t, t, t, t], [r_1_err_p_kf, r_10_err_p_kf, \ r_1_sqt_cov_p_kf, r_10_sqt_cov_p_kf], 4, [len(t),len(t),len(t),len(t)], ["bo-", "r+-", "c-.","m:"], ["$e_{p}$ ($\sigma_{R}= 1 m$)", "$e_{p}$ ($\sigma_{R}= 10 m$)", "$\sigma_{p}$ ($\sigma_{R}= 1 m$)", "$\sigma_{p}$ ($\sigma_{R}= 10 m$)", ],
t, bd_1_pe_kf, bd_1_pn_kf, bd_1_err_p_kf, pe_ref, pn_ref, \ bd_1_err_p_kf, bd_1_sqt_cov_p_kf \ = tools.extract_da_from_sol(fname_BD_1) """ Plot """ fig = tools.plot_figure( [bd_0_pe_kf, bd_1_pe_kf, pe_ref], [bd_0_pn_kf, bd_1_pn_kf, pn_ref], 3, [len(bd_0_pe_kf), len(bd_1_pe_kf), len(pe_ref)], [ "r*-", "bo-", "g.-", ], ["$p_{2D}$ (no BD)", "$p_{2D}$ (with BD)", "ref"], "Position without/with blunder detection", "East ($m$)", "North ($m$)", '', 1, 1, 0, [], 0, [], fs=FS_PLOT, if_use_shift=1, x_shift_legend=SHIFT_LEGEND_X + 0.1) pdf_BD.savefig(fig) bd_0_cdf_x, bd_0_cdf_y = tools.cal_cdf(bd_0_err_p_kf) bd_1_cdf_x, bd_1_cdf_y = tools.cal_cdf(bd_1_err_p_kf) fig = tools.plot_figure([bd_0_cdf_x, bd_1_cdf_x],
# Simulate reference velocity and position for i in range(int(T_TOTAL / D_T)): t_cur = D_T * i pe_ref, pn_ref, ve_ref, vn_ref, t_ref = \ put_pos_vel_t_2_list(pe, pn, ve, vn, t_cur, pe_ref, pn_ref, ve_ref, vn_ref, t_ref) theta = set_thera_square(t_cur) pe, pn, ve, vn = update_vel_pos(pe, pn, theta, VEL, D_T) fig = tools.plot_figure([t_ref, t_ref], [ve_ref, vn_ref], 2, [len(t_ref), len(t_ref)], ["b.-", "r+-"], ["Ve", "Vn"], "Reference velocity", "Time ($sec$)", "Velocity ($m/s$)", '', 1, 0, 0, [], 0, [], fs=FS_PLOT) pdf.savefig(fig) #fig = tools.plot_figure([pe_ref], [pn_ref], 1, [len(pe_ref)], ["b.-"], # ["p"], "Reference Position", "x ($m$)", # "y ($m$)", '', 1, 1, 0, [], 0, [], fs=FS_PLOT) #pdf.savefig(fig) """ Generate observations """ # Add measurement noises