如果我有一个函数的引用,我可以检查它的代码对象f.__code__,获取签名,然后对此签名执行后续检查以查看代码是否更改.这很好.但是,如果其中一个功能的依赖项发生了变化呢?例如
def foo(a, b):
return bar(a, b)
Run Code Online (Sandbox Code Playgroud)
让我们说foo保持不变,但bar改变了.有没有办法可以foo通过foo.__code__对象检查'依赖''live' (与解析文本和使用AST)?
使用示例
def foo(a):
def bar(b):
return a+b
return bar
d = {1:foo(1), 2:foo(2)}
Run Code Online (Sandbox Code Playgroud)
看来pickle模块不能使用未在模块范围定义的函数,因此酸洗'd'将不起作用.我还应该考虑另一种酸洗机制吗?
想做类似的事情
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute")).unsqueeze(0) # Batch size 1
outputs = model(input_ids)
last_hidden_states = outputs[0] # The last hidden-state is the first element of the output tuple
Run Code Online (Sandbox Code Playgroud)
(来自此线程)使用 longformer
文档示例似乎做了类似的事情,但令人困惑(特别是如何设置注意力掩码,我假设我想将其设置为[CLS]令牌,该示例将全局注意力设置为我认为的随机值)
>>> import torch
>>> from transformers import LongformerModel, LongformerTokenizer
>>> model = LongformerModel.from_pretrained('allenai/longformer-base-4096', return_dict=True)
>>> tokenizer = LongformerTokenizer.from_pretrained('allenai/longformer-base-4096')
>>> SAMPLE_TEXT = ' '.join(['Hello world! '] * 1000) # long input document
>>> input_ids = torch.tensor(tokenizer.encode(SAMPLE_TEXT)).unsqueeze(0) # batch …Run Code Online (Sandbox Code Playgroud) Per 如何生成可重复的随机数序列?可以设置随机模块的状态,以便您可以期望后续调用randint返回相同的数字.
我用这种方法看到的一个限制是状态设置在模块级别(本质上是一个全局变量),所以似乎不可能创建几个可重复的随机数流/迭代器(但是流的调用可以任意交错) )与当前的机制.是否有任何变通办法/替代库可以实现这一目标?