让我们以一个带一个隐层的全连通神经网络为例。输入层由5单元组成,每个单元与所有隐神经元相连。共有、10条隐神经元、。
像Theano和Tensorflow这样的库允许多维输入/输出形状。例如,我们可以使用5个单词的句子,其中每个单词用一个300 d向量表示。
这种输入是如何映射到所描述的神经网络上的?我不明白(0,5,300)的外型是什么意思(只是一个例子)。在我的想象中,我们只是有一群神经元,其中一个数字流动。
当输出形状为(0,5,300)时,对应的网络中有多少神经元?我如何将这些词与我的神经网络连接起来?
发布于 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个元素的向量,除了其中的一个外,所有元素都是零。
当您必须将"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文件是很有趣的。
为此,你必须在索引中转换你的单词。
不是说字典里的每个词都是向量,而是说它是一个数字。
theSizeOfYourDictionary如果您希望每个句子都有100个单词,那么您的输入形状将是(无,100)。其中,每个100个数字数组包含表示字典中单词的数字。
模型中的第一个层将是一个Embedding层。
model = Sequential()
model.add(Embedding(theSizeOfYourDictionary, 300, input_length=100)这样,你就可以为每个单词创建大小为300的向量,传递100个单词的序列。(我不习惯嵌入,但它似乎是一个很大的数字,它可能更少)。
这个嵌入的输出将是(None, 100, 300)。
然后你在它之后连接其他层。
https://stackoverflow.com/questions/43851735
复制相似问题