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

问题描述

下午好,

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

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

输入相互依赖。实际上,第二输入是特定功能中第一输入的补充。在这种情况下将shuffle = True设置为一个好主意吗?

比方说,我关注的功能具有True或False值。如果此功能的Input1值为“ True”,则我希望Input2的输入为“ False”。

如果我将shuffle设置为True,会不会遇到“ True”-“ True”作为网络输入的情况?

解决方法

洗牌争论的答案

随机播放对此特定情况不会产生不良影响。阵列将被混在一起。例如,假设您具有以下两个网络阵列。


x1 = np.array([19,17,15,9,10,4,18,3,8,12,11,8])
x2 = np.array([18,13,2,14,1,5,7,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的输出中可以看出,数据点的相对位置得以保留。例如x1中的8和x2 13 14`中的were both at index。但是在改组后,两者都移到了索引0。传递改组参数时,Keras使用相同的方法。

在喀拉拉邦,改组既可以在整个训练数据集上进行,也可以在批次级别上进行。官方文档指出:

布尔值(是否在每个纪元之前改组训练数据)或str(用于“批处理”)。当x是生成器时,将忽略此参数。 “批处理”是处理HDF5数据限制的特殊选项;它以批量大小的块洗牌。当steps_per_epoch不为None时无效。

讨论输入的依赖性

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