如果有10个特征和1个输出类别(使用sigmoid激活函数)进行回归任务:
如果我在第一个全连接隐藏层中只使用5个神经元:第一个误差是否仅基于训练特征集的一半来计算?难道不应该将特征数量与第一隐藏层的神经元数量匹配,以便模型能够一次看到所有特征吗?否则它就无法获得全貌?第一次前向传播迭代将使用10个特征中的5个,得到误差值(并在反向传播时进行训练,假设使用批量梯度下降)。然后,第二次前向传播迭代将看到剩余的5个特征,并使用更新后的权重,希望能得到更小的误差。但它每次只能看到一半的特征!
相反,如果我有一个包含64个神经元的二维卷积层。我的训练数据形状为:(100, 28,28,1)(灰度猫狗图片),64个神经元是否会看到不同的28×28向量?不是的,因为它一次只能通过前向传播发送一个样本?那么,只有一张图片(猫或狗)应该跨越64个神经元?为什么要这样做呢,因为该层中的每个神经元具有相同的滤波器、步长、填充和激活函数?当你定义一个Conv2D层时…每个神经元的参数都是相同的。那么,每个神经元只接收训练样本的一部分吗?为什么要有64个神经元呢?例如,只需一个神经元,使用一个滤波器,然后传递到具有不同参数的第二个隐藏层!
请解释我逻辑中的错误。非常感谢。
编辑:我刚刚意识到对于Conv2D,你需要将训练数据集展平为一个一维向量,所以一张28×28的图片意味着输入conv2d层需要724个神经元。但我对全连接神经网络(上面的第一段)仍然感到困惑
回答:
你的“第一”层是什么?通常情况下,第一层是输入层,它不包含任何权重。输入层的形状必须与你的特征数据的形状匹配。因此,当你训练一个具有10个特征的模型,但输入层的形状为(None,5)
(其中None代表批量大小)时,TensorFlow会抛出异常,因为它需要所有输入的正确形状的数据。
所以你所说的情况不会发生。如果你只有5个特征,接下来的5个特征不会在下一轮迭代中被纳入网络中,而是,下一批样本会被发送到模型中。(假设没有抛出异常)所以下一批样本中也仅会使用前5个特征。
你可以做的是,使用一个input_layer
作为第一层,其形状与你的特征相匹配。然后作为第二层,你可以使用任何你喜欢的形状,1、10、100个密集神经元,这取决于你(当然,也取决于什么效果好)。输出的形状再次必须匹配(这次)你的标签数据的形状。
希望这能使你更清楚