Transformers 4.37 中文文档(十六)(1)

简介: Transformers 4.37 中文文档(十六)


原文:huggingface.co/docs/transformers

模型输出

原文链接:huggingface.co/docs/transformers/v4.37.2/en/main_classes/output

所有模型的输出都是 ModelOutput 的子类实例。这些是包含模型返回的所有信息的数据结构,但也可以用作元组或字典。

让我们看一个示例:

from transformers import BertTokenizer, BertForSequenceClassification
import torch
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
labels = torch.tensor([1]).unsqueeze(0)  # Batch size 1
outputs = model(**inputs, labels=labels)

outputs 对象是一个 SequenceClassifierOutput,正如我们在下面该类的文档中所看到的,它包含一个可选的 loss,一个 logits,一个可选的 hidden_states 和一个可选的 attentions 属性。这里我们有 loss,因为我们传递了 labels,但是我们没有 hidden_statesattentions,因为我们没有传递 output_hidden_states=Trueoutput_attentions=True

当传递 output_hidden_states=True 时,您可以期望 outputs.hidden_states[-1]outputs.last_hidden_states 完全匹配。然而,并非总是如此。当返回最后隐藏状态时,一些模型会应用归一化或后续处理。

您可以像通常一样访问每个属性,如果该属性未被模型返回,您将得到 None。例如,在这里 outputs.loss 是模型计算的损失,而 outputs.attentionsNone

将我们的 outputs 对象视为元组时,只考虑那些没有 None 值的属性。例如,在这里,它有两个元素,loss 然后 logits,所以

outputs[:2]

例如,将返回元组 (outputs.loss, outputs.logits)

将我们的 outputs 对象视为字典时,只考虑那些没有 None 值的属性。例如,在这里,它有两个键,即 losslogits

我们在这里记录了被多个模型类型使用的通用模型输出。特定的输出类型在其相应的模型页面上有文档。

ModelOutput

class transformers.utils.ModelOutput

<来源>

( *args **kwargs )

作为数据类的所有模型输出的基类。具有 __getitem__,允许按整数或切片(如元组)或字符串(如字典)进行索引,将忽略 None 属性。否则,行为类似于常规的 Python 字典。

你不能直接解包一个 ModelOutput。在转换之前使用 to_tuple() 方法将其转换为元组。

to_tuple

<来源>

( )

将自身转换为包含所有不是 None 的属性/键的元组。

BaseModelOutput

class transformers.modeling_outputs.BaseModelOutput

<来源>

( last_hidden_state: FloatTensor = None hidden_states: Optional = None attentions: Optional = None )

参数

  • last_hidden_state (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)) — 模型最后一层的隐藏状态序列。
  • hidden_states (tuple(torch.FloatTensor)可选,当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — 形状为 (batch_size, sequence_length, hidden_size)torch.FloatTensor 元组。
    模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), 可选的, 当output_attentions=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。

模型输出的基类,具有潜在的隐藏状态和注意力。

BaseModelOutputWithPooling

class transformers.modeling_outputs.BaseModelOutputWithPooling

来源

( last_hidden_state: FloatTensor = None pooler_output: FloatTensor = None hidden_states: Optional = None attentions: Optional = None )

参数

  • last_hidden_state (形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor`) — 模型最后一层的隐藏状态序列。
  • pooler_output (形状为(batch_size, hidden_size)torch.FloatTensor`)  — 经过用于辅助预训练任务的层进一步处理后,序列中第一个标记(分类标记)的最后一层隐藏状态。例如,对于 BERT 系列模型,这返回经过线性层和  tanh 激活函数处理后的分类标记。线性层的权重是在预训练期间从下一个句子预测(分类)目标中训练的。
  • hidden_states (tuple(torch.FloatTensor), 可选的, 当output_hidden_states=True被传递或者当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的一个,加上每层的一个)。
    模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), 可选的, 当output_attentions=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。

模型输出的基类,还包含最后隐藏状态的池化。

BaseModelOutputWithCrossAttentions

