使用fastnlp时遇到的问题

本文详细探讨了FastNLP中tester模块的测试流程,装饰器的使用技巧,inspect模块的应用,以及如何理解和使用`_call_()`方法。特别关注了`_transfer(func)`装饰器在fastnlp/core/utils.py中的定位,以及在使用BERT词向量时的变化原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、tester中对验证集的测试在哪里?

回答:在tester中的test函数中,这里需要注意的是,test函数中没有直接调用SpanFPreRecMetric函数计算F1,而是调用了其继承的Metric基类,来调用SpanFPreRecMetric中的evaluate方法。

2、fastnlp中的装饰器怎么使用?

通过使用__getattr__方法,调用不同时刻遇到的不同函数。

3、inspect模块

使用了spect = inspect.getfullargspec(func)方法,获得函数参数的名称和默认值。

4、_call_()方法

1、该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。

Python 中,凡是可以将括号 ()直接应用到自身并执行,都称为可调用对象。可调用对象包括自定义的函数、Python 内置函数以及类实例对象。
对于可调用对象,实际上“名称()”可以理解为是“名称.__call__()”的简写。
参考链接:http://c.biancheng.net/view/2380.html

2、特点:_call_() 弥补了 hasattr() 函数的短板
hasattr() 函数的用法,该函数的功能是查找类的实例对象中是否包含指定名称的属性或者方法,但该函数有一个缺陷,即它无法判断该指定的名称,到底是类属性还是类方法。
要解决这个问题,可以借助可调用对象的概念。因为类实例对象包含的方法,其实也属于可调用对象,但类属性却不是。
例子如下所示:

class Person:
    def __init__ (self):
        self.name = "tyler"
        self.age = 18
    def write(self):
        print("我正在写字")

tyler = Person()
if hasattr(tyler,"name"):
    print(hasattr(tyler.name,"__call__"))
print("--------------------------------")
if hasattr(tyler,"write"):
    print(hasattr(tyler.write,"__call__"))
    
'''
False
--------------------------------
True
'''

5、_transfer(func)装饰器在哪

fastnlp/core/utils.py

6、fastnlp使用bert作为词向量时,向量值为什么会变

因为其使用了dropout,所以每次dropout的位置不同,导致数值会变。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值