我正在考虑在我的keras sample_weight
方法中向.fit()
传递参数,以控制输入神经元在模型输出上的权重。例如,我在一个递归神经网络上工作,其中我的数据管道的窗口大小为4和2。所以我最初的输入是一个(4, 2)
矩阵。
根据keras docs:
sample_weight:用于训练的可选Numpy权重数组 样本,用于加权损失函数(仅在训练期间)。 您可以传递长度与 输入样本(权重和样本之间的1:1映射),或者 如果是时间数据,则可以传递具有形状(样本, sequence_length),以对每个时间步长施加不同的权重 每个样本。当x是数据集时,不支持此参数, generator或keras.utils.Sequence实例,而是提供 sample_weights作为x的第三个元素。
由于我使用的是tf.data
,因此必须根据文档将sample_weight
作为x的第三个元素进行传递。我对sample_weight
的2D / 3D阵列的形状感到困惑。
例如,当我使用batch_size
时,输入的大小为(batch_size, window_size, features)
。根据文档,我必须输入形状为(samples, sequence_length)
的2D数组。我希望所有样本都具有相同的权重,但请更改我的window_size
和features
的权重。
这是否意味着sample_weight
的大小应为(batch_size, window_size, features)
?同样,我想对每个sample
具有相同的权重,因此以下内容对batch_size
为3,window_size
为5和features
为2正确吗? (注意:每批都是一样的,这就是我想要的)
<tf.Tensor: shape=(3, 5, 2), dtype=float32, numpy=
array([[[0. , 0. ],
[0.25 , 0.025],
[0.5 , 0.05 ],
[0.75 , 0.075],
[1. , 0.1 ]],
[[0. , 0. ],
[0.25 , 0.025],
[0.5 , 0.05 ],
[0.75 , 0.075],
[1. , 0.1 ]],
[[0. , 0. ],
[0.25 , 0.025],
[0.5 , 0.05 ],
[0.75 , 0.075],
[1. , 0.1 ]]], dtype=float32)>)
该示例显示错误:
ValueError: Can not squeeze dim[2], expected a dimension of 1, got 2 for '{{node huber_loss/weighted_loss/Squeeze}} = Squeeze[T=DT_FLOAT, squeeze_dims=[-1]](IteratorGetNext:2)' with input shapes: [?,5,2].