class transformers.modeling_outputs.BaseModelOutputWithCrossAttentions

来源

( last_hidden_state: FloatTensor = None hidden_states: Optional = None attentions: Optional = None cross_attentions: Optional = None )

参数

  • last_hidden_state (形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor`) — 模型最后一层的隐藏状态序列。
  • hidden_states (tuple(torch.FloatTensor), 可选的, 当output_hidden_states=True被传递或者当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的一个,加上每层的一个)。
    模型在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), 可选的, 当output_attentions=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力权重在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), 可选的, 当output_attentions=Trueconfig.add_cross_attention=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。

模型输出的基类,具有潜在的隐藏状态和注意力。

BaseModelOutputWithPoolingAndCrossAttentions

class transformers.modeling_outputs.BaseModelOutputWithPoolingAndCrossAttentions

<来源>

( last_hidden_state: FloatTensor = None pooler_output: FloatTensor = None hidden_states: Optional = None past_key_values: Optional = None attentions: Optional = None cross_attentions: Optional = None )

参数

  • last_hidden_state (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层的输出的隐藏状态序列。
  • pooler_output (torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列第一个标记(分类标记)的最后一层隐藏状态(经过用于辅助预训练任务的层进一步处理后)的输出。例如,对于 BERT 系列模型,这返回经过线性层和 tanh 激活函数处理后的分类标记。线性层的权重是从预训练期间的下一个句子预测(分类)目标中训练的。
  • hidden_states (tuple(torch.FloatTensor), 可选的,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 元组的torch.FloatTensor(如果模型有嵌入层,则为嵌入的输出+每一层的输出)的形状为(batch_size, sequence_length, hidden_size)
    模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor), 可选的,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor的元组(每层一个)。
    注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), 可选的,当传递output_attentions=Trueconfig.add_cross_attention=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor的元组(每层一个)。
    解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
  • past_key_values (tuple(tuple(torch.FloatTensor)), 可选的,当传递use_cache=Trueconfig.use_cache=True时返回) — 长度为config.n_layerstuple(torch.FloatTensor)的元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量,如果config.is_encoder_decoder=True还有 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
    包含预先计算的隐藏状态(自注意力块中的键和值,以及如果config.is_encoder_decoder=True在交叉注意力块中)可用于加速顺序解码(请参见past_key_values输入)。

模型输出的基类,还包含最后隐藏状态的池化。

BaseModelOutputWithPast

class transformers.modeling_outputs.BaseModelOutputWithPast

<来源>

( last_hidden_state: FloatTensor = None past_key_values: Optional = None hidden_states: Optional = None attentions: Optional = None )

参数

  • last_hidden_state (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层的输出的隐藏状态序列。
    如果使用past_key_values,则只输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。
  • past_key_valuestuple(tuple(torch.FloatTensor))可选,当传递use_cache=Trueconfig.use_cache=True时返回)- 长度为config.n_layerstuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量,如果config.is_encoder_decoder=True还有 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
    包含预先计算的隐藏状态(自注意力块中的键和值,以及在交叉注意力块中如果config.is_encoder_decoder=True的情况下)可以用来加速顺序解码。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
    模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

模型输出的基类,可能还包含过去的键/值(用于加速顺序解码)。

BaseModelOutputWithPastAndCrossAttentions

class transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions

<来源>

( last_hidden_state: FloatTensor = None past_key_values: Optional = None hidden_states: Optional = None attentions: Optional = None cross_attentions: Optional = None )

参数

  • last_hidden_state(形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor)- 模型最后一层输出的隐藏状态序列。
    如果使用past_key_values,则只输出形状为(batch_size, 1, hidden_size)的序列的最后一个隐藏状态。
  • past_key_valuestuple(tuple(torch.FloatTensor))可选,当传递use_cache=Trueconfig.use_cache=True时返回)- 长度为config.n_layerstuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量,如果config.is_encoder_decoder=True还有 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
    包含预先计算的隐藏状态(自注意力块中的键和值,以及在交叉注意力块中如果config.is_encoder_decoder=True的情况下)可以用来加速顺序解码。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)- 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
    模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)- 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), optional, 当output_attentions=Trueconfig.add_cross_attention=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。

模型输出的基类,可能还包含过去的键/值(用于加速顺序解码)。

Seq2SeqModelOutput

class transformers.modeling_outputs.Seq2SeqModelOutput

< source >

( last_hidden_state: FloatTensor = None past_key_values: Optional = None decoder_hidden_states: Optional = None decoder_attentions: Optional = None cross_attentions: Optional = None encoder_last_hidden_state: Optional = None encoder_hidden_states: Optional = None encoder_attentions: Optional = None )

参数

  • last_hidden_state (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)) — 模型解码器最后一层的隐藏状态序列。
    如果使用past_key_values,则只输出形状为(batch_size, 1, hidden_size)的序列的最后隐藏状态。
  • past_key_values (tuple(tuple(torch.FloatTensor)), optional, 当use_cache=True被传递或者当config.use_cache=True时返回) — 长度为config.n_layerstuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量和 2 个额外的形状为(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)的张量。
    包含预先计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。
  • decoder_hidden_states (tuple(torch.FloatTensor), optional, 当output_hidden_states=True被传递或者当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入层的输出加上每层的输出)。
    解码器在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • decoder_attentions (tuple(torch.FloatTensor), optional, 当output_attentions=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    解码器的注意力权重,在注意力 softmax 之后,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor), optional, 当output_attentions=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    解码器的交叉注意力层的注意力权重,在注意力 softmax 之后,用于计算交叉注意力头中的加权平均值。
  • encoder_last_hidden_state (torch.FloatTensor,形状为(batch_size, sequence_length, hidden_size)optional) — 模型编码器最后一层的隐藏状态序列。
  • encoder_hidden_states (tuple(torch.FloatTensor), optional, 当output_hidden_states=True被传递或者当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入层的输出加上每层的输出)。
    编码器在每一层输出的隐藏状态加上可选的初始嵌入输出。
  • encoder_attentions (tuple(torch.FloatTensor), optional, 当output_attentions=True被传递或者当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    编码器的注意力权重,在注意力 softmax 后使用,用于计算自注意力头中的加权平均值。

模型编码器输出的基类,还包含:预先计算的隐藏状态,可以加速顺序解码。

CausalLMOutput

class transformers.modeling_outputs.CausalLMOutput

<来源>

( loss: Optional = None logits: FloatTensor = None hidden_states: Optional = None attentions: Optional = None )

参数

  • loss (torch.FloatTensor,形状为(1,)可选,当提供labels时返回) — 语言建模损失(用于下一个标记的预测)。
  • logits (torch.FloatTensor,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states (tuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的输出+每层的输出)。
    模型在每一层输出的隐藏状态,以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

因果语言模型(或自回归)输出的基类。

CausalLMOutputWithCrossAttentions

class transformers.modeling_outputs.CausalLMOutputWithCrossAttentions

<来源>

( loss: Optional = None logits: FloatTensor = None past_key_values: Optional = None hidden_states: Optional = None attentions: Optional = None cross_attentions: Optional = None )

参数

  • loss (torch.FloatTensor,形状为(1,)可选,当提供labels时返回) — 语言建模损失(用于下一个标记的预测)。
  • logits (torch.FloatTensor,形状为(batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_states (tuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入输出的输出+每层的输出)。
    模型在每一层输出的隐藏状态,以及可选的初始嵌入输出。
  • attentions (tuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
  • cross_attentions (tuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    交叉注意力 softmax 后的注意力权重,用于计算交叉注意力头中的加权平均值。
  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传递use_cache=Trueconfig.use_cache=True时返回) — 长度为config.n_layerstorch.FloatTensor元组,每个元组包含自注意力和交叉注意力层的缓存键、值状态,如果模型用于编码器-解码器设置,则相关。仅在config.is_decoder = True时相关。
    包含预先计算的隐藏状态(注意力块中的键和值),可用于加速顺序解码。

因果语言模型(或自回归)输出的基类。

CausalLMOutputWithPast

class transformers.modeling_outputs.CausalLMOutputWithPast

<来源>

( loss: Optional = None logits: FloatTensor = None past_key_values: Optional = None hidden_states: Optional = None attentions: Optional = None )

参数

  • loss(形状为(1,)torch.FloatTensor可选,当提供labels时返回)— 语言建模损失(用于下一个标记的预测)。
  • logits(形状为(batch_size, sequence_length, config.vocab_size)torch.FloatTensor)— 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • past_key_valuestuple(tuple(torch.FloatTensor))可选,当传递use_cache=Trueconfig.use_cache=True时返回)— 长度为config.n_layerstuple(torch.FloatTensor)元组,每个元组有 2 个形状为(batch_size, num_heads, sequence_length, embed_size_per_head)的张量)
    包含预先计算的隐藏状态(自注意力块中的键和值),可用于加速顺序解码。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
    模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

因果语言模型(或自回归)输出的基类。

MaskedLMOutput

class transformers.modeling_outputs.MaskedLMOutput

<来源>

( loss: Optional = None logits: FloatTensor = None hidden_states: Optional = None attentions: Optional = None )

参数

  • loss(形状为(1,)torch.FloatTensor可选,当提供labels时返回)— 掩码语言建模(MLM)损失。
  • logits(形状为(batch_size, sequence_length, config.vocab_size)torch.FloatTensor)— 语言建模头的预测分数(SoftMax 之前每个词汇标记的分数)。
  • hidden_statestuple(torch.FloatTensor)可选,当传递output_hidden_states=Trueconfig.output_hidden_states=True时返回)— 形状为(batch_size, sequence_length, hidden_size)torch.FloatTensor元组(如果模型有嵌入层,则为嵌入的输出+每层的输出)。
    模型在每一层输出的隐藏状态以及可选的初始嵌入输出。
  • attentionstuple(torch.FloatTensor)可选,当传递output_attentions=Trueconfig.output_attentions=True时返回)— 形状为(batch_size, num_heads, sequence_length, sequence_length)torch.FloatTensor元组(每层一个)。
    注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。

掩码语言模型输出的基类。


Transformers 4.37 中文文档(十六)(2)https://developer.aliyun.com/article/1564933

相关文章
|
4月前
|
PyTorch TensorFlow 调度
Transformers 4.37 中文文档(十五)(5)
Transformers 4.37 中文文档(十五)
51 1
Transformers 4.37 中文文档(十五)(5)
|
4月前
|
缓存
Transformers 4.37 中文文档(十六)(5)
Transformers 4.37 中文文档(十六)
26 2
|
4月前
Transformers 4.37 中文文档(十六)(3)
Transformers 4.37 中文文档(十六)
31 1
|
4月前
Transformers 4.37 中文文档(十六)(2)
Transformers 4.37 中文文档(十六)
39 1
|
4月前
Transformers 4.37 中文文档(十六)(4)
Transformers 4.37 中文文档(十六)
21 1
|
4月前
|
存储 PyTorch TensorFlow
Transformers 4.37 中文文档(十七)(1)
Transformers 4.37 中文文档(十七)
49 1
|
4月前
|
PyTorch TensorFlow 算法框架/工具
Transformers 4.37 中文文档(十七)(2)
Transformers 4.37 中文文档(十七)
35 1
|
4月前
|
文字识别 PyTorch TensorFlow
Transformers 4.37 中文文档(十七)(5)
Transformers 4.37 中文文档(十七)
48 1
|
4月前
|
自然语言处理 PyTorch TensorFlow
Transformers 4.37 中文文档(十七)(4)
Transformers 4.37 中文文档(十七)
41 1
|
4月前
|
并行计算 PyTorch TensorFlow
Transformers 4.37 中文文档(十七)(3)
Transformers 4.37 中文文档(十七)
35 1