如何理解Keras中简单中性网络Python代码的稠密层参数

如何理解Keras中简单中性网络Python代码的稠密层参数,python,keras,Python,Keras,我是Keras的新手,正在努力理解它 model.add(稠密(32,input\u dim=X.shape[1])32表示每个训练实例有32个输入变量,其维度由input\u dim给出。但是在输入X向量中 import numpy as np from keras.models import Sequential from keras.layers.core import Dense, Activation # X has shape (num_rows, num_

我是Keras的新手,正在努力理解它

model.add(稠密(32,input\u dim=X.shape[1])
32表示每个训练实例有32个输入变量,其维度由
input\u dim
给出。但是在输入X向量中

import numpy as np
    from keras.models import Sequential
    from keras.layers.core import Dense, Activation

    # X has shape (num_rows, num_cols), where the training data are stored
    # as row vectors
    X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]], dtype=np.float32)

    # y must have an output vector for each input vector
    y = np.array([[0], [0], [0], [1]], dtype=np.float32)

    # Create the Sequential model
    model = Sequential()

    # 1st Layer - Add an input layer of 32 nodes with the same input shape as
    # the training samples in X
    model.add(Dense(32, input_dim=X.shape[1]))

    # Add a softmax activation layer
    model.add(Activation('softmax'))

    # 2nd Layer - Add a fully connected output layer
    model.add(Dense(1))

    # Add a sigmoid activation layer
    model.add(Activation('sigmoid'))
共有4个培训实例。看起来每个示例只有两个输入变量。那么,这与致密层定义中的“32”是如何对应的呢?这个网络看起来怎么样?

如果您尝试

array([[0., 0.],
       [0., 1.],
       [1., 0.],
       [1., 1.]], dtype=float32)
你将得到最后一个问题的答案

model.summary()

网络输入为2个节点(变量),与密集_1层(32个节点)相连。总共32*2个权重+32个偏差为您提供96个参数。希望这有帮助。

跟随本杰明的答案。以下是一个例子:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_1 (Dense)              (None, 32)                96        
_________________________________________________________________
activation_1 (Activation)    (None, 32)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 33        
_________________________________________________________________
activation_2 (Activation)    (None, 1)                 0         
=================================================================
Total params: 129
Trainable params: 129
Non-trainable params: 0
_________________________________________________________________
要计算每个层的参数数,请执行以下操作:

输入大小=(1,)一个输入

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
Input (Dense)                (None, 16)                32        
_________________________________________________________________
Hidden_1 (Dense)             (None, 16)                272       
_________________________________________________________________
Output (Dense)               (None, 1)                 17        
=================================================================
Total params: 321
Trainable params: 321
Non-trainable params: 0
_________________________________________________________________

因此,在Keras中,“第一”层是第一个隐藏层(32个节点),而不是输入层(2个节点)。通常在谈到第一层时,它指的是输入层。是吗?是的,第一层只是没有参数的输入层,正如您在model.summary()中看到的那样。这也有助于“添加一个由32个节点组成的输入层,其输入形状与” 因此,由于“输入层”的使用,该注释具有误导性。
Input layer number of parameters  = 16 weights * 1(input) + 16 biases = 32
Hidden layer number of parameters = 16 weights * 16(hidden neurons) + 16 biases = 272
Output layer number of parameters = 16 weights * 1(output neuron) + 1 bias = 17