如何使示例仅适用于多个输出Keras函数API中的某些输出
我目前遇到的问题是,试图拟合一个功能性keras模型,该模型有10个输出和一个输入,每个输入都有分配给输出的样本 每个样本都有一个包含10个布尔值的列表,指示应在哪些输出上安装此样本 我当前的模型如下所示:如何使示例仅适用于多个输出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="
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,很高兴它有帮助。如果你对答案满意,请接受。