博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pytorch处理多维输入的问题
阅读量:3938 次
发布时间:2019-05-23

本文共 2284 字,大约阅读时间需要 7 分钟。

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这种,因为那样子的话容易出错。

转载地址:http://ukywi.baihongyu.com/

你可能感兴趣的文章
路由的理解和使用
查看>>
Axios插件,Vue-resource插件的使用
查看>>
ES6(全称ECMAScript 6)标准de
查看>>
vue中特殊符号的理解如$
查看>>
部署到aliyun服务器的jar包应用程序自动运行命令
查看>>
maven命令
查看>>
maven的依赖传递
查看>>
Python简单循环代码
查看>>
python简介
查看>>
python变量及字符编码
查看>>
变量拼接的四种方法
查看>>
docker centos7 安装ssh
查看>>
github和gitlab比较
查看>>
sersync实现主机实时双向同步
查看>>
Centos7安装apache2.4.6,Apache调优及设置虚拟机
查看>>
系统调优的4大子系统:
查看>>
nginx与Apache、php的版本信息隐藏
查看>>
iptables学习
查看>>
fsck命令使用详解
查看>>
kvm快速安装部署
查看>>