【深度学习实战】迈出第一步------编写第一个神经网络

本文作者分享了自己在深度学习实践中遇到的问题和反思,强调实际编写神经网络的重要性。通过创建回归函数,生成训练数据并绘制计算图,逐步解释了一个简单神经网络的构造过程。最后,概述了神经网络训练的四个基本步骤,并鼓励读者实践。
摘要由CSDN通过智能技术生成

前记

其实刚开始记录这个内容的时候,自己的内心是很纠结的,因为这本就不是我应该纠结的内容,coding是一个程序员必备的技能,不管他是处在一个什么岗位,但是自己貌似走入了一个误区,关于DeepLearning这一块,我一直在跑别人的代码,自认为理论熟悉了,代码写起来不就是小case么,自己是错了,因为,自己在写的时候,发现根本就写不出来,神经网络就是个黑盒子,看的轮子再多,自己没造一个轮子的话,那么万一轮子不存在呢?

有错误,就需要改正,有改正,就有进步,追着光亮那方......

回归函数

根据自己的经验(学习的经验),我们在构建网络时,不管是用Pytorch还是TensorFlow,最重要的是弄懂你需要计算的神经网络的结果,在TensorFlow里面叫做定义计算图(Compute Graph),这个内容是有助于我们理清思路,这对于刚写神经网络的我们来说好处是无比巨大的,现在养成一个好习惯,不论是多么复杂,多少层的神经网络,在计算之前,画出计算图,你会发现神经网络这个黑盒子或许不再黑了.....

好吧,扯了这么多,我们开始步入我们正题吧,在这里,我是自己生成训练数据以及训练结果,定义的数据之后,我们将其采用点图的形式画出来,代码如下:

# 生成训练数据
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
y=x.pow(2)+0.2*torch.rand(x.size())
# 查看x,y的形状
print(x.shape,y.shape)

然后我们看出生成的结果:

接下来就是定义我们的神经网络结构,在这里,我只是简单的定义一层网络结构,想让这层神经网络学习出我们想要的结果,按照之前说的,我们先画出计算图,

是不是很简单呢,有了这个计算图,我们很容易定义出我们的神经网络结构:

class Net(torch.nn.Module):
    def __init__(self,n_feature,n_hidden,n_output):
        super(Net,self).__init__()
        # 定义隐藏层输入的size为n_feature,输出的size为n_hidden
        self.hidden=torch.nn.Linear(n_feature,n_hidden)  # hidden layer
        self.predict=torch.nn.Linear(n_hidden,n_output)  # output layer
        
    def forward(self,x):
        x=F.relu(self.hidden(x))   # activation function for hidden layer
        y=self.predict(x)          # linear output
        return y

主体的神经网络结构在这里我们已经定义完成了,后面的就是进行神经网络的训练了,神经网络的训练一般是遵循以下四个步骤,定义好了这四个步骤,我们就可以开始愉快的进行训练了......

# 确定优化器
optimizer=torch.optim.SGD(net.parameters(),lr=0.2)
# 定义损失函数,采用均方误差
loss_func=torch.nn.MSELoss()

# 定义epoch
EPOCHES=2000
for epoch in range(EPOCHES):
    # 步骤1:去除每一步记录的梯度
    optimizer.zero_grad()

    # 步骤2:将题目给的输出转为我们神经网络能够接收的输人
   

    # 步骤3:运行前向算法
    prediction=net(x)

    # 计算损失函数,并且进行梯度更新
    loss=loss_func(prediction,y)
    loss.backward()
    optimizer.step()
    
    if epoch%5==0:   # 画出拟合图
        plt.cla()
        plt.scatter(x.data.numpy(),y.data.numpy())
        plt.plot(x.data.numpy(),prediction.data.numpy(),'r-',lw=5)
        plt.text(0.5,0,"Loss=%.4f"%loss.data.numpy(),fontdict={'size':20,'color':'red'})
        plt.pause(0.1)

总结

是开始,也是新的方向,fighting,fighting,fighting!

完整的代码,请移步我的GitHub.

Reference

https://morvanzhou.github.io/tutorials/machine-learning/torch/3-01-regression/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值