1、乘的权重(w)都一样,加的偏置(b)也一样。b变成矩阵时使用广播机制。神经网络的参数w和b是网络需要学习的,其他是已知的。
2、学习能力越强,有可能会把输入样本中噪声的规律也学到。
3、该神经网络共3层;第一层是8维到6维的非线性空间变换,第二层是6维到4维的非线性空间变换,第三层是4维到1维的非线性空间变换。
4、本算法中torch.nn.Sigmoid() # 将其看作是网络的一层,而不是简单的函数使用
import numpy as np
import torch
import matplotlib.pyplot as plt
xy=np.loadtxt("diabetes.csv",delimiter=",",dtype=np.float32)
#加载数据,其中第一个参数表示文件名(注意路径)。第二个参数表示分隔符,第三个参数表示数据类型
x_data=torch.from_numpy((xy[:,:-1]))
#表示x_data来自于第一列到不取最后一列
y_data=torch.from_numpy(xy[:,[-1]])
#表示y_data来自于最后一列,注意最后一列需要加【】,表明是个矩阵
#模型
class DuoweiModel(torch.nn.Module):
def __init__(self):
super(DuoweiModel,self).__init__()
self.linear1=torch.nn.Linear(8,6)#8维输入变成6维输出
self.linear2=torch.nn.Linear(6,4)#6维输入变为4维输出
self.linear3=torch.nn.Linear(4,1)#4维输入变为1维输出
self.sigmoid=torch.nn.Sigmoid()#加上逻辑斯特变换
def forward(self,x):#预测
#上一层输出作为下一层输入,并且每一层都使用了sigmoid函数
x=self.sigmoid(self.linear1(x))
x=self.sigmoid(self.linear2(x))
x=self.sigmoid(self.linear3(x))
return x
duomodel=DuoweiModel()#实例化模型
criterion=torch.nn.BCELoss(reduction="mean")#定义损失函数
optimizer=torch.optim.SGD(duomodel.parameters(),lr=0.01)#定义优化器
epoch_list=[]#记录轮次
loss_list=[]#记录损失值
for epoch in range(10000):
y_pre=duomodel(x_data)#得到预测值
loss=criterion(y_pre,y_data)#计算损失值
epoch_list.append(epoch)#记录epoch
loss_list.append(loss)#记录损失值
optimizer.zero_grad()#梯度清零
loss.backward()#反向传递计算梯度
optimizer.step()#梯度更新
plt.plot(epoch_list,loss_list)
plt.xlabel("epoch")
plt.ylabel("loss")
plt.grid()
plt.show()