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不同呢?
根据 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”是什么意思?
| 归档时间: |
|
| 查看次数: |
10980 次 |
| 最近记录: |