Pytorch深度学习(六):多维特征的输入

多维特征的输入

    • 一、概念
    • 二、完整实现代码:

一、概念

我们来看看多维输入(Multiple Dimension Input),我们先看看多维Logistic回归模型:
Pytorch深度学习(六):多维特征的输入_第1张图片
假设我们有一个8维的输入,于是就可以改变我们的Logistic回归模型。
Pytorch深度学习(六):多维特征的输入_第2张图片
运用相关矩阵的知识我们便可以分析出Z矩阵的相关维度,并且b矩阵可以运用广播机制来参与相关的运算。
下面是对糖尿病病人的病情进行预测,预测未来是否会加重。
输入有8个指标,也就是8个维度,输出只有一个维度即是否加重病情。

维度的变化其实就是线性代数中矩阵乘法的作用:[m×n]⋅[n×k]=[m×k][m×n]⋅[n×k]=[m×k]

二、完整实现代码:

import numpy as np
import torch
#1.准备数据集
xy = np.loadtxt('diabetes.csv.gz',delimiter=',',dtype=np.float32)
#xy = np.loadtxt('diabetes.csv',delimiter=',',dtype=np.float32)

'''
torch.from_numpy()方法把数组转换成张量,且二者共享内存,
对张量进行修改比如重新赋值,那么原始数组也会相应发生改变。
'''
x_data = torch.from_numpy(xy[:,:-1])  #x_data除了最后一列不取
y_data = torch.from_numpy(xy[:,[-1]]) # y_data是最后1列


#2.构建网络模型class
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()

#3.构造损失函数和优化器
criterion = torch.nn.BCELoss(size_average=True)  #还是二分类的,继续用BCELoss
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)

#4.训练
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()
    
    #Update
    optimizer.step()

参考链接:https://blog.csdn.net/qq_45866407/article/details/108112533
https://www.bilibili.com/video/BV1Y7411d7Ys?p=7

你可能感兴趣的:(Pytorch深度学习,人工智能与机器学习,python学习,机器学习,深度学习,神经网络,Pytorch)