张量流:如何定制收集/分割张量?

2024-06-13 02:34:17 发布

您现在位置:Python中文网/ 问答频道 /正文

请允许我简要介绍一下背景。我正在研究一个bilstm-CRF架构来完成序列标记任务。我不想将LSTM编码的各个步骤的特征输入到CRF层,而是收集属于同一段的特征向量,并对它们进行平均,然后将这些特征送入CRF。该方法是在序列组块的神经模型中提出的。在

现在我们有了一个3D张量X[batch\和一个2D张量Xl[batch\}[batch\},表示序列的IOB标签。如何收集属于同一段的特征向量并将其转换为4D输出张量[batch_size,max_segment_num,max_segment_len,num_features]?段边界由IOB标签确定,其中B表示开始,I表示内部标记。在

X:
[[v11, v12, v13, v14, v15],
 [v21, v22, v23, v24, v25],
 ...]

IOB labels:
[[B, I, B, I, I],
 [B, B, I, I, B],
 ...]

and the expected output:
[[[v11, v12], [v13, v14, v15]],
 [[v21], [v22, v23, v24], [v25]],
 ...]

with the output, we can compute segment features:
[[u11, u12, 0],  # supposing max_segment_num = 3
 [u21, u22, u23],
 ...]

我研究过一些内置函数,比如tf.gather或{},但据我所知,它们都不支持自定义方式。我也研究了掩蔽功能,但没有发现它们有什么帮助。在

我尝试手动操作张量,并分配给一个新创建的4D张量,但被困在那里。模型定义中的张量X是一个占位符,并在训练中输入数据。因此,下面的语句失败了,抱怨我们现在必须向占位符提供数据。在

^{pr2}$

谁能给我个提示吗?我如何解决这个问题,或者有没有更简单的方法使用内置函数?提前谢谢。在


Tags: 方法标记模型batchsegment序列特征标签