model(**inputs)括号里边是什么?
inputs = {"input_ids": batch[0], "attention_mask": batch[1], "labels": batch[3]}
if args.model_type != "distilbert":
# XLM and RoBERTa don"t use segment_ids
inputs["token_type_ids"] = (batch[2] if args.model_type in ["bert", "xlnet"] else None)
outputs = model(**inputs)
outputs = model(**inputs)为啥这样写,这是啥,是指针?
Python中的list(列表)和dict(字典)变量前面加星号*的作用
列表
作用1:将列表解开成几个独立的参数,传入函数。类似的运算符还有两个星号(**),是将字典解开成独立的元素作为形参。
我当时学过列表加*
作用:作用是:将列表解开成几个独立的参数,传入函数。
list变量前加一个星号*,目的是将该list变量拆解开多个独立的参数,传入函数中
举例:
list1 = [1, 2, 3]
print(*list1)
输出结果:
1 2 3
输出结果为三个元素,可以作为参数传入某个函数中
作用2:*号也可以作用于二维的列表
# 作用于二维列表
array = [[1, 2, 3],
[4, 5, 6]
]
print(array)
print(*array)
print(type(array))
print(type(*array))
输出:
[[1, 2, 3], [4, 5, 6]]
[1, 2, 3] [4, 5, 6]
<class 'list'>
print(type(*array))
TypeError: type() takes 1 or 3 arguments
字典
作用:字典前面加两个星号,Python中,*会把接收到的参数形成一个元组,**会把接收到的参数存入一个字典。
def print_1(input_ids, attention_mask, token_type_ids, intent_label_ids, slot_labels_ids):
print("input_ids:",input_ids)
print("attention_mask:", attention_mask)
print("token_type_ids:", token_type_ids)
print("intent_label_ids:", intent_label_ids)
print("slot_labels_ids:", slot_labels_ids)
if __name__ == '__main__':
batch = [ [ [11],
[22]],
[ [33],
[44]],
[ [55],
[66]],
[ [77],
[88]],
[ [99],
[00]] ]
inputs = {'input_ids': batch[0], # 第一行
'attention_mask': batch[1], # 第二行
'token_type_ids': batch[2],
'intent_label_ids': batch[3],
'slot_labels_ids': batch[4] }
print_1(**inputs)
print(inputs)
** 的作用是把字典 inputs 变成关键字参数传递
结果如下图所示。
input_ids: [[11], [22]]
attention_mask: [[33], [44]]
token_type_ids: [[55], [66]]
intent_label_ids: [[77], [88]]
slot_labels_ids: [[99], [0]]
{'input_ids': [[11], [22]],
'attention_mask': [[33], [44]],
'token_type_ids': [[55], [66]],
'intent_label_ids': [[77], [88]],
'slot_labels_ids': [[99], [0]]}