【PyTorch基础教程7】多维特征input

简介: 之前的一维特征input,只有一个x和权重w相乘,多维的情况则是xi依次与逐个wi相乘(ps:每行x都这样算,每行即每个样本),可以用向量形式表示:

一、和一维特征的区别

之前的一维特征input,只有一个x和权重w相乘,多维的情况则是xi依次与逐个wi相乘(ps:每行x都这样算,每行即每个样本),可以用向量形式表示:

image.png

sigmoid函数对向量中每个元素都sigmoid一次。

继续上面运算,改为矩阵运算(便于利用cuda运算):

image.png

稍微复习:y=Ax,矩阵A起到线性变换的作用,将x的N维度映射为M维度,即为一种空间变换的函数。而神经网络是想寻找一种非线性变换的空间函数,而可以通过多个线性变换层(下面栗子就是每次线性后加个非线性激活函数sigmoid),通过找到最优的权重,来组合起来,从而模拟非线性变换。


而需要设置多少层,每层怎么设置,一般需要超参数搜索。

image.png

ps:隐层越多,学习能力越强,但也不一定好,因为会学习到数据中的噪声,所以学习能力需要泛化能力。大学和高中的学习也是这样的思想,不需要死扣书本,特别是计算机科学需要学习读文档和基础架构的理念(泛化能力强)。


二、激活函数

relu取值范围也是0到1,但是如果input是小于0的则relu值为0(输出0是有风险的,因为后面可能会算ln 0,所以如果前面用的其他的激活函数,注意:最后一个一般改为sigmoid激活函数,这样就能输出0到1之间数)。



三、糖尿病预测

多层线性层,详见注释。

# -*- coding: utf-8 -*-
"""
Created on Mon Oct 18 10:18:24 2021
@author: 86493
"""
import torch 
import torch.nn as nn
import numpy as np
import matplotlib.pyplot as plt
# 这里的type不用double,特斯拉GPU才double
xy = np.loadtxt('diabetes.csv',
                delimiter = ' ',
                dtype = np.float32)
# 最后一列不要
x_data = torch.from_numpy(xy[: , : -1])
# [-1]则拿出来的是一个矩阵,去了中括号则拿出向量
y_data = torch.from_numpy(xy[:, [-1]])
losslst = []
class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.linear1 = nn.Linear(9, 6)
        self.linear2 = nn.Linear(6, 4) 
        self.linear3 = nn.Linear(4, 1)         
        # 上次logistic是调用nn.functional的Sigmoid
        self.sigmoid = nn.Sigmoid()
        # 这个也是继承Module,没有参数,比上次写法不容易出错
    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 = nn.BCELoss(size_average = False)
optimizer = torch.optim.SGD(model.parameters(), 
                            lr = 0.01)
# 训练,下面没有用mini-batch,后面讲dataloader再说
for epoch in range(10):
    y_predict = model(x_data)
    loss = criterion(y_predict, y_data)
    # 打印loss对象会自动调用__str__
    print(epoch, loss.item())
    losslst.append(loss.item())
    # 梯度清零后反向传播
    optimizer.zero_grad()
    loss.backward()
    # 更新权重
    optimizer.step()
# 画图
plt.plot(range(10), losslst)
plt.ylabel('Loss')
plt.xlabel('epoch')
plt.show()

image.png

相关文章
|
6天前
|
存储 物联网 PyTorch
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
**Torchtune**是由PyTorch团队开发的一个专门用于LLM微调的库。它旨在简化LLM的微调流程,提供了一系列高级API和预置的最佳实践
103 59
基于PyTorch的大语言模型微调指南:Torchtune完整教程与代码示例
|
3月前
|
并行计算 Ubuntu PyTorch
Ubuntu下CUDA、Conda、Pytorch联合教程
本文是一份Ubuntu系统下安装和配置CUDA、Conda和Pytorch的教程,涵盖了查看显卡驱动、下载安装CUDA、添加环境变量、卸载CUDA、Anaconda的下载安装、环境管理以及Pytorch的安装和验证等步骤。
449 1
Ubuntu下CUDA、Conda、Pytorch联合教程
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十八)(1)
PyTorch 2.2 中文官方教程(十八)
195 2
PyTorch 2.2 中文官方教程(十八)(1)
|
6月前
|
并行计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十七)(4)
PyTorch 2.2 中文官方教程(十七)
182 2
PyTorch 2.2 中文官方教程(十七)(4)
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十九)(1)
PyTorch 2.2 中文官方教程(十九)
132 1
PyTorch 2.2 中文官方教程(十九)(1)
|
6月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十八)(3)
PyTorch 2.2 中文官方教程(十八)
90 1
PyTorch 2.2 中文官方教程(十八)(3)
|
6月前
|
API PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十八)(2)
PyTorch 2.2 中文官方教程(十八)
166 1
PyTorch 2.2 中文官方教程(十八)(2)
|
6月前
|
异构计算 PyTorch 算法框架/工具
PyTorch 2.2 中文官方教程(十七)(3)
PyTorch 2.2 中文官方教程(十七)
91 1
PyTorch 2.2 中文官方教程(十七)(3)
|
6月前
|
PyTorch 算法框架/工具 机器学习/深度学习
PyTorch 2.2 中文官方教程(十七)(2)
PyTorch 2.2 中文官方教程(十七)
134 1
PyTorch 2.2 中文官方教程(十七)(2)
|
6月前
|
PyTorch 算法框架/工具 异构计算
PyTorch 2.2 中文官方教程(十七)(1)
PyTorch 2.2 中文官方教程(十七)
208 1
PyTorch 2.2 中文官方教程(十七)(1)