Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使示例仅适用于多个输出Keras函数API中的某些输出_Keras_Neural Network - Fatal编程技术网

如何使示例仅适用于多个输出Keras函数API中的某些输出

如何使示例仅适用于多个输出Keras函数API中的某些输出,keras,neural-network,Keras,Neural Network,我目前遇到的问题是,试图拟合一个功能性keras模型,该模型有10个输出和一个输入,每个输入都有分配给输出的样本 每个样本都有一个包含10个布尔值的列表,指示应在哪些输出上安装此样本 我当前的模型如下所示: inputs = Input(shape=(self.state_count,)) # create the layers that learn the gane d1 = Dense(64, activation="relu", name="

我目前遇到的问题是,试图拟合一个功能性keras模型,该模型有10个输出和一个输入,每个输入都有分配给输出的样本

每个样本都有一个包含10个布尔值的列表,指示应在哪些输出上安装此样本

我当前的模型如下所示:

        inputs = Input(shape=(self.state_count,))
        # create the layers that learn the gane
        d1 = Dense(64, activation="relu", name="dense_1_shared",
                   kernel_initializer=keras.initializers.glorot_uniform(seed=int(time.time())))(inputs)
        d2 = Dense(64, activation="relu", name="dense_2_shared",
                   kernel_initializer=keras.initializers.glorot_uniform(seed=None))(d1)
        # create the heads that come on top of the gamelayers
        models = []
        heads = []
        for i in range(head_count):
            name = "head_{}".format(i)
            head = Dense(self.action_count, activation='relu', name=name,
                         kernel_initializer=keras.initializers.glorot_uniform(seed=None))(d2)
            heads.append(head)
            model = Model(input=inputs, output=head, name=("headmodel: {}".format(str(i))))
            model.compile(loss='mse', optimizer='adam')
            models.append(model)
        total_model = Model(input=inputs, output=heads, name="overall_modell")
        total_model.compile(loss='mse', optimizer='adam')

我正在寻找一种方法来传递一份面具列表以及x和y的训练集,以便只有面具指示的头部才能安装在相应的x和y上


提前谢谢

我会做以下事情

为每个头部创建头部遮罩 创建输入、目标和掩码 这是使用玩具数据集。我正在创建一个包含25个元素的数据集。首先,
samples
是数据点。然后,我有一个对应于每个头部的标签列表(每个标签集的大小
25,state\u count

接下来,我创建遮罩。假设我有一个大小为
(25,人头数)
的面具。我需要做一些操作才能把它做成正确的形状。最后,我们需要一个列表(带有
头数
元素)作为掩码,其中每个掩码的大小
(25个,n个标签)
。然后,我们屏蔽任何掩码值为0的预测和标签。这将导致渐变为零。因此,不会对这些样本和相应的负责人进行任何培训

samples = np.random.normal(size=(25, state_count))
labels = [np.random.choice([0,1], size=(25, n_labels)) for _ in range(head_count)]
fit_mask = np.random.choice([0,1], size=(25, head_count))
fit_mask = np.repeat(np.expand_dims(fit_mask, axis=-1), n_labels, axis=-1)
fit_masks = [m[:,0,:] for m in np.split(fit_mask, head_count, axis=1)]

total_model.fit([samples, *fit_masks], [l*m for l,m in zip(labels, fit_masks)])


我会做以下的事情

为每个头部创建头部遮罩 创建输入、目标和掩码 这是使用玩具数据集。我正在创建一个包含25个元素的数据集。首先,
samples
是数据点。然后,我有一个对应于每个头部的标签列表(每个标签集的大小
25,state\u count

接下来,我创建遮罩。假设我有一个大小为
(25,人头数)
的面具。我需要做一些操作才能把它做成正确的形状。最后,我们需要一个列表(带有
头数
元素)作为掩码,其中每个掩码的大小
(25个,n个标签)
。然后,我们屏蔽任何掩码值为0的预测和标签。这将导致渐变为零。因此,不会对这些样本和相应的负责人进行任何培训

samples = np.random.normal(size=(25, state_count))
labels = [np.random.choice([0,1], size=(25, n_labels)) for _ in range(head_count)]
fit_mask = np.random.choice([0,1], size=(25, head_count))
fit_mask = np.repeat(np.expand_dims(fit_mask, axis=-1), n_labels, axis=-1)
fit_masks = [m[:,0,:] for m in np.split(fit_mask, head_count, axis=1)]

total_model.fit([samples, *fit_masks], [l*m for l,m in zip(labels, fit_masks)])


@丹海,很高兴这有帮助。如果你对答案感到满意,请接受它。@DanHae,很高兴它有帮助。如果你对答案满意,请接受。