Keras model.summary()模型结构计算详解

通过model.summary()输出模型结构信息

全连接神经网络创建模型代码

#初始化模型
model = tf.keras.Sequential()
model.add(Flatten(input_shape=(32,32,3)))   #将二维扁平化为一维
model.add(Dropout(0.1))
model.add(Dense(2048,activation='relu')) 
model.add(Dropout(0.1))
model.add(Dense(1024,activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(512,activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(256,activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(10,activation='softmax'))

全连接神经网络的模型结构计算详解

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
flatten (Flatten)            (None, 3072)              0         
_________________________________________________________________
dropout (Dropout)            (None, 3072)              0         
_________________________________________________________________
dense (Dense)                (None, 2048)              6293504   
_________________________________________________________________
dropout_1 (Dropout)          (None, 2048)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 1024)              2098176   
_________________________________________________________________
dropout_2 (Dropout)          (None, 1024)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 512)               524800    
_________________________________________________________________
dropout_3 (Dropout)          (None, 512)               0         
_________________________________________________________________
dense_3 (Dense)              (None, 256)               131328    
_________________________________________________________________
dropout_4 (Dropout)          (None, 256)               0         
_________________________________________________________________
dense_4 (Dense)              (None, 10)                2570      
=================================================================
Total params: 9,050,378
Trainable params: 9,050,378
Non-trainable params: 0

全连接层神经网络的Param,说明的是每层神经元权重的个数,所以它的计算如下:

Param = (输入数据维度+1)* 神经元个数
之所以要加1,是考虑到每个神经元都有一个Bias。

  • 输入的图片是(32,32,3)需要进行Flatten操作即 Output Shape = 32*32*3=3072
  • 第一个Dense层,因为Flatten后有3072个神经元。所以,Param=(3072+1)*2048= 6293504
  • 第二个Dense层,有1024个神经元。所以,Param=(2048+1)*1024=2098176.
  • 第三个Dense层,有512个神经元。所以,Param=(1024+1)*512=524800.
  • 第四个Dense层,有256个神经元。所以,Param=(512+1)*256=131328.
  • 第五个Dense层,有10个神经元。所以,Param=(256+1)*10=2570.

卷积神经网络创建模型代码

#初始化模型
model = Sequential()

#1st
model.add(Convolution2D(
	input_shape=(32,32,3),  #输入图片的维度
    filters=32,             #32个卷积核 (28,28,1) ---> (28,28,32)
    kernel_size=(5,5),      #卷积核设置(5,5)
    padding='same',         #步长
))
model.add(Activation('relu'))
model.add(MaxPooling2D(
    pool_size=(2,2),    #设置2*2的核	(28,28,32) ---> (14,14,32)
    strides=(2,2),      #跳过2*2执行
    padding='same',     #步长
))
#2nd
model.add(Convolution2D(
    filters=64,             #64个卷积核 (28,28,32) ---> (28,28,64)
    kernel_size=(5,5),      #卷积核设置(5,5)
    padding='same',         #步长
    # input_shape=(32,32,3)   #输入图片的维度
))
model.add(Activation('relu'))
model.add(MaxPooling2D(
    pool_size=(2,2),    #设置2*2的核 (14,14,32) ---> (7,7,64)
    strides=(2,2),      #跳过2*2执行
    padding='same',     #步长
))
#1st Dense
model.add(Flatten())
model.add(Dense(64))
model.add(Activation('relu'))
#2nd Dense
model.add(Dense(10)) 
model.add(Activation('softmax'))

卷积神经网络的模型结构计算详解

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 32, 32, 32)        2432      
_________________________________________________________________
activation (Activation)      (None, 32, 32, 32)        0         
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 16, 16, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 16, 16, 64)        51264     
_________________________________________________________________
activation_1 (Activation)    (None, 16, 16, 64)        0         
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 8, 8, 64)          0         
_________________________________________________________________
flatten (Flatten)            (None, 4096)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                262208    
_________________________________________________________________
activation_2 (Activation)    (None, 64)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
_________________________________________________________________
activation_3 (Activation)    (None, 10)                0         
=================================================================
Total params: 316,554
Trainable params: 316,554
Non-trainable params: 0

Param的计算方法如下:

(卷积核长度卷积核宽度通道数+1)* 卷积核个数

  • 第一个CONV层,Convolution2D(32, kernel_size=(5, 5),
    input_shape=(32,32,3)),
    所以计算得Param=(5*5*3+1)*32 = 2432.
  • 第二个CONV层,Convolution2D(64, kernel_size=(5, 5),activation=‘relu’),经过第一个层32个卷积核的作用,第二层输入数据通道数为32,Param=(5*5*32+1)*64 = 51264.
  • Flatten扁平:由池化后的(8,8,64)打成一维,即(8*8*64) = 4096
  • 第一个Dense层,由于经过Flatten操作后,输出变成了4096,而第一个Dense中有64个卷积核,所以计算得Param =
    64*(4096+1)= 262208
  • 第二个Dense层,有10个卷积核,所以计算得Param =
    10*(64+1)= 650
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令人作呕的溏心蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值