[AI开发]零代码公式让你明白神经网络的输入输出

这篇文章的标题比较奇怪,网上可能不多相似专门介绍神经网络的输入输出相关文章。在我实际工做和学习过程当中,发现颇有必要对神经网络的输入和输出作一个比较全面地介绍。跟以前博客同样,本篇文章不会出现相关代码或者公式之类的,仍是但愿用更直观的图文来讲明问题,读者不太可能经过阅读文章来获取代码或者解决方案从而直接应用到实际项目中。因为我主要作CV相关,对卷积神经网络了解比较多,本篇文章的神经网络指的是卷积神经网络CNN。网络

对于监督学习来说(本篇文章只针对监督学习),解决的主要问题就是X->Y的映射问题,也就是说对于输入X,咱们的模型须要预测它的输出Y。咱们暂且称这里的X为输入,这里的Y为输出,X和Y均可以是高维矩阵(并非传统概念中的连续数值)。框架

不论是传统的机器学习仍是基于神经网络的深度学习,都符合上面这一规律,这就是为何线性代数在机器学习中很是重要的缘由。输入输出的格式肯定后,不一样结构的神经网络输入输出个数(分支)能够不尽相同,概括起来一共包含四种。机器学习

 

单输入单输出函数

这种输入输出组合比较常见,通常介绍神经网络有关的文章基本都举这种结构做为例子。该结构的网络只包含一个输入分支和一个输出分支,好比咱们比较熟悉的识别猫狗、预测房价的例子都属于该类。咱们将一张RGB图片做为输入传给卷积神经网络,神经网络输出是猫和狗的几率。咱们将某个房子的属性(面积、位置、朝向、厕所个数等)做为输入传给一个全链接神经网络,神经网络输出该房子的价格。咱们能够看到这种单输入单输出的神经网络解决的问题比较单一,一个输出分支便可表示预测结果,同时神经网络预测所须要的依据(输入)也比较单一,一个输入分支便可接收所有输入。学习

如上图所示,上半部分是经典的猫狗识别问题(分类问题),包含一个输入分支,接收一张RGB三通道图片,包含一个输出分支,输出猫狗几率。下半部分是经典的房价预测问题(回归问题),包含一个输入分支,接收房子的属性特征,包含一个输出分支,输出房子的预测房价。优化

若是再深刻一点,假设猫狗设别神经网络的输入图片尺寸为224*224,输出采用Softmax激活函数,包含两个节点,每一个节点分别表示猫狗几率,加起来和为1(咱们也可使用Sigmoid激活函数来处理二分类问题,那么只有一个节点)。假设房价预测神经网络的输入包含面积(数值)、朝向(东南西北离散值)、楼层(数值)、位置(限定在武汉市6个区,离散值)以及房间数量(限定在1至4之间,离散值),输出采用Liner激活函数,包含一个节点,该节点表示房子的房价。那么咱们再来看一下每一个输入输出分支的数据格式:spa

如上图所示,咱们能够看到,虽然输入输出可能包含多个数值,可是这些数值仍然能够组合成一个高维矩阵(向量属于矩阵的一种),被一个输入或输出分支处理,再次证实,线性代数在机器学习中的重要性。尤为在深度学习中,全部的数据都是以矩阵为单位进行传递的,深度学习框架TensorFlow的命名就比较形象:张量流动(张量即矩阵),描述数据在神经网络中的传递过程。设计

 

单输入多输出blog

不少时候,咱们解决的是一个复杂的问题。好比上面举的猫狗识别的例子中,仅仅识别图中是什么动物,假如如今咱们不只要识别图中是猫仍是狗,咱们还须要识别猫和狗的毛色,原来的那种网络结构可能不太合适了,由于它只有一个输出分支,该分支只能输出它是猫仍是狗。这种状况该如何设计神经网络呢?答案很简单,就是再给神经网络加一个输出分支,该分支用来预测猫狗的毛色:图片

