两个神经元之间的交流(神经网络python)
用两个神经元组成的神经网络去拟合一个y=x函数
下图为神经网络示意图

输入和输出之间权重为w,偏置为b
数据:[1,2],[2,4],[3,6],[4,8],[5,10],用这几个点去拟合神经网络,[x,y]格式,x是输入,y是输出
前向传播(一开始默认w = 0.236,b = -0.8626):
从 第一个点(1,2)开始计算,得出一个y‘

可见y’离目标值y=2差很多。
计算loss

反向传播:
(更新参数)
更新权重:

更新偏置:

L就是loss,学习率α设为0.1
(这里默认是线性的,没有激活函数)
用把所有的数据都这样算一遍后,输出权重和偏置:

训练次数越多,数据越好,权重w和偏置b就会越贴近 w = 2 ,b = 0
以下是代码:
#导入包 import torch import torch.nn as nn #数据 data = torch.tensor([[[1],[2]],[[2],[4]],[[3],[6]],[[4],[8]],[[5],[10]]],dtype=torch.float) #参数 epoches = 1 #搭建网络 class NNModel(torch.nn.Module): def __init__(self): super(NNModel,self).__init__() #调用父类的初始化函数 torch.manual_seed(50) #设置随机数种子,防止预测的结果是随机数 self.layer1 = nn.Sequential(nn.Linear(1,1)) def forward(self,mydata): mydata = self.layer1(mydata) return mydata model = NNModel() #实例化网络 criterion = nn.MSELoss() optimizer = torch.optim.SGD(model.parameters(), 0.1) #设置优化函数和学习率 model.train() #调整为训练模式 for e in range(epoches): #训练网络 for i in data: x = i[0] y = i[1] print(model.state_dict()) #输出网络的权重参数 out = model(x) #前向计算 loss = criterion(out,y) #计算损失函数 #print(loss) optimizer.zero_grad() loss.backward() #反向传播 optimizer.step() print(model.state_dict())
浙公网安备 33010602011771号