简单神经网络

  1. 准备数据集合
  2. 准备模型(猜测模型的结构,超参数,人工或者自动的办法(auto machine learning)),模型参数待定
  3. 将数据分成训练集合和测试集合,设计损失函数(误差)
  4. 训练数据(包括输入和正确结果),正向传播训练数据的输入,得到猜测的值,猜测值和正确结果比较得到损失函数(误差,是自己定义的,很关键)
  5. 反向传播误差,分配误差(假设是参数导致的)
  6. 利用分配到的误差,去调整参数(利用梯度和分配到的误差去求)
  7. 调整后的参数再去训练(第二轮)
  8. 当总的误差小于阈值的时候停止
  9. 验证: 用新的真实数据去验证一下,你的模型好用不,不好用(泛化能力差)

 

 

 

 

 

 

import torch  #pytorch
#  import tensorflow as tf 
import torch.nn as nn
import torch.nn.functional as F
import torch.onnx 
import netron
import matplotlib.pyplot as plt

from torch.autograd import Variable

随机产生一些数据

x = torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
y = x.pow(2) + 0.2*torch.rand(x.size()) ##[]表示的是维度数据
x,y = Variable(x),Variable(y)
#神经网络只能输入Variable类型的数据

#下面这两行代码可以看到神经网络生成的图长什么样子
plt.scatter(x.data.numpy(),y.data.numpy())
plt.show()

 构造神经网络

class Net(torch.nn.Module):
    def __init__(self,n_features,n_hidden,n_output): #构造函数
        #构造函数里面的三个参数分别为,输入,中间隐藏层处理,以及输出层
        super(Net,self).__init__() #官方步骤
        self.hidden=torch.nn.Linear(n_features,n_hidden)
        self.predit=torch.nn.Linear(n_hidden,n_output)

    def forward(self,x):  #搭建的第一个浅层神经网络  向前传递
        x = F.relu(self.hidden(x))
        x = self.predit(x)  #此行可预测也可以不预测
        return x

初始化神经网络

net = Net(1,10,1)
print(net)  #此行用于观看到是否网络搭建成功,产生效果

# 输出,可视化
d = torch.rand(1,10,1)
m = net
o = m(d)
onnx_path = "onnx_model_first.onnx"
torch.onnx.export(m, d, onnx_path)

输出:

Net(
  (hidden): Linear(in_features=1, out_features=10, bias=True)
  (predit): Linear(in_features=10, out_features=1, bias=True)
)

 

降维是减少维度,随机梯度是减少样本(随机地找部分样本做梯度查找最小值)

 

 

 

 

反向传播

要和真实的标签(z)相比较,计算预测结果和真实标签的误差(范数,距离等等)

反向传播的目的是求参数梯度,也就是参数小的变动时,函数值的变化速度

修改参数(权重)

误差E有了,怎么调整参数让误差不断减小? E是参数的函数,何如找到使得函数值最小的w

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值