【问题标题】:create Dense layers in a loop在循环中创建密集层
【发布时间】:2019-12-23 18:56:39
【问题描述】:

我需要通过for循环创建多个密集层,迭代次数取决于标签的数量。我想为每个标签创建一个密集层。每个标签都有一组不同的特征,所以我想用每个密集层中的相应特征集分别预测每个标签。那可能吗?以下代码是我的尝试。

layers = []
for i in range(num_labels):
    h1 = Dense(num_genes_per+10, kernel_initializer='normal', input_dim = num_genes_per, activation='relu')(inputs)
    h2 = Dense(int(num_genes_per/2), kernel_initializer='normal', activation='relu')(h1) 
    output= Dense(1, kernel_initializer='normal', activation='linear')(h2)
    layers.append(output)

merged_output = concatenate(layers, axis=1)
model = Model(inputs, merged_output)

每个 h2 的输出的形状为 [batch, 1],merged_output 的形状为 [batch, num_labels]。上面的代码有错误吗?

我知道它效率不高,但是如果我将不同的一组特征连接到一个输入张量中,并且只使用一个密集层同时预测所有标签,是否会损害预测精度?

【问题讨论】:

  • 这没有多大意义。您正在创建并行密集层,每个密集层都应该预测一个标签。这就像有 n 个网络来预测 n 个标签,而且效率很低。如果你堆叠这些层,学习的网络容量将会增加。
  • @Mehraban 但是每个标签都有一组不同的特征,所以我想用每个密集层中的相应特征集分别预测每个标签。我知道它效率不高,但是如果我将不同的一组特征连接到一个输入张量中,并且只使用一个密集层来同时预测所有标签,它会损害预测精度吗?
  • 你的意思是每个h1层的输入都不一样?
  • 听起来像掩蔽可能会对您有所帮助。如果该功能不存在,请在其位置输入一个零并屏蔽所有零。
  • @Mehraban 是的,例如 h1 的 (feature1, feature2, feature3),h2 的 (feature4, feature5, feature6),h3.etc 的 (feature7, feature8, feature9)

标签: keras


【解决方案1】:

这取决于您如何定义特征和标签。如果特征 1、2 和 3 用于预测标签 1,并且它们与标签 2 没有关系,则将其包含在标签 3 推理中是没有意义的。

【讨论】:

  • 这不是绝对没有关系,只是某些情况下特征 1 2 3 与 label1 相关性高,但与 label2 相关性低,所以我只想预测每个标签与与相关性高的特征他们
  • @HenryBai 所以我建议你在所有类别的训练样本中包含所有特征,并让网络弄清楚如何在预测中对这些特征进行加权。
猜你喜欢
  • 2016-10-24
  • 2017-01-06
  • 2011-06-18
  • 1970-01-01
  • 2022-10-13
  • 2020-10-31
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
相关资源
最近更新 更多