PyTorch深度学习实践——处理多维特征的输入

参考资料

参考资料1:https://blog.csdn.net/bit452/article/details/109682078
参考资料2:http://biranda.top/Pytorch%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0008%E2%80%94%E2%80%94%E5%A4%9A%E7%BB%B4%E7%89%B9%E5%BE%81%E9%97%AE%E9%A2%98/

处理多维特征的输入(根据数据二分类判定是否患有糖尿病)

数据文件

链接:https://pan.baidu.com/s/1nTrvlLrzc90VQGPc–Um6w?pwd=1895
提取码:1895
PyTorch深度学习实践——处理多维特征的输入_第1张图片
当前目录是D:\PythonPreliminary\pytorch_tutorial,两个点是返回上一级目录D:\PythonPreliminary,然后 /diabetes.csv就是选择当前目录下的这个文件,就是D:\PythonPreliminary\diabetes.csv
在这里插入图片描述
糖尿病数据集(diabetes.csv),每个样例(sample)有8个维度的信息(feature)。
PyTorch深度学习实践——处理多维特征的输入_第2张图片
PyTorch深度学习实践——处理多维特征的输入_第3张图片

测试

测试代码

import torch
import numpy as np
#读取文件,一般GPU只支持32位浮点数
#diabetes.csv糖尿病数据集,csv文件的分隔符是逗号,
xy = np.loadtxt('../diabetes.csv', delimiter=',', dtype = np.float32)
#-1行 -1列不取, :-1 冒号前面空中表示从头开始。
x_data = torch.from_numpy(xy[:-1, :-1])
#单取-1列作为矩阵,[-1]表示矩阵
y_data = torch.from_numpy(xy[:-1,[-1]])
y_data1 = torch.from_numpy(xy[:-1,-1])

#取-1行的测试集部分
test_data = torch.from_numpy(xy[[-1], :-1])
test_data1 = torch.from_numpy(xy[-1, :-1])
pred_test = torch.from_numpy(xy[[-1],[-1]])
pred_test1 = torch.from_numpy(xy[[-1],-1])
pred_test2 = torch.from_numpy(xy[-1,[-1]])
#pred_test3 = torch.from_numpy(xy[-1,-1])

print('x_data',x_data)
print('y_data',y_data)
print('y_data1',y_data1)
print('test_data',test_data)
print('test_data1',test_data1)
print('pred_test',pred_test)
print('pred_test1',pred_test1)
print('pred_test2',pred_test2)

#print('pred_test3',pred_test2)#TypeError: expected np.ndarray (got numpy.float32),torch.from_numpy(括号内是numpy类型的,不能只是一个数)

测试结果

PyTorch深度学习实践——处理多维特征的输入_第4张图片
PyTorch深度学习实践——处理多维特征的输入_第5张图片
PyTorch深度学习实践——处理多维特征的输入_第6张图片
PyTorch深度学习实践——处理多维特征的输入_第7张图片

size

PyTorch深度学习实践——处理多维特征的输入_第8张图片

重要函数解析

torch.nn.Sigmoid
PyTorch深度学习实践——处理多维特征的输入_第9张图片

BCELOSS
PyTorch深度学习实践——处理多维特征的输入_第10张图片

代码

import torch
import numpy as np
#读取文件,一般GPU只支持32位浮点数
#diabetes.csv糖尿病数据集,csv文件的分隔符是逗号,
xy = np.loadtxt('../diabetes.csv', delimiter=',', dtype = np.float32)
#-1行 -1列不取, :-1 冒号前面空中表示从头开始。
x_data = torch.from_numpy(xy[:-1, :-1])#x_data torch.Size([758, 8]) 行坐标是样本数量,列坐标是特征数
#单取-1列作为矩阵,[-1]表示矩阵
y_data = torch.from_numpy(xy[:-1,[-1]])#y_data torch.Size([758, 1])
#取-1行的测试集部分
test_data = torch.from_numpy(xy[[-1], :-1])#test_data torch.Size([1, 8])
pred_test = torch.from_numpy(xy[[-1],[-1]])#pred_test torch.Size([1])

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() # y=1/(1+e^(-x))

    def forward(self, x):
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        x = self.sigmoid(self.linear3(x))# y hat
        return x

model = Model()
#还是logistic回归 ,所以仍然是BCELoss
criterion = torch.nn.BCELoss(reduction='mean')

optimizer = torch.optim.SGD(model.parameters(), lr=0.1)

for epoch in range(100):
    #Forward 并非mini-batch的设计,只是mini-batch的风格
    #model这把所有x_data都扔进去了
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch, loss.item())

    #Backward
    optimizer.zero_grad()
    loss.backward()

    #Update
    optimizer.step()
#预测值
print("test_pred = ", model(test_data).item())
#实际值
print("infact_pred = ", pred_test.item())

结果

PyTorch深度学习实践——处理多维特征的输入_第11张图片

你可能感兴趣的:(PyTorch,深度学习实践,深度学习,pytorch)