首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解神经网络的输入/输出维数

了解神经网络的输入/输出维数
EN

Stack Overflow用户
提问于 2017-05-08 15:36:39
回答 1查看 15.2K关注 0票数 12

让我们以一个带一个隐层的全连通神经网络为例。输入层由5单元组成,每个单元与所有隐神经元相连。共有、10条隐神经元、

像Theano和Tensorflow这样的库允许多维输入/输出形状。例如,我们可以使用5个单词的句子,其中每个单词用一个300 d向量表示。

这种输入是如何映射到所描述的神经网络上的?我不明白(0,5,300)的外型是什么意思(只是一个例子)。在我的想象中,我们只是有一群神经元,其中一个数字流动。

当输出形状为(0,5,300)时,对应的网络中有多少神经元?我如何将这些词与我的神经网络连接起来?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-08 16:40:51

是的,我们只是有一群神经元通过单个数字流动。

但是:如果您必须将网络5数字作为输入,那么在一个长度为5的数组中给出这些数字是很方便的。

如果你给你的网络提供了3万个训练的例子,那么创建一个包含3万个元素的数组是很方便的,每个元素都是一个由5个数字组成的数组。

最后,这个包含3万个5个数字示例的输入是一个形状为(30万,5)的数组。

然后每一层都有自己的输出形状。每一层的输出必然与其自身数量的神经元有关。每个神经元都会抛出一个数字(有时还会抛出一个数组,这取决于您使用的是哪一层类型)。但是10个神经元在一起会抛出10个数字,然后将其封装成一个阵列形状(30万,10 )。

这些形状中的“无”一词与批次大小有关(用于训练或预测的示例数量)。如果不定义该数字,则在传递批处理时会自动理解该数字。

看看你的网络:

当你输入5个单位时,你的输入形状为(0,5)。但是您实际上只对模型说(5,),因为没有部分是批处理大小,只有在培训时才会出现。

这个数字意味着:你必须给你的网络一个包含许多样本的数组,每个样本是一个由5个数字组成的数组。

然后,由10个神经元组成的隐藏层将计算并给出10个数字作为输出,数组形状为(0,10)。

什么是A(无,5,300)?

如果你说每个单词都是一个300 d的向量,有几种不同的方法来翻译其中的一个单词。

一个常见的方法是:你的字典里有多少个单词?如果你有一本有300个单词的字典,那么你就可以把每个单词变成一个包含300个元素的向量,除了其中的一个外,所有元素都是零。

  • 说“你好”是你字典里的第一个词,它的向量是1,0,0,0,…,0
  • 说“我的”是你字典里的第二个词,它的向量是0,1,0,0,…,0
  • "fly“这个词是字典中最后一个词,它的向量是0,0,0,0,…,1

当您必须将"hello“一词传递给您的网络时,您将传递1,0,0,0 .,0.,0。

一个有五个词的句子将是一个包含五个数组的数组。这意味着,一个五个词的句子将被塑造为(5,300)。如果你以3万句为例:(30万,5300)。在模型中,“无”显示为批处理大小(无,5,300)。

还有其他选项,比如创建一个单词Embedding,它将把单词转换成意义向量。只有网络才能理解的意义。(为此在Keras上有嵌入层)。

还有一些东西叫做CBOW (连续的单词袋)。

你必须首先知道你想要做什么,这样你就可以用一些符合网络要求的数组来翻译你的单词。

输出(无,5,300)有多少个神经元?

这只会告诉你最后一层。其他层的输出都是由以下几层计算和封装在一起的,从而改变了输出。每一层都有自己的输出。(当您有一个模型时,您可以执行一个model.summary()并查看每个层的输出。)

尽管如此,如果不知道您使用的是哪种类型的层,就不可能回答这个问题。

有些层,如Dense,会丢弃像(BatchSize,NumberOfNeurons)这样的东西。

但是,像Convolution2D这样的层会抛出像(BatchSize, numberOfChannels, pixelsInX, pixelsInY)这样的东西。例如,常规图像有三个通道:红色、蓝色和绿色。传递常规图像的数组类似于(3,sizeX,sizeY)。

这完全取决于您使用的是哪一层类型。

使用单词嵌入

对于使用嵌入,阅读keras文件是很有趣的。

为此,你必须在索引中转换你的单词。

不是说字典里的每个词都是向量,而是说它是一个数字。

  • “你好”这个词是1
  • “我的”是2
  • 单词"fly“是theSizeOfYourDictionary

如果您希望每个句子都有100个单词,那么您的输入形状将是(无,100)。其中,每个100个数字数组包含表示字典中单词的数字。

模型中的第一个层将是一个Embedding层。

代码语言:javascript
复制
model = Sequential()
model.add(Embedding(theSizeOfYourDictionary, 300, input_length=100)

这样,你就可以为每个单词创建大小为300的向量,传递100个单词的序列。(我不习惯嵌入,但它似乎是一个很大的数字,它可能更少)。

这个嵌入的输出将是(None, 100, 300)

然后你在它之后连接其他层。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43851735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档