Пример #1
0
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
Пример #2
0
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))
Пример #3
0
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')
Пример #4
0
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))