用于多级分类的部分连接的神经网络

时间:2021-04-29 19:14:17

标签: python tensorflow neural-network

我想创建一个部分连接的神经网络。简化版本如下所示。 partially connected network

我简化了网络以使其更易于理解。原始的更复杂。在这里,在输入层之后,我有一个类别层。示例地面实况值也显示在那里,即 [1,1,1,1,0,0,0,0,0,0,0,0]。最后一层是子类别层,它总是包含一个 1,其余的为零,即 [0,0,1,0,0,0,0,0,0]。类别和子类别部分链接,但输入层与类别层完全链接。

这是我为它编写的代码。

input_      = Input(shape=5)

cat_layer   = Dense(4*3, activation='sigmoid', name='cat')(input_)

list_of_subcat_layers = []
for idx, i in enumerate([2,4,3]):
    final_subcat  = Dense(i, activation = 'softmax')(cat_layer[:,idx*4:(idx+1)*4])
    list_of_subcat_layers.append(final_subcat)

subcat_output = concatenate(list_of_subcat_layers, name='subcat')

model         = Model(input_, [cat_layer, subcat_output])
model_cat     = Model(input_, cat_layer)
model_subcat  = Model(input_, subcat_output)

loss          = {'cat':'categorical_crossentropy','subcat':'categorical_crossentropy'}
loss_weights  = {'cat':1.,'subcat':1.}
metrics       = {'cat': 'acc','subcat': 'acc'}
optimizer     = Adam(learning_rate=3e-05, epsilon=1e-08)
model.compile(loss=loss, loss_weights=loss_weights, metrics=metrics, optimizer=optimizer)

但是,我的代码有问题。 “softmax”激活应该对所有子类别级别进行一次,但我认为在我的代码中,每个子类别都进行一次。怎么能一劳永逸?

还请评论模型(代码)的其他部分是否有意义。

0 个答案:

没有答案