一、多维特征输入
多维数据的输入可以看成矩阵进行运算,如下有8维的数据(N*8),进变换后形成1维的数据(N*1)

二、糖尿病数据集为例

数据说明
pregnancies: 怀孕次数
glucose:口服葡萄糖耐量试验中 2 小时的血浆葡萄糖浓度
bloodpressure:血压
skinthickness:皮下脂肪厚度,单位mm
insulin:餐后2小时血清胰岛素含量(mu U/ml )
bmi:体重指数 (体重 kg/(身高 m)^2)
diabetespedigreefunction:糖尿病谱系功能统计图 DPF
age:年龄
outcome(Y):是否患糖尿病


如示表示了空间将维的过程,从8维->6维->4维->1维。
三、代码实现
代码过程:前馈—反馈---更新
- import torch.nn
- import numpy as np
-
- #dilimiter 分隔符
- xy=np.loadtxt('diabetes.csv.gz',delimiter=',',dtype=np.float32)
- #除去最后一列
- x_data=torch.from_numpy(xy[:,:-1])
- #取最后一列
- y_data=torch.Tensor(xy[:,[-1]])
-
- #继承类Module,自动会实现反向计算图
- class Model(torch.nn.Module):
- #构造方法
- def __init__(self):
- super(Model, self).__init__()
- self.linear1=torch.nn.Linear(8,6)
- self.linear2=torch.nn.Linear(6,4)
- self.linear3=torch.nn.Linear(4,1)
- self.sigmoid=torch.nn.Sigmoid()
-
-
- def forward(self, x):
- x=self.sigmoid(self.linear1(x))
- x=self.sigmoid(self.linear2(x))
- x=self.sigmoid(self.linear3(x))
- return x
-
- model=Model()
-
- criterion=torch.nn.BCELoss(size_average=True)
- optimizer=torch.optim.SGD(model.parameters(),lr=0.1)
-
- for epoch in range(100):
- #Forward
- y_pred=model(x_data)
- loss=criterion(y_pred,y_data)
- print(epoch,loss.item())
-
- #Backward
- optimizer.zero_grad()
- loss.backward()
- #upDatae
- optimizer.step()
-
-
-
-
- 96 0.6449363231658936
- 97 0.6449353694915771
- 98 0.6449344158172607
- 99 0.6449335813522339