示例#1
0
 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)
示例#2
0
 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)
示例#3
0
                                        = 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