如何在chainer中实现一个批量线性链接,该链接支持批量中每个示例的不同权重?

2024-04-24 07:10:32 发布

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

我们使用chainer.functions.linear来计算y=Wx+b。你知道吗

在我的例子中,我必须实现一个多维度的线性链接。你知道吗

假设输入示例是(c, x),那么所需的输出就是y = W_c x + b。让我们忽略偏见,让它y = W_c x
{c}的基数是预先知道的(通常是样本类)。你知道吗

理论上W参数可以实现为三维张量(C, y_dims, x_dims)。但还有什么?我是否必须迭代批处理并提取形状为(y_dims, x_dims)W_c并仅为该(1, x_dims)形状的示例调用functions.linear?你知道吗


Tags: 示例参数链接线性理论functions例子chainer
1条回答
网友
1楼 · 发布于 2024-04-24 07:10:32

嗯,我自己找到了一个解决问题的办法。你知道吗

数据的形状如下:

  • W: (C, y_dims, x_dims)
  • x: (batch, x_dims)
  • c: (batch, 1)

首先,我必须为每批x得到一个权重矩阵:

W_c = chainer.functions.get_item(W, chainer.as_variable(c).data)
y = chainer.functions.batch_matmul(W_c, chainer.expand_dims(x, 2)) // in shape (batch, y_dims, 1)

所以这里的关键函数是get_item,它接受numpy.ndarraycupy.ndarray,但不接受chainer.Variable。它的工作原理类似于numpy.take,但是它是可微的,并且节省了大量的工作。你知道吗

相关问题 更多 >