gpt4 book ai didi

tensorflow - 理解神经网络的输入/输出维度

转载 作者:行者123 更新时间:2023-12-04 14:23:48 25 4
gpt4 key购买 nike

让我们以一个带有一个隐藏层的全连接神经网络为例。输入层由组成5 台 每个都连接到所有隐藏的神经元。总共有 10 个隐藏神经元 .

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

这样的输入如何映射到所描述的神经网络上?我不明白 (None, 5, 300) (只是一个例子)的输出形状是什么意思。在我的想象中,我们只有一堆神经元,单个数字从中流过。

当我的输出形状为 (None, 5, 300) 时,相应网络中有多少神经元?如何将单词连接到我的神经网络?

最佳答案

是的,我们只有一堆神经元,其中单个数字流过。
但是:如果你必须给你的网络 5 个数字作为输入,那么将这些数字放在一个长度为 5 的数组中是很方便的。
如果您要为网络训练提供 30,000 个示例,那么创建一个包含 30,000 个元素的数组会很方便,每个元素都是一个包含 5 个数字的数组。
最后,这个包含 5 个数字的 3 万个示例的输入是一个形状为 (30000,5) 的数组。
然后每一层都有自己的输出形状。每一层的输出肯定与它自己的神经元数量有关。每个神经元都会抛出一个数字(或者有时是一个数组,具体取决于您使用的层类型)。但是 10 个神经元加在一起会抛出 10 个数字,然后将这些数字打包成一个数组(30000,10)。
这些形状中的“无”一词与批量大小(您为训练或预测提供的示例数量)有关。你没有定义那个数字,当你传递一个批次时它会自动理解。
查看您的网络:
当输入 5 个单位时,输入形状为 (None,5)。但是你实际上只对你的模型说 (5,),因为 None 部分是批量大小,它只会在训练时出现。
这个数字意味着:你必须给你的网络一个包含多个样本的数组,每个样本是一个包含 5 个数字的数组。
然后,具有 10 个神经元的隐藏层将计算并为您提供 10 个数字作为输出,在一个形状为 (None, 10) 的数组中。
什么是 (None,5,300)?
如果你说每个单词都是一个 300d 的向量,那么有几种不同的方法来翻译一个单词。
一种常见的方式是:你的字典里有多少字?
如果您有一本包含 300 个单词的字典,那么您可以将每个单词设为一个包含 300 个元素的向量,除了其中一个元素外,所有元素都为零。

  • 假设单词“hello”是字典中的第一个单词,它的向量将为 [1,0,0,0, ...., 0]
  • 假设单词“my”是字典中的第二个单词,它的向量将是 [0,1,0,0, ...., 0]
  • 而“fly”这个词是字典中的最后一个,它的向量是[0,0,0,0, ...., 1]

  • 你对整个字典都这样做,每当你必须将“hello”这个词传递给你的网络时,你将传递 [1,0,0,0 ..., 0] 。
    一个包含五个单词的句子将是一个包含五个这样的数组的数组。这意味着,一个包含五个单词的句子将被塑造为 (5, 300)。如果以3万个句子为例:(30000,5,300)。在模型中,“None”显示为批量大小 (None, 5, 300)
    还有其他选项,例如创建单词 Embedding ,这将把单词翻译成意义向量。只有网络才能理解的含义。 (Keras 上有 Embedding 层)。
    还有一些叫做 CBOW(连续词袋)的东西。
    你必须先知道你想做什么,这样你才能将你的单词翻译成一些符合网络要求的数组。
    对于 (None,5,300) 的输出,我有多少个神经元?
    这只会告诉你最后一层。其他层的输出都被下面的层计算并打包在一起,这改变了输出。每一层都有自己的输出。 (当你有一个模型时,你可以做一个 model.summary() 并查看每一层的输出。)
    尽管如此,如果不知道您使用的是哪种类型的图层,就不可能回答这个问题。
    Dense等层扔掉诸如 (BatchSize,NumberOfNeurons) 之类的东西
    但是还有 Convolution2D等层扔掉诸如 (BatchSize, numberOfChannels, pixelsInX, pixelsInY) 之类的东西.例如,常规图像具有三个 channel :红色、蓝色和绿色。用于传递常规图像的数组类似于 (3,sizeX,sizeY)。
    这完全取决于您使用的图层类型。
    使用词嵌入
    对于使用嵌入,阅读 keras documentation 很有趣。关于它。
    为此,您必须在索引中转换您的单词。
    与其说字典中的每个单词都是一个向量,不如说它是一个数字。
  • 单词“你好”是 1
  • 单词“我的”是 2
  • “飞”字是theSizeOfYourDictionary

  • 如果您希望每个句子有 100 个单词,那么您的输入形状将为 (None, 100)。每个由 100 个数字组成的数组包含代表字典中单词的数字。
    您模型中的第一层将是 Embedding层。
    model = Sequential()
    model.add(Embedding(theSizeOfYourDictionary, 300, input_length=100)
    这样,您将为每个单词创建大小为 300 的向量,传递 100 个单词的序列。 (我不习惯嵌入,但似乎 300 是一个很大的数字,可能会更少)。
    此嵌入的输出将是 (None, 100, 300) .
    然后在它之后连接其他层。

    关于tensorflow - 理解神经网络的输入/输出维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43851735/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com