Pytorch:PyTorch中的nn.Module.forward()函数、torch.randn()函数和torch.cat()函数使用

nn.Module.forward()函数使用:

在类初始化的时候并不会触发forward()函数的调用,而是在实例化后,在需要计算前向传播时才会被调用。
当你实例化了一个神经网络时,可以通过传入网络输入,调用其forward()函数输入到神经网络中,获取输出结果。

下面是一个简单的例子,使用一个随机初始化的神经网络来完成求X和Y的和的操作,供你参考:

import torch
import torch.nn as nn

class AddNet(nn.Module):
    def __init__(self, in_dim, h_dim=5, out_dim=1):
        super().__init__()
        self.fc1 = nn.Linear(in_dim, h_dim)
        self.fc2 = nn.Linear(h_dim, out_dim)

    def forward(self, x, y):
        out = torch.cat([x, y], dim=1)
        out = torch.relu(self.fc1(out))
        out = self.fc2(out)
        return out

add_net = AddNet(in_dim=2)
x = torch.randn(1, 1)
y = torch.randn(1, 1)
result = add_net.forward(x, y)
print(result)

在上述代码中,我们定义了一个AddNet神经网络类,它包含两个全连接层,其中第一层连接输入的x和y,第二层输出一个单独的节点,即对x和y的和的预测。在forward()函数中,我们将x和y按列拼接组成(1,2)的输入,接着经过一层ReLU激活函数和一层线性层后输出结果。在实例化类时,我们可以通过调用forward()函数传入我们需要计算的x和y值,并获取计算结果。

以上代码是一个简单的例子,展示了如何利用PyTorch中的nn.Module类定义一个小型神经网络,并如何利用前向传播函数forward()实现输入到输出的计算,以达到函数调用的效果。

torch.randn()函数作用

在上面的代码中,torch.randn(1, 1)的作用是生成一个1行1列的张量,其中的值是从均值为0、标准差为1的正态分布中随机采样得到的。这个张量代表了模型需要计算的一个输入值。由于AddNet模型需要两个输入数值来进行计算,所以我们在生成两个随机数张量x和y之后,把它们传入到模型的forward()函数中,来获取它们的和的计算结果。

这里使用 torch.randn() 的作用是随机生成输入。torch.randn() 是一个PyTorch内置函数,能够生成标准正态分布随机数。因为神经网络的输入往往是实际场景中的数据,训练数据的特点也具备随机性,所以在进行前向计算的过程中,需要将一些随机的输入植入到神经网络中,以验证神经网络的泛化能力,并提高其对不同数据集的适应性。而使用 torch.randn() 随机生成的数据分布在标准正态分布的范围内,适合使用在未知数据上的预测中。

上面程序中torch.cat([x, y], dim=1)作用

在上面的代码中,torch.cat([x, y], dim=1)的作用是将张量x和y沿着列维度(dim=1)进行拼接,构成一个新的张量。在这个案例中,我们定义了一个AddNet神经网络,需要对两个张量x和y进行求和操作。为了将x和y输入到神经网络中,我们需要将它们拼接成一个新的2列的张量。

举一个例子,如果x和y分别如下定义:

x = torch.tensor([[1]])
y = torch.tensor([[2]])
#执行torch.cat([x, y], dim=1)的结果为:

tensor([[1, 2]])

这就是把x和y沿着列维度进行拼接之后所形成的一个新的张量。在这个程序中,将随机生成的大小为(1,1)的张量x和y使用torch.cat()函数进行拼接,其中dim=1表示在列维度上进行拼接,生成一个形状为(1,2)的新张量。这个新张量的第一列对应着x这个大小为(1,1)的张量中的唯一元素,而第二列对应着y这个大小为(1,1)的张量中的唯一元素,两者合并为一个大小为(1,2)的张量,可以作为神经网络模型的输入。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值