我试图使用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中那样明确定义(如果我错了,请纠正我)。
答案 0 :(得分:3)
您不需要明确地调用torch.matmul
:这是在forward
层的nn.Linear
方法的实现中。通过调用self.layer_10(z)
,实际上是在幕后调用forward
方法,该方法进行矩阵乘法并为您添加偏差。
如果希望代码完全相同,则可能要使用相同的方法显式初始化权重。为此,您有nn.init
实现了各种权重初始化。具体来说,您可能会发现nn.init.xavier_uniform_
相关。