Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Keras序贯模型输入层_Python_Machine Learning_Keras_Neural Network_Deep Learning - Fatal编程技术网

Python Keras序贯模型输入层

Python Keras序贯模型输入层,python,machine-learning,keras,neural-network,deep-learning,Python,Machine Learning,Keras,Neural Network,Deep Learning,在Keras中创建顺序模型时,我知道您在第一层中提供了输入形状。该输入形状是否会生成隐式输入层 例如,下面的模型明确指定了2个密集层,但这实际上是一个包含3个层的模型,其中一个输入层由输入形状暗示,一个隐藏的密集层由32个神经元组成,然后一个输出层由10个可能的输出组成 model=Sequential([ 密集型(32,输入_形=(784,), 激活(“relu”), 密度(10), 激活(“softmax”), ]) 事实上,它实际上是一个隐式输入层,也就是说,你的模型是一个“好的旧”神经网

在Keras中创建顺序模型时,我知道您在第一层中提供了输入形状。该输入形状是否会生成隐式输入层

例如,下面的模型明确指定了2个密集层,但这实际上是一个包含3个层的模型,其中一个输入层由输入形状暗示,一个隐藏的密集层由32个神经元组成,然后一个输出层由10个可能的输出组成

model=Sequential([
密集型(32,输入_形=(784,),
激活(“relu”),
密度(10),
激活(“softmax”),
])
事实上,它实际上是一个隐式输入层,也就是说,你的模型是一个“好的旧”神经网络的例子,有三个层——输入层、隐藏层和输出层。这在Keras Functional API(在文档中检查)中更为明确,在该API中,您的模型将被编写为:

inputs=Input(形状=(784,)#输入层
x=密集(32,激活='relu')(输入)#隐藏层
输出=密集(10,激活='softmax')(x)#输出层
模型=模型(输入、输出)
实际上,这个隐式输入层就是您必须仅在顺序API中的模型的第一(显式)层中包含
input\u shape
参数的原因-在后续层中,输入形状是从前面的层的输出推断出来的(请参见
core.py
的源代码中的)


您还可以在
tf.contrib.keras.layers.Input上找到启发。
这取决于您的视角:-)

根据最近的Keras教程示例重写代码,您可能会使用:

model = Sequential()
model.add(Dense(32, activation='relu', input_dim=784))
model.add(Dense(10, activation='softmax')
…这使得您只有两个Keras层更加明确。这正是你所拥有的(至少在Keras中),因为“输入层”根本不是一个(Keras)层:它只是一个存储张量的地方,所以它也可能是张量本身

每个Keras层都是一个变换,输出一个张量,可能具有不同大小/形状的输入。因此,虽然这里有3个可识别的张量(两个层的输入、输出),但只涉及2个转换,对应于2个Keras层

另一方面,以图形方式,您可以用3层(图形)节点和两组连接节点层的线来表示此网络。从图形上看,这是一个三层网络。但是这个图形符号中的“层”是一堆圆圈,它们放在一页上,什么也不做,而Keras中的层转换张量,为您做实际工作。就个人而言,我会习惯Keras的观点:-)


最后请注意,为了好玩和/或简单起见,我用
input\u dim=784
代替
input\u shape=(784,)
,以避免Python使用的语法混淆新手和创建一维元组:
(,)

我发现函数式API在输入和输出方面更加清晰,并且不会造成太多混乱。OP的代码实际上与Keras版本或教程的最新版本无关;这是一种独特的编码风格,要求将激活分开放置,有些人(不是我)仍然喜欢这样。你所写的确实是(过去也是)编码三层模型的“标准”方式,但可以说并没有使实际的层数比OP的公式更清晰(就像函数API那样)。@desertnaut我认为这个答案的价值,以及你对它的评论,在于表明多个视角是可能的,事实上,这里没有明确的正确答案。可以说,声称这个网络有任何特定数量的层是对它的讽刺,而不是描述它的特征。你的评论突出了这个角色的另一个方面。