Neural network Keras输入说明:输入形状、单位、批次大小、尺寸等

Neural network Keras输入说明:输入形状、单位、批次大小、尺寸等,neural-network,deep-learning,keras,keras-layer,tensor,Neural Network,Deep Learning,Keras,Keras Layer,Tensor,对于任何Keras层(层类),有人能解释一下如何理解输入_形、单位、尺寸等之间的区别吗 例如,文档中说“单位”指定图层的输出形状 在下面的神经网络图像中,隐藏层1有4个单位。这是否直接转换为层对象的单位属性?或者Keras中的单位是否等于隐藏层中每个重量的形状乘以单位数 简言之,如何理解/可视化模型的属性-尤其是层-与下面的图像? 单位: “神经元”或“细胞”的数量,或层内任何物质的数量 它是每个层的属性,是的,它与输出形状相关(我们将在后面看到)。在图片中,除了输入层(在概念上与其他层不同)之

对于任何Keras层(
类),有人能解释一下如何理解
输入_形
单位
尺寸
等之间的区别吗

例如,文档中说“单位”指定图层的输出形状

在下面的神经网络图像中,
隐藏层1
有4个单位。这是否直接转换为
对象的
单位
属性?或者Keras中的
单位
是否等于隐藏层中每个重量的形状乘以单位数

简言之,如何理解/可视化模型的属性-尤其是层-与下面的图像?

单位: “神经元”或“细胞”的数量,或层内任何物质的数量

它是每个层的属性,是的,它与输出形状相关(我们将在后面看到)。在图片中,除了输入层(在概念上与其他层不同)之外,您有:

  • 隐藏层1:4个单元(4个神经元)
  • 隐藏层2:4个单位
  • 最后一层:1个单元
形状 形状是模型配置的结果。形状是元组,表示数组或张量在每个维度中有多少个元素

Ex:a shape
(30,4,10)
表示三维数组或张量,第一维包含30个元素,第二维包含4个元素,第三维包含10个元素,总计30*4*10=1200个元素或数字

输入形状 层之间流动的是张量。张量可以看作是具有形状的矩阵

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

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

每种类型的图层都需要输入一定数量的尺寸:

input_shape = (50,50,3)
    #regardless of how many images I have, each image has this shape        
  • 密集
    层要求输入为
    (批量大小,输入大小)
    • (批量大小,可选,…,可选,输入大小)
  • 二维卷积层需要如下输入:
    • 如果上次使用
      频道
      (批量大小,imageside1,imageside2,频道)
    • 如果先使用
      频道
      (批量大小、频道、imageside1、imageside2)
  • 1D卷积和循环层使用
    (批量大小、序列长度、特征)
现在,输入形状是您必须定义的唯一形状,因为您的模型无法知道它。根据你的训练数据,只有你知道这一点

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

形状和单位之间的关系-输出形状 给定输入形状,所有其他形状都是图层计算的结果

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

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

让我们看看“密集”层会发生什么,这是图形中显示的类型

致密层的输出形状为
(批次大小,单位)
。因此,是的,层的属性单位也定义了输出形状

  • 隐藏层1:4个单元,输出形状:
    (批量大小,4)
  • 隐藏层2:4个单元,输出形状:
    (批量大小,4)
  • 最后一层:1个单元,输出形状:
    (批次大小,1)
砝码 权重将根据输入和输出形状完全自动计算。同样,每种类型的层都以某种方式工作。但权重将是一个矩阵,能够通过一些数学运算将输入形状转换为输出形状

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

在图像中,如果每个箭头上都有一个乘法,那么所有的数字将一起构成权重矩阵

Keras中的形状 前面,我给出了一个30个图像、50x50像素和3个通道的示例,其输入形状为
(30,50,50,3)

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

但是在这个定义中,Keras忽略了第一个维度,即批量大小。您的模型应该能够处理任何批次大小,因此您只能定义其他维度:

input_shape = (50,50,3)
    #regardless of how many images I have, each image has this shape        
或者,当某些型号需要时,您可以通过
batch\u input\u shape=(30,50,50,3)
batch\u shape=(30,50,50,3)
传递包含批量大小的形状。这将您的培训机会限制在这个独特的批量大小上,因此只有在真正需要时才应该使用它

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

因此,即使您使用了
input_shape=(50,50,3)
,当keras向您发送消息或打印模型摘要时,它也会显示
(无,50,50,3)

第一个维度是批量大小,它是
None
,因为它可以根据您提供的培训示例的数量而变化。(如果明确定义了批次大小,则将显示定义的数字,而不是
None<
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)
    model = Sequential()
    model.add(Dense(32, input_dim=784))  #or 3 in the current posted example above
    model.add(Activation('relu'))