callbacks
wangbq18 opened this issue · 18 comments
请问支持模型在训练过程中调用类似 keras 中的callbacks 的函数进行验证吗
你好,没有能够理解你的意思。请问需要验证什么内容呢
你好,没有能够理解你的意思。请问需要验证什么内容呢
就是训练一定的step 后加载训练好额模型在验证集上进行验证,然后继续训练
这个是可以的,通过 target_steps 和 total_steps 两个参数控制训练断点,在断点上进行验证。README_CN.md 里面有详细介绍,在 训练/推理/评分
这一节,这里就不重复了
这个当然是可以的,通过 target_steps 和 total_steps 两个参数控制训练断点,在断点上进行验证。README.md 里面有详细介绍,在
训练/推理/评分
这一节,这里就不重复了
嗯嗯,我看到这个了,我这边设置target_steps后,训练中断 验证完成后,整个训练过程也停止了,不清楚怎么回事
这个是可以的,通过 target_steps 和 total_steps 两个参数控制训练断点,在断点上进行验证。README_CN.md 里面有详细介绍,在
训练/推理/评分
这一节,这里就不重复了
total_steps = len(_X)//8*3
model.fit(X=_X,
y=_Y,
sample_weight=None,
X_tokenized=None,
batch_size=8,
learning_rate=5e-5,
target_steps=500,
total_steps=total_steps, #
warmup_ratio=0.1,
print_per_secs=60,
save_per_steps=500)
score = model.score(X=_Xd, y=_Yd, sample_weight=None, X_tokenized=None, batch_size=8)
print(score)
类似这个
python 是动态语言,执行完这一行代码以后就不会再重复了,你可以写一个 for 或 while 循环让系统再一次执行 .fit()
解决这个问题。记得在每一次循环时改变 target_steps
这个值。示例:
# 假设你需要中途进行 10 次模型验证,而训练总共持续 6 轮
for loop_id in range(10):
print('*** Running training on loop %d ***' % loop_id)
model.fit(X, y, target_steps=((loop_id + 1) * -0.6), total_steps=-6)
print('*** Running evaluation ***')
print(model.score(X_dev, y_dev))```
示例:
# 假设你需要中途进行 10 次模型验证,而训练总共持续 6 轮 for loop_id in range(10): print('*** Running training on loop %d ***' % loop_id) model.fit(X, y, target_steps=((loop_id + 1) * -0.6), total_steps=-6) print('*** Running evaluation ***') print(model.score(X_dev, y_dev))```
好的,明白了,如果能在fit函数中添加成类似keras 中的回调函数callbacks方法就更棒了
这样对于原 Keras 的使用用户更友好,但可能会增加 API 的复杂度,不利于其他初学者。所以还是得委屈你一下了
这样对于原 Keras 的使用用户更友好,但可能会增加 API 的复杂度,不利于其他初学者。所以还是得委屈你一下了
明白,感谢解答!
嗯嗯,小意思~ 还得感谢你投入时间尝试这个名不见经传的小作品,有什么问题或意见可以再随时联系
嗯嗯,小意思~ 还得感谢你投入时间尝试这个名不见经传的小作品,有什么问题或意见可以再随时联系
做实体识别任务时,解码输出的实体会含有[UNK]的情况,建议解码时直接从原始文本中切出实体的span
好的好的,这个反馈很棒,感谢。从原始文本切容易出错,要加许多复杂的逻辑,span-based 的 MRC 类也会有这种问题,我暂时还没想好怎么用简单的方法规范地处理这一类问题,这一改就是代码的大改。要不你暂时先试试用正则表达式从原始文本提取吧,把 [UNK]
替换为 .*
,或者其他的文本处理算法
好的好的,这个反馈很棒,感谢。从原始文本切容易出错,要加许多复杂的逻辑,span-based 的 MRC 类也会有这种问题,我暂时还没想好怎么用简单的方法规范地处理这一类问题,这一改就是代码的大改。要不你暂时先试试用正则表达式从原始文本提取吧,把
[UNK]
替换为.*
,或者其他的文本处理算法
好的好的,这个反馈很棒,感谢。从原始文本切容易出错,要加许多复杂的逻辑,span-based 的 MRC 类也会有这种问题,我暂时还没想好怎么用简单的方法规范地处理这一类问题,这一改就是代码的大改。要不你暂时先试试用正则表达式从原始文本提取吧,把
[UNK]
替换为.*
,或者其他的文本处理算法
目前大家都是从tokenizer入手,建立编码前后id之间的映射关系,然后直接从原始文本中切出实体
嗯嗯,好的,这个我知道。如果没有更简单的方法,那我找个时间处理�一下
NER 类写出来以后,还没有在大型数据集上测试过,你觉得其他的体验如何呢
NER 类写出来以后,还没有在大型数据集上测试过,你觉得其他的体验如何呢
整体还行:
{'f1 (OTH-T)': 0.49999944531299034, 'f1 (OTH-E)': 0.499999250000625,
'f1 (RIV-T)': 0.9127602083405878, 'f1 (RIV-E)': 0.8853459123161158,
'f1 (ORG-T)': 0.4974353962003684, 'f1 (ORG-E)': 0.3870962622274919,
'f1 (DAM-T)': 0.4946231661468389, 'f1 (DAM-E)': 0.34782558034091565,
'f1 (HYD-T)': 0.7386358645406153, 'f1 (HYD-E)': 0.7878782442611042,
'f1 (RES-T)': 0.9535227355230556, 'f1 (RES-E)': 0.935896923981201,
'f1 (TER-T)': 0.5796402273301856, 'f1 (TER-E)': 0.564971252833273,
'f1 (PER-T)': 0.5384610259702189, 'f1 (PER-E)': 0.5185179807960941,
'f1 (LOC-T)': 0.8544463982162634, 'f1 (LOC-E)': 0.8132775079056985,
'f1 (LAK-T)': 0.8727267723457396, 'f1 (LAK-E)': 0.8571423540505576,
'loss': 23.176748}
这是一个水利相关实体识别的结果,可以考虑在结果中加一个整体的平均指标