pytorch处理多维输入的问题

1.多维输入

之前我们的输入都是只有一个维度,如果有多个维度呢?
对于每一行叫做一个sample(样本)
对于每一列叫做一个feature(特征)
数据集各种各样的什么都有。
csv可以使用excel打开,只能打开逗号做分割的数据集,空格和tab都是不行的。所以可以用记事本打开看一下子。

原来的处理函数发生了相应的变化,从一维的变化成了多维
在这里插入图片描述
这个过程拆解来看其实是这样子的:为了保证其标量性做了一次转置:
在这里插入图片描述
这里我们有一次简写:算出来的这个标量整体写成z
在这里插入图片描述
pytorch中的所有继承自torch.nn.module的这些函数都是向量化函数,在执行的时候函数将自动的应用在向量的每个元素当中,如下图所示:
在这里插入图片描述
我们使用z来表示全部内容就是这样子的,同时因为自动的向量化我们可以写成后面的形式。然后我们仔细想一下这个事情,把这个再展开,看看抽象里面到底是什么内容:
在这里插入图片描述
但是上面的式子,只是我们理解计算做的事情相当于在做什么,看起来好像是使用一个for循环来操作就行了,但是torch真正在做什么呢?其实整体都扩展为向量和矩阵计算的。
在这里插入图片描述

2.多层神经网络的问题

之前我们讲的是罗杰斯特回归的情况是,都是一层的,那多层的又是怎样的一种情况呢?
什么是矩阵呢?矩阵其实可以理解成一个空间变换方程,就是从一个维度的方程变化成另外一种维度的方程。从一个维度的空间的一个向量直接对应成为另外一个维度空间的一个向量,所以可以看成是一种空间变换的函数。
我们其实是用多层的线性函数模拟一种非线性的函数,让训练的模型更加接近实际情况。为什么可以拟合一个非线性呢?主要是是siogmal函数来引入了非线性的变换。其实我们只要在维度降低的过程时候多拆分几次就可以了。
当然我们也可以先往高维度变换,再向低维度来进行变化。这种维度变得更多,其实是超参数的变换。这样可以增加学习能力,但是学习能力太强也不行,会产生噪声的问题。

2.1泛化能力

我们已学习来举例子。并不用死扣书本,因为偏技术应用性的内容可能过几年就发生了变化。要有读文档(主要是应对版本更新的问题)、计算机各种科目的基本架构都了解掌握的能力。这样其实就是泛化能力比较强。所以这样我们就更加能够理解学习器学习能力太强的情况了。学习能力太强其实就是在背书本了。

3.代码实现

3.1正常实现

这里面其实我们只是更改了模型这里的内容

class MyModule(torch.nn.Module):
    def __init__(self):
        super(MyModule,self).__init__()
        self.linear9_8=torch.nn.Linear(9,8)
        self.linear8_6=torch.nn.Linear(8,6)
        self.linear6_2=torch.nn.Linear(6,2)
        self.linear2_1=torch.nn.Linear(2,1)
        self.sigmoid=torch.nn.Sigmoid()
        #这里我们注意我们是让sigmoid单独成为了一个层,和之前的在functional当中调用的那个是不一样的

    def forward(self,x):
        x=self.sigmoid(self.linear9_8(x))
        x=self.sigmoid(self.linear8_6(x))
        x=self.sigmoid(self.linear6_2(x))
        x=self.sigmoid(self.linear2_1(x))
        #我们注意这里的是最好反复使用同一个x,不要写x1x2这种,因为那样子的话容易出错。

3.2激活函数的快速修改

我们可以将激活函数也提前定义出来这样就可以一下子更改所有了
于此同时我们要注意我们是一个分类还是一个回归分析,如果是一个分布我们一定要注意最终一定要是一个sigomid()


class MyModule(torch.nn.Module):
    def __init__(self):
        super(MyModule,self).__init__()
        self.linear9_8=torch.nn.Linear(9,8)
        self.linear8_6=torch.nn.Linear(8,6)
        self.linear6_2=torch.nn.Linear(6,2)
        self.linear2_1=torch.nn.Linear(2,1)
        self.active=torch.nn.Sigmoid()
        #这里我们注意我们是让sigmoid单独成为了一个层,和之前的在functional当中调用的那个是不一样的

    def forward(self,x):
        x=self.active(self.linear9_8(x))
        x=self.active(self.linear8_6(x))
        x=self.active(self.linear6_2(x))
        x=self.active(self.linear2_1(x))
        #我们注意这里的是最好反复使用同一个x,不要写x1x2这种,因为那样子的话容易出错。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch是一个广泛使用的深度学习框架,对于多维输入的多分类问题,它提供了强大的工具和灵活性。多维输入通常指的是模型接受的数据具有多个通道或维度,比如图像数据,其通常有宽度、高度和通道数(RGB)。多分类则意味着模型需要预测多个类别中的一个。 在PyTorch中,处理多维输入多分类的方式通常包括以下几个步骤: 1. 数据预处理:将输入数据转换成适合模型的张量格式,例如使用`torch.tensor`或`torchvision.transforms`对图像进行缩放、归一化等操作。 2. 定义网络架构:使用PyTorch的`nn.Module`类创建一个卷积神经网络(CNN)或其他适合处理多通道数据的模型。网络结构可能包含卷积层、池化层、全连接层,最后通常是带softmax激活的输出层,用于多类别分类。 3. 定义损失函数:对于多分类任务,通常使用交叉熵损失(`nn.CrossEntropyLoss`),它考虑了每个类别的概率分布。 4. 训练模型:设置优化器(如`torch.optim`中的SGD、Adam等)并调用`model.train()`进入训练模式。在每个训练迭代中,前向传播、计算损失、反向传播和参数更新。 5. 验证和评估:在验证集上定期评估模型性能,使用`model.eval()`进入验证模式,防止参数更新影响评估结果。 相关问题-- 1. 如何在PyTorch中构建一个多通道的卷积神经网络? 2. 除了交叉熵损失,还有哪些损失函数可以用于多分类问题? 3. 在多分类任务中,如何使用PyTorch的`nn.functional.softmax`进行类别概率计算?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CUHK-SZ-relu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值