bert4keras icon indicating copy to clipboard operation
bert4keras copied to clipboard

关系抽取样例task_relation_extraction预测出错 tf版本2.1

Open enjlife opened this issue 4 years ago • 6 comments

提问时请尽可能提供如下信息: bojone您好,我根据您的代码写了预测的函数,训练过程没有问题是在1.14的环境下,预测是在2.1的环境下

基本信息

  • 你使用的操作系统: win10
  • 你使用的Python版本: 3.6
  • 你使用的Tensorflow版本: 2.1
  • 你使用的Keras版本: 2.3
  • 你使用的bert4keras版本: 0.7.3
  • 你使用纯keras还是tf.keras: keras
  • 你加载的预训练模型:albert

核心代码

def predict(test_path):
    test_text = []
    with open(test_path, encoding='utf-8') as textf:
        for text in textf:
            test_text.append(text)
    f = open('test_pred.json', 'w', encoding='utf-8')
    pbar = tqdm()
    for i, t in enumerate(test_text):
        R = set([SPO(spo) for spo in extract_spoes(t)])
        pbar.update()
        pbar.set_description('第%d个预测' % (i))
        s = json.dumps({'text': t, 'spo_list_pred': list(R)}, ensure_ascii=False, indent=4)
        f.write(s + '\n')
    pbar.close()
    f.close()
train_model.load_weights('best_model.weights')
predict(text_path)

输出信息

我查看了object预测的模型输入,发现是没有问题的,报错的路径 call, session.py:1474 call, backend.py:3567 predict_loop, training_arrays.py:324 predict, training.py:1462 extract_spoes, task_relation_extraction.py:283 predict, task_relation_extraction.py:362 , task_relation_extraction.py:405

tensorflow.python.framework.errors_impl.InvalidArgumentError: Matrix size-incompatible: In[0]: [1,2], In[1]: [624,312]
	 [[{{node layer_normalization_1/dense_8/MatMul}}]]

自我尝试

bojone您好,因为训练过程是可以正常输出验证结果,所以我尝试了换了1.14版本的tf就不报错了,挺想知道这个错误的原因。

enjlife avatar May 12 '20 06:05 enjlife

使用1.14的時候我也依樣沒問題 但使用新版的tf 2.2 evaluate的時候precision 會一直都是1 recall是0 loss 會降不下來

Jim0530 avatar May 14 '20 16:05 Jim0530

使用1.14的時候我也依樣沒問題 但使用新版的tf 2.2 evaluate的時候precision 會一直都是1 recall是0 loss 會降不下來

那就不用2.2

bojone avatar May 15 '20 06:05 bojone

训练集数据量10w结果是是正常的,1w就会出现问题。我是 tf1.14.0,训练的时候 loss 是下降的,但是验证和测试的结果全是空,导致 precision一直为1,recall一直为0,请问这是什么情况呢?数据量少的情况下训练多少都是空,无法过拟合训练集的数据

TPF2017 avatar May 28 '20 13:05 TPF2017

训练集数据量10w结果是是正常的,1w就会出现问题。我是 tf1.14.0,训练的时候 loss 是下降的,但是验证和测试的结果全是空,导致 precision一直为1,recall一直为0,请问这是什么情况呢?数据量少的情况下训练多少都是空,无法过拟合训练集的数据

这个问题我也遇到过,我理解的是跟模型有关系,因为主体的选择具有随机性,会有比较大的负样本量,再加上模型本身的稀疏性,在数据量比较少的情况下,导致模型无法做出预测

enjlife avatar Jun 01 '20 03:06 enjlife

训练集数据量10w结果是是正常的,1w就会出现问题。我是 tf1.14.0,训练的时候 loss 是下降的,但是验证和测试的结果全是空,导致 precision一直为1,recall一直为0,请问这是什么情况呢?数据量少的情况下训练多少都是空,无法过拟合训练集的数据

这个问题我也遇到过,我理解的是跟模型有关系,因为主体的选择具有随机性,会有比较大的负样本量,再加上模型本身的稀疏性,在数据量比较少的情况下,导致模型无法做出预测

训练步数上去之后也是有结果的,需要训练足够多的步数,少量数据也能训练和预测,只不过这个学习率是非常低(去掉ema的话就会大很多),少量数据训练几千个epoch也是不会过拟合的。

TPF2017 avatar Jun 01 '20 03:06 TPF2017

@TPF2017 大佬你好,您是怎么吧苏神代码里的EMA权重去掉的?我尝试了几次,但是因为自己设备的原因,每次要第二或者第三天才能拿到报错信息,能分享一下您是怎么去掉的吗

ChenSi199808 avatar Apr 18 '21 02:04 ChenSi199808