python - 将 sample_weight 用于 keras 循环神经网络
问题描述
我正在考虑在sample_weight
我的 keras.fit()
方法中传递一个参数,以控制我的输入神经元对模型输出的权重。例如,我正在研究一个循环神经网络,其中我的数据管道的窗口大小为 4 和 2 个特征。所以我的原始输入是一个(4, 2)
矩阵。
根据keras 文档:
sample_weight:训练样本的可选 Numpy 权重数组,用于加权损失函数(仅在训练期间)。您可以传递一个与输入样本长度相同的平面 (1D) Numpy 数组(权重和样本之间的 1:1 映射),或者在时间数据的情况下,您可以传递一个具有形状的二维数组(样本、序列长度),对每个样本的每个时间步应用不同的权重。当 x 是数据集、生成器或 keras.utils.Sequence 实例时,不支持此参数,而是提供 sample_weights 作为 x 的第三个元素。
由于我正在使用tf.data
,我必须sample_weight
按照文档将 x 作为第三个元素传递。我对 2D/3D 数组的形状应该是什么感到困惑sample_weight
。
例如,当我使用batch_size
我的输入时 size (batch_size, window_size, features)
。根据文档,我必须输入一个 shape 的 2D 数组(samples, sequence_length)
。我希望对所有样本具有相同的权重,但为我的window_size
和更改它features
。
那么这是否意味着sample_weight
应该是 size (batch_size, window_size, features)
?我再次希望每个 具有相同的权重sample
,因此以下对于3、5 和2batch_size
的 a是否正确?(注:每批都一样,这是我想要的)window_size
features
<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].
解决方案
推荐阅读
- php - 像使用 $_GET 一样从 URL 值字符串创建变量
- azure - Azure AD 快速入门说回复 url 与应用程序不匹配
- python - 无法在单独的函数中编写动画代码,tkinter
- java - 如何从两层子活动中获取高分数据到android studio中的主要活动
- python - ValueError:无法分配对象必须是实例
- android - 使用 dart 将文本数据(时间戳、位置)添加到图像
- cqrs - 如何使用 NestJS 实现公共 EventBus?
- php - 应用过滤器后返回非空关系表
- c - 学习处理文件,尝试通过引用 fcn 来传递结构数组
- docker - 每次用户登录时启动一个容器