Applies a bilinear transformation to the incoming data \(y = x_1^T A x_2 + b\)
Arguments
- in1_features
size of each first input sample
- in2_features
size of each second input sample
- out_features
size of each output sample
- bias
If set to
FALSE
, the layer will not learn an additive bias. Default:TRUE
Shape
Input1: \((N, *, H_{in1})\) \(H_{in1}=\mbox{in1\_features}\) and \(*\) means any number of additional dimensions. All but the last dimension of the inputs should be the same.
Input2: \((N, *, H_{in2})\) where \(H_{in2}=\mbox{in2\_features}\).
Output: \((N, *, H_{out})\) where \(H_{out}=\mbox{out\_features}\) and all but the last dimension are the same shape as the input.
Attributes
weight: the learnable weights of the module of shape \((\mbox{out\_features}, \mbox{in1\_features}, \mbox{in2\_features})\). The values are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\), where \(k = \frac{1}{\mbox{in1\_features}}\)
bias: the learnable bias of the module of shape \((\mbox{out\_features})\). If
bias
isTRUE
, the values are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\), where \(k = \frac{1}{\mbox{in1\_features}}\)
Examples
if (torch_is_installed()) {
m <- nn_bilinear(20, 30, 50)
input1 <- torch_randn(128, 20)
input2 <- torch_randn(128, 30)
output <- m(input1, input2)
print(output$size())
}
#> [1] 128 50