def compare_acc_f1(old_list, new_list, y_true, stepC, stepV): pred = compare_pred(old_list, new_list) # print (" pred: %s" % (pred)) acc = accuracy(y_true, pred) f1_score = expand_dims_f1(y_true, pred) # print("concat hc=%s,hv=%s, max accuracy: %f, f1: %f" % (stepC, stepV, acc, f1_score)) return f1_score
def model_predict(model, data): if data.train_enable: pred = model.predict(data.get_train_data()) loss = cross_entropy_loss(pred, data.train_y) print(" pred--loss: %s" % (loss)) acc = accuracy(data.train_y, pred) print(" pred--acc: %s" % (acc)) f1_score = expand_dims_f1(data.train_y, pred) print(" pred--f1: %s" % (f1_score)) if data.test_enable: pred = model.predict(data.get_train_data()) loss = cross_entropy_loss(pred, data.test_y) print(" pred--loss: %s" % (loss)) acc = accuracy(data.test_y, pred) print(" pred--acc: %s" % (acc)) f1_score = expand_dims_f1(data.test_y, pred) # 用f1有问题 print(" pred--f1: %s" % (f1_score))
def run_block_model(): data = LoadData(sample_size=None, train_enable=True, test_enable=False) # data = LoadData(sample_size=None, train_enable=False, test_enable=True) data.show_data_shape() ### model # 初始化logging debug = False # 训练用旧指标(mean) # 预测用混合指标, 新指标(max)为False才用旧指标(mean) # mean='mean' # mean='max' mean = 'max_mean' # 保存比较值(np), 用于外部调参 # 开debug, 代码走call save_data = True model = create_model(data.max_vocab_len, data.max_seq_len, data.max_modes_len, h5_file=h5_file, debug=debug, mean=mean, save_data=save_data) if data.train_enable: if debug: # 这样才能打logging pred = model([data.get_train_data()]) else: # 速度快 pred = model.predict(data.get_train_data()) loss = cross_entropy_loss(pred, data.train_y) print(" pred--loss: %s" % (loss)) acc = accuracy(data.train_y, pred) print(" pred--acc: %s" % (acc)) f1_score = expand_dims_f1(data.train_y, pred) print(" pred--f1: %s" % (f1_score)) res_string = 'loss=%s, acc=%s, f1_score=%s' % ( np.array(loss), np.array(acc), np.array(f1_score)) save_pred_result(data.train_t1, data.train_t2, pred, data.train_y, res_string, name='train_calc')
def old_acc_f1(p_list, y_true, HP_m=None): pred = old_pred(p_list) # print (" pred: %s" % (pred)) acc = accuracy(y_true, pred) f1_score = expand_dims_f1(y_true, pred) return acc, f1_score
def check_run_stop(step, data, model): global check_stop_acc, check_stop_f1, cur_stop_step # 批大小不一样, 单独计算 if data.test_enable: pred = model.predict(data.get_test_data()) # 感觉这个要快 loss = cross_entropy_loss(pred, data.train_y) acc = accuracy(data.train_y, pred) f1_score = expand_dims_f1(data.train_y, pred) # 用f1有问题 if step < 0: # 训练结束, 显示总指标, 传参数-1: print("----------------\n predict: accuracy: %f, f1: %f" % (acc, f1_score)) elif acc > check_stop_acc and f1_score > check_stop_f1: # 更新f1, 用于判断下次是否保存: # 不更新acc, 大于0.6就行 check_stop_f1 = f1_score print("----------------\n update stop step: %s, acc: %s, f1: %s" % (step + diff_stop_step, check_stop_acc, check_stop_f1)) # 更新weights, 加大结束步长 # 第1步不保存, 效果未知, 避免覆盖上次训练的结果 if cur_stop_step > 0: print("--------save_weights") model.save_weights(h5_file.format(data.max_vocab_len), overwrite=True) # 渐进6步后退出: cur_stop_step = step + diff_stop_step else: # 退出条件 if cur_stop_step > 0 and step > cur_stop_step: return 1 elif data.train_enable: pred = model.predict(data.get_train_data()) # 感觉这个要快 loss = cross_entropy_loss(pred, data.train_y) acc = accuracy(data.train_y, pred) f1_score = expand_dims_f1(data.train_y, pred) # 用f1有问题 if step < 0: # 训练结束, 显示总指标, 传参数-1: print("----------------\n predict: accuracy: %f, f1: %f" % (acc, f1_score)) elif acc > check_stop_acc and f1_score > check_stop_f1: # 更新f1, 判断下次是否保存: # 不更新acc, 大于0.6就行 check_stop_f1 = f1_score print( "----------------\n update stop step: %s, acc > %s, f1 > %s" % (step + diff_stop_step, check_stop_acc, check_stop_f1)) # 更新weights, 加大结束步长 # 第1步不保存, 效果未知, 避免覆盖上次训练的结果 if cur_stop_step > 0: print("--------save_weights") model.save_weights(h5_file.format(data.max_vocab_len), overwrite=True) # 渐进6步后退出: cur_stop_step = step + diff_stop_step else: # 退出条件 if cur_stop_step > 0 and step > cur_stop_step: return 1 return 0
continue check_ret = 0 if is_use_check_stop and step > start_check_step: check_ret = check_run_stop(step, data, model) if check_ret > 0: break else: # Run the optimization to update W and b values. pred, loss = run_optimization(x1, x2, m1, m2, mi1, mi2, n1, n2, cnt1, cnt2, y) if step % display_step == 0 or step == 1: #loss = cross_entropy_loss(pred, y) acc = accuracy(y, pred) f1_score = expand_dims_f1(y, pred) # 用f1有问题 print("step: %i, loss: %f, accuracy: %f, f1: %f" % (step, loss, acc, f1_score)) if is_use_check_stop == False: print(" save: %s" % (h5_file.format(data.max_vocab_len))) model.save_weights(h5_file.format(data.max_vocab_len), overwrite=True) # 总的acc,f1 check_run_stop(-1, data, model) #w = new_model.get_weights() #logging.getLogger().info("--weights\n %s" % (tf.shape(w))) #logging.getLogger().info("--weights\n %s" % (w))