将sample_weight用于keras循环神经网络

时间:2020-09-21 19:27:09

标签: python tensorflow keras

我正在考虑在我的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_sizefeatures的权重。

这是否意味着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].

0 个答案:

没有答案