相当于Tensorflow线性层的PyTorch

时间:2019-12-04 01:50:18

标签: tensorflow pytorch

我试图使用PyTorch框架重新实现Tensorflow代码。下面,我包括了TF示例代码和我的PyT解释。

TensorFlow实现:

W1 = tf.Variable(xavier_init([135, 128]))
b1 = tf.Variable(tf.zeros(shape=[128]))

def fcn(x):
    z = tf.reshape(x, (-1, 135))
    out1 = leaky_relu( tf.matmul(z, W1) + b1 )

    return out1

PyTorch实现:

class decoder(nn.Module):
    def __init__(self):
        super(decoder, self).__init__()

        self.layer_10 = nn.Linear(135, 128, bias=True)
        self.leaky = nn.LeakyReLU(0.2, inplace=False)
        init.xavier_uniform(self.layer_10.weight) 

    def forward(self, x):
        z = x.view(-1, 135)
        h30 = self.leaky(self.layer_10(z))

        return h30

我想知道实现matmul部分的正确方法是什么,因为pytorch中的权重没有像在TF中那样明确定义(如果我错了,请纠正我)。

1 个答案:

答案 0 :(得分:3)

您不需要明确地调用torch.matmul:这是在forward层的nn.Linear方法的实现中。通过调用self.layer_10(z),实际上是在幕后调用forward方法,该方法进行矩阵乘法并为您添加偏差。

如果希望代码完全相同,则可能要使用相同的方法显式初始化权重。为此,您有nn.init实现了各种权重初始化。具体来说,您可能会发现nn.init.xavier_uniform_相关。