如上图,咱们新增了一个输出分支,该分支预测动物的毛色。如今对于任意一个输入图片,咱们不只可以识别图中是猫仍是狗,咱们还能识别它的毛色,神经网络功能强大了许多。咱们再深刻一点,假设动物毛色限定在黑、白、灰三种之间,那么该网络的输入输出分支的数据格式为:

如上图,如今有两个输出分支,第一个分支为二分类,输出一个2维向量,它表明预测的动物种类,第二个分支为三分类,输出一个3维向量,它表明动物的毛色。神经网络的输出分支变了,那么训练它须要的数据格式也会改变,以前只须要指定数据的动物分类,如今还须要指定动物的毛色,因此对于任意训练数据trainX,咱们须要为它指定标签TrainY1和TrainY2,分别表示TrainX对应的动物分类和毛色分类。

咱们能够看到新增的一个输出分支仍然是在作分类任务,咱们是否能够将分类和回归合并到一块儿呢?固然是能够的。咱们再增长一个输出分支,来预测动物的年龄:

如上图,咱们再次新增了一个输出分支,该分支作回归任务,预测动物的年龄,它的输出是一个1维向量,表明动物的年龄。一样网络输出分支变了,训练它的数据格式也须要跟着改变,对于每一个训练数据TrainX,咱们须要指定对应的TrainY一、TrainY2以及TrainY3,分别表明动物的分类、毛色以及对应的实际年龄。

注意这里仅仅是为了说明一个神经网络能够包含多个输出分支,因此并无考虑应用场景的合理性,毕竟经过一张图片来判断图片上猫的年龄确实有点难,猫脸不像人脸,特征不够,恐怕很难告诉你它有几岁了。

 

多输入单输出

前面讨论的都是单输入模式,一个输入分支就能够接收神经网络所需的所有数据。在有些场合一个分支可能处理不了多个不一样数据格式的输入,好比神经网络同时包含图片、数值、离散值等做为输入。这里仍是举猫为例:经过提供的猫的图片以及猫的年龄以及性别,来预测这只猫的售价。那么这时候神经网络就须要有两个输入分支了,分别接收猫图片和猫龄以及性别:

如上图所示,神经网络包含两个输入分支,第一个分支接收RGB图片做为输入,第二个分支接收猫龄和性别(数值和离散值)做为输入,最后神经网络输出该只猫的售价。注意这里:因为CNN通常用来处理图片等复杂数据格式,所以图中的两个输入分支分别使用了不一样的处理方式,可是最后经过merge等操做将两个Branch的中间特征值合并起来再进一步进行处理,最后得出预测值。这里最后的输出结果受前面两个分支的共同影响。

咱们此次假设输入猫图像的大小为416*416,仍然是RGB彩图,那么此次的每一个分支数据格式为:

如上图,两个输入分支分别有本身的数据格式要求。第一个分支接收一个416*416*3的矩阵,第二个分支接收一个3维向量,最后输出猫的预测售价。神经网络输入分支改变以后,对应训练的数据格式也须要调整,根据前面的内容可知,此次训练的输入包含TrainX1和TrainX2,分别表明猫图片和猫龄及性别,输出为TrainY,即该只猫的实际售价。虽然神经网络中包含两个Branch,可是通过训练后,偏差反向传播,两个Branch中的权重都可以获得调整优化。

 

多输入多输出 

这个就很少说了,将前面介绍的组合起来就是多输入多输出。惟一须要注意的就是,输入输出分支结构改变后,对应训练的数据格式也须要作出改变,好比TrainX一、TrainX2 对应 TrainY1和TrainY2。

常见深度学习框架好比tensorflow、caffe、keras等等均可以很方便的实现以上四种神经网络深刻输出结构。 家里蹲2个月,下周终于复工了。若是你对本篇文章有什么问题,欢迎留言。

相关文章
相关标签/搜索