Pytorch小试牛刀-----神经网络前向传播测试

        做课题主要用到的工具为pytorch,虽然本人是python小白,不过之前有C++的基础,python代码看起来并不费劲,pytorch在暑假就安装好了,只是一直放着没有用,并且安装的gpu版(1650的显卡在瑟瑟发抖)。最近开始学习pytorch的使用方法,准备用它搭建几个神经网络,于是就去网上搜了各种教程,在此实现一个最简单的部分-----前向传播。

        之前用C++从零实现了简单的神经网络,但是从研究的角度而言,这不是重点,神经网络只是我们达到某些目标的工具,我们要做的是弄懂原理,并且能够熟练运用成熟的框架,毕竟我们自己写的神经网络无论如何也达不到成熟框架所能给出的那种效果。话不多说,直接放代码

        

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc1=nn.Linear(784,50)
        self.fc2=nn.Linear(50,10)
    def forward(self,x):
        x=self.fc1(x)
        x=self.fc2(x)
        return x

net=Net()
net.__init__()
output=net.forward(torch.randn(1,784))
print(output)

这是一个最最简洁的神经网络前向传播的实验小程序,没有设置激活函数,这些东西在之后慢慢加上,先把最简单的东西搞清楚。首先引入torch中的nn模块,这里面包含了各种各样的神经网络操作,之后我们定义一个类叫Net继承自nn.Moudle,然后重写一个构造方法,在该构造方法中用super()调用父类的构造方法进行初始化,接下来设置神经网络的层,用的是Linear,Linear实际上是一个类,它的构造方法源代码是这样的:

   def __init__(self, in_features, out_features, bias=True):
        super(Linear, self).__init__()
        self.in_features = in_features
        self.out_features = out_features
        self.weight = Parameter(torch.Tensor(out_features, in_features))
        if bias:
            self.bias = Parameter(torch.Tensor(out_features))
        else:
            self.register_parameter('bias', None)
        self.reset_parameters()

只看第一句,其余的不用管,可以看到里面有四个参数,self不管,in_features是指前一层神经网络的神经元数目,out_features则是本层神经元数目,也可以理解为in是输入,是从前面输入进来的,out是输出,从这里输出出去的,最后一个参数是偏置bias。因此,self.fc1=nn.Linear(784,50)这句代码就生成了神经网络的一个层,而784和50这两个参数是一个矩阵的大小,即784*50的矩阵,这里面存放了该层的权重,等会儿用输入矩阵和该权重矩阵作乘法,就完成了神经网络的一层传播到下一层,这个权重矩阵的参数会自动初始化,因此我们只需负责输入就行了,这里用torch.randn去生成一组随机数据作为输入。从这里也可以看到,用矩阵运算去计算神经网络比设置循环方便多了,并且更加高效。构造方法设计完之后,我们定义一个前向传播函数forward,设置一个参数x,负责接收输入矩阵,在forward中实现两次传播,最后创建一个刚刚设计好的类的对象,去测试一下得到结果

本文中设置的矩阵维数是依据手写数字识别的过程设置的,因为mnist数据集中图像大小为28*28=784,所以输入数据设置为1*784,输出值为10个,相当于模拟了这一过程。第一步完成,继续加油吧!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值