Python 我将如何着手创建具有不同数量目标/输出的keras模型?

Python 我将如何着手创建具有不同数量目标/输出的keras模型?,python,tensorflow,keras,neural-network,Python,Tensorflow,Keras,Neural Network,我已经建立了一个神经网络回归模型,使用Keras和一个目标。这个很好用, 现在我想包括多个目标。数据集总共包含30个目标,我宁愿训练一个神经网络,而不是30个不同的 我的问题是,在数据预处理过程中,我必须删除一些目标值,例如,因为它们代表不可预测的非物理值。 这就产生了一些问题,我有不同数量的目标/输出。 例如: 目标= 无,0.007798,0.012522 0.2611402110.0000002440.000000 0.048799,无,无 对于给定的输入,我如何创建一个具有不同数量输出的

我已经建立了一个神经网络回归模型,使用Keras和一个目标。这个很好用, 现在我想包括多个目标。数据集总共包含30个目标,我宁愿训练一个神经网络,而不是30个不同的

我的问题是,在数据预处理过程中,我必须删除一些目标值,例如,因为它们代表不可预测的非物理值。 这就产生了一些问题,我有不同数量的目标/输出。 例如: 目标=

  • 无,0.007798,0.012522
  • 0.2611402110.0000002440.000000
  • 0.048799,无,无
  • 对于给定的输入,我如何创建一个具有不同数量输出的keras.序列模型(或函数模型)

    编辑:我是否可以首先训练一个分类模型,预测给定一些测试输入的输出数量,然后根据该预测改变输出层中的输出数量?我想我必须使用函数API来实现类似的功能。

    此处的“分类”编辑是不必要的,即忽略它。测试目标的输出数量为已知数量。

    一种可能的解决方案是单独输出“有效性标志”,其取值范围为0到1。例如,您的第一个目标是

    y=[0.0, 0.007798, 0.012522]
    yf=[0.0, 1.0, 1.0]
    
    其中,零表示无效值。 对
    yf
    使用乙状结肠激活功能。 损失函数可以是
    y
    yf
    的损失之和。 在推理过程中,分析<代码> yf的网络输出,只考虑<代码> y>代码>值,如果对应的<代码> yf>代码>超过0.5阈值

    (对不起,我没有足够的信誉评论) 首先,您是否预先知道某些输出值是否无效,或者是预测哪些输出实际有效的问题的一部分

    如果您事先不知道应该忽略哪些输出,您可以使用您在评论中描述的两步方法

    如果是确定性的(您知道如何确定),那么对于任何给定的输入,哪些输出都是有效的,而您的问题只是如何建立适当的模型,下面是我在keras中的做法:

    • 使用函数式API
    • 创建30个命名输出层(例如out_0、out_1、…out_29)
      • 创建模型时,只需使用outputs参数列出所有30个输出
    • 在编译模型时,为每个单独的输出指定一个损耗,可以通过向损耗参数传递字典来实现,其中键是输出层的名称,值是相应的损耗
      • 假设您将对所有输出使用均方误差,字典将类似于{'out_0':'mse','out_1':'mse',…,'out_29':'mse'}
    • 将输入传递到模型时,每个输入传递三个内容:x、y和损失权重
      • y必须是一个字典,其中键是输出层名称,值是目标输出值
      • 损失权重也是一个与y格式相同的字典。在您的例子中,权重可以是二进制的,对于任何给定样本,对应于实值的每个输出为1,对应于非物理值的每个输出为0(因此在训练期间忽略它们)
      • 对于非物理值目标,不要传递None,使用某种数字填充,否则会出现问题。这是完全无关的,你用你的填料,因为它不会影响梯度训练期间

    这将为您提供一个可培训的模型。但是,一旦你从训练开始,并尝试预测新的数据,你将不得不决定对每个样本忽略哪些输出,网络可能仍然会为你提供“有效的”——寻找这些输入的输出

    谢谢你详尽的回答。是的,我意识到我事先就知道了。所以很抱歉我对分类的编辑,结果发现它不相关。我会一步一步地尝试你的解决方案,并将结果反馈给你。谢谢!