- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在处理不平衡类的顺序标记问题,我想使用 sample_weight
来解决不平衡问题。基本上,如果我训练模型大约 10 个时期,我会得到很好的结果。如果我训练更多的 epoch,val_loss
会不断下降,但我会得到更差的结果。我猜该模型只是检测到更多的优势类别,而不利于较小的类别。
该模型有两个输入,用于词嵌入和字符嵌入,输入是从 0 到 6 的 7 个可能类别之一。
有了填充,我的词嵌入输入层的形状是(3000, 150)
,词嵌入的输入层是(3000, 150, 15)
。我使用 0.3 分割来测试和训练数据,这意味着用于词嵌入的 X_train
是 (2000, 150)
和 (2000, 150, 15)
用于字符嵌入。 y
包含每个单词的正确类别,编码为 7 维单热向量,因此其形状为 (3000, 150, 7)
。 y
同样分为训练集和测试集。然后将每个输入输入双向 LSTM。
输出是一个矩阵,其中为 2000 个训练样本的每个单词分配了 7 个类别之一,因此大小为 (2000, 150, 7)
。
起初,我只是尝试将 sample_weight
定义为长度为 7 的 np.array
,其中包含每个类别的权重:
count = [list(array).index(1) for arrays in y for array in arrays]
count = dict(Counter(count))
count[0] = 0
total = sum([count[key] for key in count])
count = {k: count[key] / total for key in count}
category_weights = np.zeros(7)
for f in count:
category_weights[f] = count[f]
但我收到以下错误 ValueError:为形状为 (2000, 150, 7) 的输入找到形状为 (7,) 的 sample_weight 数组。 sample_weight 无法广播。
查看文档,看起来我应该传递一个形状为 (samples, sequence_length) 的二维数组
。所以我创建了一个 (3000, 150)
数组,其中串联了每个序列的每个单词的权重:
weights = []
for sample in y:
current_weight = []
for line in sample:
current_weight.append(frequency[list(line).index(1)])
weights.append(current_weight)
weights = np.array(weights)
在 compile()
中添加 sample_weight_mode="temporal"
选项后,通过 sample_weight
参数将其传递给 fit 函数。
我首先收到一个错误,告诉我维度是错误的,但是在只为训练样本生成权重之后,我最终得到了一个 (2000, 150)
数组,我可以用它来拟合我的模型。
最佳答案
我认为您混淆了 sample_weights
和 class_weights
。检查 docs有点我们可以看出它们之间的区别:
sample_weights
用于为每个 训练样本提供权重。 这意味着您应该传递一个具有相同数量的一维数组元素作为您的训练样本(指示每个样本的权重)。如果您使用的是时间数据,您可以传递一个二维数组,使您能够为每个样本的每个时间步赋予权重。
class_weights
用于为每个输出类提供权重或偏差。这意味着您应该为您尝试分类的每个类别传递一个权重。此外,此参数需要将字典 传递给它(不是数组,这就是您出现该错误的原因)。例如考虑这种情况:
class_weight = {0 : 1. , 1: 50.}
在这种情况下(二元分类问题),与 0
类相比,1
类样本的权重(或“相关性”)是 50 倍.这样您就可以补偿不平衡的数据集。这是另一个有用的 post在处理不平衡数据集时,详细解释这个选项和其他要考虑的选项。
If I train for more epochs, val_loss keeps dropping, but I get worse results.
可能您过度拟合了,正如您正确怀疑的那样,您的数据集所具有的不平衡类可能是造成这种情况的原因。补偿类权重应该有助于缓解这种情况,但是可能仍有其他因素会导致超出此问题/答案范围的过度拟合(因此请务必在解决此问题后注意这些因素)。
从你的帖子来看,在我看来你需要的是使用 class_weight
来平衡你的训练数据集,为此你需要传递一个字典指示您的 7 个类(class)之间的重量比。仅当您想为每个 样本提供自定义权重以供考虑时,才考虑使用sample_weight
。
如果您想对这两者进行更详细的比较,请考虑查看 this answer我发布了一个相关问题。 剧透:sample_weight
覆盖 class_weight
,因此您必须使用其中之一,但不能同时使用这两个,因此请注意不要混合使用它们。
更新:截至本次编辑(2020 年 3 月 27 日),查看 source code training_utils.standardize_weights()
我们可以看到它现在支持两者 class_weights
和 sample_weights
:
Everything gets normalized to a single sample-wise (or timestep-wise) weight array. If both
sample_weights
andclass_weights
are provided, the weights are multiplied together.
关于python - 在 Keras 中使用 sample_weight 进行序列标注,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48315094/
我有一条短线 (MKPolyline) 和一个自定义注释类 (MKPointAnnotaion)。现在我的点注释位于多段线的中点。但是,我希望每当触摸多段线上的任何点时都显示标注,类似于路由在 map
我正在使用此自定义 MKAnnotationView http://blog.asolutions.com/2010/09/building-custom-map-annotation-callout
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicates: Custom MKPinAnnotation callout bubble similar to default
为什么这不起作用? - (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views { if (TRAC
我试图在不触摸引脚的情况下隐藏 AnnotationView,这可能吗?谢谢! for (id currentAnnotation in self.mapView.annotations) {
我正在使用 JQplot 饼图。我需要标 checkout 现在图表之外。我怎样才能做到这一点? 最佳答案 如果您指的是数据标签,则需要将 dataLabelPositionFactor 设置为大于
我的 map 上有 20 个图钉,点击后每个图钉都会显示带有 field 名称的注释,并且右侧有一个标注按钮。我已使用 segue 成功将此按钮链接到单个页面。问题是所有位置都链接到同一页面。我想要
是否可以像在 iPhone 和 Google map 中那样将标注附加到 ItemizedOverlay 项目? 最佳答案 我假设“标注”是指通常出现的信息窗口/“气球提示”?这是代码和示例: htt
我正在使用 Python 2.7 和 PySide(Qt 包装器)开发 GUI 应用程序。 我希望标注小部件 float 在其他小部件上方(类似于工具提示),但不使用标准工具提示框架,该框架基本上为小
我有一个 TableView,用于在点击单元格时显示 MapView 注释标注。 在 iOS 10 中,我可以将 MapView 置于注释的中心,然后使用以下方法显示它的标注: func tableV
我想创建一个自定义 MKAnnotationView 标注,如此图所示。我已经测试了几种解决方案,但它们只允许自定义左/右图像和标题/副标题。谁能给我一些源代码或教程链接吗? 目前我一无所知。请帮忙。
我一直在寻找可能是这个问题的根源,但我看不出出了什么问题。我希望你能在这里帮助我。 我正在尝试在 mapView 中显示注释,图钉被丢弃但无法看到标注,直到我先点击用户位置注释(蓝点)然后返回并点击注
我需要将 xml 数据转换为 Excel 文件。当我写入文件时,我的代码可以正常工作,但是,当我尝试写入输出流时,代码无法正常工作。 我想做的就是使用 Apache POI 类创建一个 excel 文
如何始终在 map View 中显示标注?如果我们点击 map View 标注隐藏并再次点击图钉显示。我不想这样......,我需要始终显示标注,没有隐藏。这个怎么做。请帮我。我正在使用下面的代码来显
我有一个MKPointAnnotation: let ann = MKPointAnnotation() self.ann.coordinate = annLoc self.ann.title = "
我已遵循指南here创建自定义标注 View 。我在自定义类中添加了两行: var dismissesAutomatically: Bool = false var isAnchoredToAnnot
我们正在 Angular.js 中做一个项目,我们从用户体验人员那里获得的模型大量使用交互式弹出窗口/标注。 问题是我似乎无法以干净的方式将这些映射到 Angular 概念上。从概念上讲,它们需要自己
我在显示注释标题时遇到问题,如下图所示。第一张图片很好地表示了值(value);另一方面,一旦值上升到三位数,标题就会显示三个点,如第二张图片所示。我想知道如何解决这个问题。任何想法都将非常受欢迎!非
我正在分析几百万封电子邮件。我的目标是能够分类然后分组。组可以是例如: 交付问题(交付缓慢、发货前处理缓慢、可用性信息不正确等) 客户服务问题(电子邮件回复速度慢、回复不礼貌等) 返回问题(返回请求处
我有一个MKPointAnnotation: let ann = MKPointAnnotation() self.ann.coordinate = annLoc self.ann.title = "
我是一名优秀的程序员,十分优秀!