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

Python 用于多级分类的部分连接神经网络,python,tensorflow,neural-network,Python,Tensorflow,Neural Network,我想创建一个部分连接的神经网络。简化版本如下所示。 我简化了网络,使之更容易理解。原来的更复杂。在这里,在输入层之后,我有一个类别级别的层。样本地面真值也显示在那里,即,[1,1,1,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, activatio

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

我简化了网络,使之更容易理解。原来的更复杂。在这里,在输入层之后,我有一个类别级别的层。样本地面真值也显示在那里,即,
[1,1,1,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”激活应该为所有子类别级别执行一次,但我认为在我的代码中,每个子类别执行一次。怎么能一劳永逸


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

我有点不确定是否正确理解模型,但在对其执行softmax激活之前,您可能需要连接所有子类别输出?这是什么意思?你能发表你的建议吗?事实上,我收回了。我认为每个子类别一次就可以了,因为只有一个类别被激活,对吗?因此,将后softmax子类别输出乘以类别输出(除1个类别外,所有输出均为0),以便将所有不相关的子类别输出归零。让我知道这是否有意义