gpt4 book ai didi

neural-network - Keras 输入解释 : input_shape, 个单位、batch_size、dim 等

转载 作者:行者123 更新时间:2023-12-03 04:10:45 24 4
gpt4 key购买 nike

对于任何 Keras 层(Layer 类),有人可以解释如何理解 input_shape 之间的区别吗? , units , dim , 等等。?

例如,文档说 units指定层的输出形状。

在下面的神经网络图像中 hidden layer1有4个单位。这是否直接转化为 units Layer 的属性目的?还是units在 Keras 中等于隐藏层中每个权重的形状乘以单元数?

简而言之,如何理解/可视化模型的属性 - 特别是层 - 下图?
enter image description here

最佳答案

单位:

The amount of "neurons", or "cells", or whatever the layer has inside it.



它是每一层的一个属性,是的,它与输出形状有关(我们稍后会看到)。在你的图片中,除了输入层,它在概念上与其他层不同,你有:
  • 隐藏层 1:4 个单元(4 个神经元)
  • 隐藏层2:4个单元
  • 最后一层:1单元

  • 形状

    形状是模型配置的结果。形状是表示数组或张量在每个维度中有多少元素的元组。

    例如:一个形状 (30,4,10)表示具有 3 个维度的数组或张量,其中第一维包含 30 个元素,第二维包含 4 个元素,第三维包含 10 个元素,总共 30*4*10 = 1200 个元素或数字。

    输入形状

    在层之间流动的是张量。张量可以被视为具有形状的矩阵。

    在 Keras 中,输入层本身不是层,而是张量。它是您发送到第一个隐藏层的起始张量。该张量必须与您的训练数据具有相同的形状。

    示例:如果您有 30 张 50x50 像素的 RGB 图像(3 个 channel ),则输入数据的形状为 (30,50,50,3) .然后你的输入层张量,必须有这个形状(请参阅“keras 中的形状”部分中的详细信息)。

    每种类型的层都需要具有一定维数的输入:
  • Dense层需要输入为 (batch_size, input_size)
  • (batch_size, optional,...,optional, input_size)
  • 2D 卷积层需要输入为:
  • 如果使用 channels_last :(batch_size, imageside1, imageside2, channels)
  • 如果使用 channels_first :(batch_size, channels, imageside1, imageside2)
  • 一维卷积和循环层使用 (batch_size, sequence_length, features)
  • Details on how to prepare data for recurrent layers

  • 现在,输入形状是您必须定义的唯一形状,因为您的模型无法识别它。根据您的训练数据,只有您自己知道。

    所有其他形状都是根据每一层的单位和特殊性自动计算的。

    形状和单位之间的关系 - 输出形状

    给定输入形状,所有其他形状都是层计算的结果。

    每层的“单位”将定义输出形状(由该层产生的张量的形状,它将成为下一层的输入)。

    每种类型的层都以特定的方式工作。密集层具有基于“单元”的输出形状,卷积层具有基于“过滤器”的输出形状。但它始终基于某些图层属性。 (有关每层输出的内容,请参阅文档)

    让我们展示一下“密集”层会发生什么,这是图中显示的类型。

    密集层的输出形状为 (batch_size,units) .所以,是的,单位,层的属性,也定义了输出形状。
  • 隐藏层 1:4 个单元,输出形状:(batch_size,4) .
  • 隐藏层2:4个单元,输出形状:(batch_size,4) .
  • 最后一层:1个单元,输出形状:(batch_size,1) .

  • 重量

    权重将根据输入和输出形状完全自动计算。同样,每种类型的层都以某种方式工作。但是权重将是一个矩阵,能够通过一些数学运算将输入形状转换为输出形状。

    在密集层中,权重乘以所有输入。它是一个矩阵,每个输入一列,每个单元一行,但这对于基本工作通常并不重要。

    在图像中,如果每个箭头上都有一个乘法数字,则所有数字一起将形成权重矩阵。

    Keras 中的形状

    之前,我举了一个例子,有 30 张图像,50x50 像素和 3 个 channel ,输入形状为 (30,50,50,3) .

    由于输入形状是您唯一需要定义的形状,因此 Keras 将在第一层要求它。

    但在这个定义中,Keras 忽略了第一个维度,即批量大小。您的模型应该能够处理任何批量大小,因此您只需定义其他维度:
    input_shape = (50,50,3)
    #regardless of how many images I have, each image has this shape

    或者,当某些模型需要时,您可以通过 batch_input_shape=(30,50,50,3) 传递包含批量大小的形状。或 batch_shape=(30,50,50,3) .这将您的训练可能性限制在这种独特的批量大小上,因此应该仅在真正需要时才使用它。

    无论您选择哪种方式,模型中的张量都将具有批次维度。

    所以,即使你使用了 input_shape=(50,50,3) , 当 keras 向您发送消息时,或者当您打印模型摘要时,它会显示 (None,50,50,3) .

    第一个维度是批量大小,它是 None因为它可以根据您为培训提供的示例数量而有所不同。 (如果您明确定义了批量大小,那么您定义的数字将出现而不是 None )

    此外,在高级工作中,当您实际直接对张量进行操作时(例如,在 Lambda 层内或在损失函数中),批次大小维度将在那里。
  • 因此,在定义输入形状时,您可以忽略批量大小:input_shape=(50,50,3)
  • 直接对张量进行运算时,形状又会是(30,50,50,3)
  • 当 keras 向您发送消息时,形状将为 (None,50,50,3)(30,50,50,3) ,取决于它向您发送的消息类型。

  • 暗淡

    最后,什么是 dim ?

    如果你的输入形状只有一个维度,你不需要把它作为一个元组给出,你给出 input_dim作为标量。

    因此,在您的模型中,您的输入层有 3 个元素,您可以使用以下两个元素中的任何一个:
  • input_shape=(3,) -- 只有一维时,逗号是必需的
  • input_dim = 3

  • 但是当直接处理张量时,往往 dim将指张量有多少维。例如,形状为 (25,10909) 的张量有 2 个维度。

    在 Keras 中定义图像

    Keras 有两种方法, Sequential模型或功能 API Model .我不喜欢使用顺序模型,以后无论如何你都不得不忘记它,因为你会想要带有分支的模型。

    PS:这里我忽略了其他方面,比如激活函数。

    使用顺序模型 :
    from keras.models import Sequential  
    from keras.layers import *

    model = Sequential()

    #start from the first hidden layer, since the input is not actually a layer
    #but inform the shape of the input, with 3 elements.
    model.add(Dense(units=4,input_shape=(3,))) #hidden layer 1 with input

    #further layers:
    model.add(Dense(units=4)) #hidden layer 2
    model.add(Dense(units=1)) #output layer

    带有函数式 API 模型 :
    from keras.models import Model   
    from keras.layers import *

    #Start defining the input tensor:
    inpTensor = Input((3,))

    #create the layers and pass them the input tensor to get the output tensor:
    hidden1Out = Dense(units=4)(inpTensor)
    hidden2Out = Dense(units=4)(hidden1Out)
    finalOut = Dense(units=1)(hidden2Out)

    #define the model's start and end points
    model = Model(inpTensor,finalOut)

    张量的形状

    请记住,在定义层时忽略批量大小:
  • 输入张量:(None,3)
  • hidden1Out: (None,4)
  • hidden2Out: (None,4)
  • 最终输出:(None,1)
  • 关于neural-network - Keras 输入解释 : input_shape, 个单位、batch_size、dim 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44747343/

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