双线性

torch.nn.Bilinear(in1_features, in2_features, out_features, bias=True, device=None, dtype=None)[源代码]

对输入数据进行双线性变换:$y = x_1^T A x_2 + b$

参数
  • in1_features (int) – 第一个输入样本的大小

  • in2_features (int) – 第二个输入样本的大小

  • out_features (int) – 输出样本的尺寸

  • bias (bool) – 如果设置为 False,层不会学习加性偏置。默认值: True

形状:
  • 输入1: $(*, H_{in1})$ 其中 $H_{in1}=\text{in1\_features}$$*$ 表示可以是任意数量的额外维度(包括没有)。输入的所有维度除了最后一个之外都应该相同。

  • 输入2: $(*, H_{in2})$,其中$H_{in2} = \text{in2\_features}$

  • 输出为 $(*, H_{out})$,其中 $H_{out}=\text{out\_features}$。除了最后一维之外,所有维度的形状都与输入相同。

变量
  • weight (torch.Tensor) – 模块的可学习权重,形状为$(\text{out\_features}, \text{in1\_features}, \text{in2\_features})$。这些值从分布$\mathcal{U}(-\sqrt{k}, \sqrt{k})$初始化,其中$k = \frac{1}{\text{in1\_features}}$

  • bias - 模块的可学习偏置,形状为$(\text{out\_features})$。如果biasTrue,则从分布$\mathcal{U}(-\sqrt{k}, \sqrt{k})$中初始化值,其中$k = \frac{1}{\text{in1\_features}}$

示例:

>>> m = nn.Bilinear(20, 30, 40)
>>> input1 = torch.randn(128, 20)
>>> input2 = torch.randn(128, 30)
>>> output = m(input1, input2)
>>> print(output.size())
torch.Size([128, 40])
本页目录