0

我们chainer.functions.linear用来计算y=Wx+b.

就我而言,我必须实现一个多维的线性链接。

假设输入示例是(c, x),所需的输出是 then y = W_c x + b。让我们忽略偏见并做到这一点y = W_c x
的基数{c}是预先知道的(通常是样本类别)。

理论上,该W参数可以实现为 3-d 张量(C, y_dims, x_dims)。但还有什么?我是否必须遍历批次并提取W_c形状(y_dims, x_dims)functions.linear仅调用该(1, x_dims)形状的示例?

4

1 回答 1

0

好吧,我自己找到了这个问题的一个解决方案。

让数据的形状如下,

  • 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.ndarrayandcupy.ndarray chainer.Variable接受。它的工作方式类似numpy.take但可微分,并节省了大量工作。

于 2017-12-01T17:55:25.133 回答