Keras 密集层输出形状

Nav*_*eep 7 python machine-learning deep-learning keras keras-layer

我无法理解获取第一个隐藏层的输出形状背后的逻辑。我随意举了一些例子如下:

示例1:

model.add(Dense(units=4,activation='linear',input_shape=(784,)))  
model.add(Dense(units=10,activation='softmax'))
model.summary()

Model: "sequential_4"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_7 (Dense)              (None, 4)                 3140      
_________________________________________________________________
dense_8 (Dense)              (None, 10)                50        
=================================================================
Total params: 3,190
Trainable params: 3,190
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)

示例2:

model.add(Dense(units=4,activation='linear',input_shape=(784,1)))   
model.add(Dense(units=10,activation='softmax'))
model.summary()
Model: "sequential_6"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_11 (Dense)             (None, 784, 4)            8         
_________________________________________________________________
dense_12 (Dense)             (None, 784, 10)           50        
=================================================================
Total params: 58
Trainable params: 58
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)

示例3:

model.add(Dense(units=4,activation='linear',input_shape=(32,28)))    
model.add(Dense(units=10,activation='softmax'))
model.summary()
Model: "sequential_8"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_15 (Dense)             (None, 32, 4)             116       
_________________________________________________________________
dense_16 (Dense)             (None, 32, 10)            50        
=================================================================
Total params: 166
Trainable params: 166
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)

示例4:

model.add(Dense(units=4,activation='linear',input_shape=(32,28,1)))    
model.add(Dense(units=10,activation='softmax'))
model.summary()
Model: "sequential_9"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_17 (Dense)             (None, 32, 28, 4)         8         
_________________________________________________________________
dense_18 (Dense)             (None, 32, 28, 10)        50        
=================================================================
Total params: 58
Trainable params: 58
Non-trainable params: 0
Run Code Online (Sandbox Code Playgroud)

请帮助我理解逻辑。

input_shape=(784,)另外,我认为和的排名input_shape=(784,1)是相同的,那么为什么他们Output Shape不同呢?

Cha*_*iri 6

根据 Keras 的官方文档,对于密集层,当您将输入作为input_shape=(input_units,)模态时,将其作为形状的输入数组(*, input_units)并输出形状的数组(*, output_units) [在您的情况下input_shape=(784,)被视为input shape=(*, 784)并且输出是output_shape=(*,4)]

一般来说,对于输入尺寸(batch_size, ..., input_dim),模态给出尺寸 的输出(batch_size, ..., units)

因此,当您将输入作为input_shape=(784,)模态时,将其作为 shape 的输入数组(*, 784),其中*是批量大小,784作为 input_dim,将输出形状作为(*, 4)

当输入为 时(784,1),模态将其视为(*, 784, 1)批量*大小,784is...1is input_dim =>(batch_size, ..., input_dim)并输出为(*, 784, 4)=> (batch_size, ..., units)

同样的情况也适用input_shape=(32,28)=>(*,32,28),给出输出(*,32,4)和输入,其中input_shape=(32,28,1)=>(*,32,28,1)*是batch_size,32,28...1是input_dim =>(batch_size, ..., input_dim)

关于None是什么意思,请查看KERAS的model.summary中的“None”是什么意思?