如何计算Keras模型中的参数数量?

时间:2019-11-23 16:11:25

标签: python-3.x keras neural-network deep-learning

这是我的模特:

from keras.layers import Input, Embedding, Flatten
from keras.models import Model


n_teams = 10888

team_lookup = Embedding(input_dim=n_teams,
                        output_dim=1,
                        input_length=1,
                        name='Team-Strength')

teamid_in = Input(shape=(1,))

strength_lookup = team_lookup(teamid_in)

strength_lookup_flat = Flatten()(strength_lookup)

team_strength_model = Model(teamid_in, strength_lookup_flat, name='Team-Strength-Model')

team_in_1 = Input(shape=(1,), name='Team-1-In')

team_in_2 = Input(shape=(1,), name='Team-2-In')

home_in = Input(shape=(1,), name='Home-In')

team_1_strength = team_strength_model(team_in_1)

team_2_strength = team_strength_model(team_in_2)

out = Concatenate()([team_1_strength, team_2_strength, home_in])

out = Dense(1)(out)

当我用10888个输入拟合模型并运行摘要时,我总共得到10892个参数,请向我解释:

  

1)这4个来自哪里?和

     

2)如果我的每个输出都是10888,为什么它只计数一次?

以下是模型的摘要:

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
Team-1-In (InputLayer)          (None, 1)            0                                            
__________________________________________________________________________________________________
Team-2-In (InputLayer)          (None, 1)            0                                            
__________________________________________________________________________________________________
Team-Strength (Model)           (None, 1)            10888       Team-1-In[0][0]                  
                                                                 Team-2-In[0][0]                  
__________________________________________________________________________________________________
Home-In (InputLayer)            (None, 1)            0                                            
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 3)            0           Team-Strength[1][0]              
                                                                 Team-Strength[2][0]              
                                                                 Home-In[0][0]                    
__________________________________________________________________________________________________
dense_1 (Dense)                 (None, 1)            4           concatenate_1[0][0]              
==================================================================================================
Total params: 10,892
Trainable params: 10,892
Non-trainable params: 0
__________________________________________________________________________________________________

1 个答案:

答案 0 :(得分:1)

要回答您的问题:

  1. 4源自output_size * (input_size + 1) = number_parameters。从concatenate_1[0][0]开始,您有3个关联和1个偏差,因此4

  2. 10880Team-1Team-2连接到的嵌入层的大小。这是将要使用的总“词汇”,与输出无关(这是Embedding的第二个参数)。

我希望这是有道理的。