一、多维特征输入
多维数据的输入可以看成矩阵进行运算,如下有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