shuffle=True 如何影响具有两个输入的 Keras 模型?



下午好,

我有一个 Keras 模型,该模型有两个输入。输入通过编码层进行处理,然后在下一层中连接输出。

对于 .fit 方法,有一个名为"shuffle"的参数,我通常将其保留在 True 上,但在这种情况下我有点不确定。

输入相互依赖。事实上,第二个输入是特定特征中第一个输入的补充。在这种情况下设置 shuffle=True 会是一个坏主意吗?

假设我关注的功能具有"真"或"假"值。如果 Input1 对于此功能的值为"True",我希望输入 Input2 的值为"False"。

如果我将shuffle设置为True,我最终会得到"True"-"True"作为网络的输入吗?

随机参数的答案

洗牌不会对这种特殊情况产生不良影响。数组将被洗牌在一起。例如,假设您有以下两个阵列连接到网络。


x1 = np.array([19,  0, 17, 15,  9, 15, 10,  4, 18,  3, 18,  8, 12, 11,  8, 12, 10,
9, 11,  8])
x2 = np.array([18, 13,  2, 17, 14,  0,  9, 15,  1,  1,  5,  7, 14,  1, 13, 10, 12,
12,  9, 16])

这两个数组可以一起洗牌,首先生成洗牌索引,然后按洗牌索引为每个数组编制索引。

indices = np.arange(x1.shape[0])
np.random.seed(123)
x1 = x1[indices]
x2 = x2[indices]
print(x1)
# [ 8 15  9  9 18  4  8 12 19 12 10  3  8 18 15  0 10 11 17 11]
print(x2)
# [13  0 14 12  1 15 16 14 18 10 12  1  7  5 17 13  9  9  2  1]

从上面的print输出中可以看出,数据点的相对位置被保留下来。例如 8 英寸x1英寸和13x 2were both at index14 英尺。但是在洗牌之后,两者都已移至索引 0。Keras 在传递 shuffle 参数时使用相同的方法。

在 keras 中,洗牌可以在整个训练数据集或批处理级别完成。官方文件指出:

布尔值(是否在每个时期之前打乱训练数据)或 str(用于"批处理")。当 x 是生成器时,将忽略此参数。"批处理"是处理 HDF5 数据限制的特殊选项;它以批量大小的块洗牌。当steps_per_epoch不是 None 时不起作用。

关于投入依存性的讨论

前馈神经网络的输入的假设之一是它们是独立的。但是,在您的情况下,您有两个输入,其中第二个输入取决于第一个输入。这违反了独立的假设。一种可能的解决方案是使用假设输入之间存在依赖性的神经网络。例如,递归神经网络(RNN)是此类问题的不错选择。

最新更新