Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >当训练具有高精度,但model.evaluate()提供低精度时,我如何改进模型?

当训练具有高精度,但model.evaluate()提供低精度时,我如何改进模型?
EN

Stack Overflow用户
提问于 2020-08-16 18:20:40
回答 2查看 42关注 0票数 1

我正在做一个处理传感器数据的项目。我从3个地方收集了传感器数据,并将数据存储为csv文件。大约有4000个样本。数据有X、Y、Z,我使用它们作为特征,class是我的目标变量。目标是在数据集上构建分类模型。目标变量/标签是1,2,3。因为它是时间序列数据,所以我选择使用双向LSTM。

数据分布:

代码语言:javascript
运行
AI代码解释
复制
model = keras.Sequential()
model.add(
    keras.layers.Bidirectional(
    keras.layers.LSTM(
    units = 128,
    input_shape = [X_train.shape[1], X_train.shape[2]]
    )
)
)
model.add(keras.layers.Dropout(rate = 0.2))
model.add(keras.layers.Dense(units = 128, activation = 'relu'))
model.add(keras.layers.Dense(y_train.shape[1], activation = 'softmax'))
model.compile(
loss = 'categorical_crossentropy',
optimizer = 'adam',
metrics = ['acc']
)

在我训练了我的模型之后

代码语言:javascript
运行
AI代码解释
复制
history3 = model.fit(
    X_train, y_train,
    epochs=35,
    batch_size=100,
    validation_split = 0.1,
    shuffle=False
)

这是我上一个时期给出的准确性和验证准确性:

代码语言:javascript
运行
AI代码解释
复制
Epoch 35/35
4002/4002 [==============================] - 3s 858us/step - loss: 0.0216 - acc: 0.9948 - val_loss: 0.3026 - val_acc: 0.9056

当我使用model.evaluate(X_test, y_test)时,它返回一个包含两个值的列表:[5.144028138408701, 0.43551796674728394]

所以问题是这两个值是什么?我的猜测是第一个值是MSE,第二个值是精度。如果我是对的,那么为什么我使用.evaluate时准确率如此之低?我应该做些什么来改进模型?

附注:更多信息

代码语言:javascript
运行
AI代码解释
复制
print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

(4447, 24, 3) (4447, 3) (473, 24, 3) (473, 3)

数据是有序数据,所以我在拆分时使用shuffle = True

代码语言:javascript
运行
AI代码解释
复制
df_train, df_test = train_test_split(df, test_size = 0.1, shuffle = True)
EN

回答 2

Stack Overflow用户

发布于 2020-08-16 19:17:44

你对model.evaluate返回结果的猜测是正确的,第一个是损失,第二个是准确性。你的模型似乎过拟合了,尽管val_accuracy展示了一些其他的东西。我建议您检查数据集中有多少个这两个类别的标签。我的意思是,也许你有一个班级的90%,而另一个班级只有10%。如果是这样的话,有一件简单的事情你可以用.That来做(我猜你用的是来自sklearn.model_selection的train_test_split ),你应该把参数stratify=y添加到train_test_split函数中。这可以帮助处理不平衡的数据集。另外,你有没有尝试过其他的优化算法?你把learning_rate调低了吗?

票数 0
EN

Stack Overflow用户

发布于 2020-08-17 01:30:05

我怀疑你有一个高度不平衡的数据集。例如,如果您有一个数据集,其中0类有10,000个样本,1类有1000个样本。假设您将其分为一个训练集和一个验证集。这两个集合仍然会有这种不平衡。现在,如果你训练你的网络,它会倾向于选择类0,并且验证数据的结果看起来会很好。如果网络总是预测0级,它将有90%的准确率。现在,如果您有一个平衡的测试集,例如,当您在测试集上运行模型评估时,0类的500个样本和1类的500个样本,您将具有很高的错误率。我没有用过它,但我知道model.fit有一个名为class_weight.This的参数,它是一个字典,允许您根据类别调整对损失函数的影响。在上面的示例中,您希望1类样本的权重是0类样本的10倍。然后创建一个class_weight字典,如下所示

代码语言:javascript
运行
AI代码解释
复制
class_weight={0:.55, 1:5.5}

然后在model.fit中使用它。您可以做的其他事情是使用可调整的学习率,以最低的验证损失保存模型,并将其用于评估。使用Keras回调很容易做到这一点。可以设置回调ModelCheckpoint来监控验证损失,并以最低的损失保存模型。Documentation is here.可以设置ReduceLROnPlateau回调来监控验证损失,如果损失在N个连续时期后仍未减少,则将学习减少一个因素。文档是here.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63440492

复制
相关文章
如何在Python中将字典键作为列表返回?
参考链接: Python字典keys() 本文翻译自:How to return dictionary keys as a list in Python?  In Python 2.7 , I cou
用户7886150
2021/01/25
2.2K0
如何在Python中将列表转换为字符串?
Python provides different variable type for programmers usage. We can use int, float, string, list, set … data types in our applications. While using different type of variables we may need to convert then to different types. In this tutorial we will different type of conversion from list to string in Python.
全栈程序员站长
2022/08/12
4.7K0
Python将一个数逆序列放入列表中
小小科
2020/06/15
1.2K0
【说站】Python如何在列表中添加新值
1、append()将元素添加到集合,insert()将元素插入指定的下标应用程序,返回值为None。
很酷的站长
2022/11/24
4.3K0
【说站】Python如何在列表中添加新值
如何在 Python 中计算列表中的唯一值?
Python 提供了各种方法来操作列表,这是最常用的数据结构之一。使用列表时的一项常见任务是计算其中唯一值的出现次数,这在数据分析、处理和筛选任务中通常是必需的。在本文中,我们将探讨四种不同的方法来计算 Python 列表中的唯一值。
很酷的站长
2023/08/11
7230
如何在 Python 中计算列表中的唯一值?
访问列表中的值
#!/usr/bin/python list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
用户8442333
2021/05/27
5.8K0
如何在Dart中合并列表
在 Dart 编程中,List 数据类型类似于其他编程语言中的数组。列表用于表示对象的集合。它是一组有序的对象。Dart 中的核心库负责 List 类的存在、创建和操作。有 5 种方法可以组合两个或多个列表:
徐建国
2021/12/01
2.2K0
flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?
由于keys返回 map 键的Iterable<String>,因此您可以使用where方法检查所需的键,然后可以基于旧 map 值填充值。
徐建国
2021/08/30
1.4K0
Golang 中函数作为值与类型
在 Go 语言中,我们可以把函数作为一种变量,用 type 去定义它,那么这个函数类型就可以作为值传递,甚至可以实现方法,这一特性是在太灵活了,有时候我们甚至可以利用这一特性进行类型转换。作为值传递的条件是类型具有相同的参数以及相同的返回值。
张乘辉
2019/06/14
1.7K0
[Go] golang中接口值(interface)的比较
当写项目的过程中 , 有时候进行逻辑判断 , 如果没注意对两个interface类型的变量进行比较 , 会造成混乱问题
唯一Chat
2021/01/21
3.8K0
如何在终端和 PowerShell 中将一个命令自动重复执行多次
你可能有很多原因要将一个命令重复执行多次,本文介绍在多个平台下如何多次重复执行命令。
walterlv
2020/03/12
4K0
如何在 Python 中将数字转换为字母?
在编程中,有时我们需要将数字转换为字母,例如将数字表示的年份转换为对应的字母表示,或者将数字编码转换为字母字符。Python 提供了多种方法来实现这种转换。本文将详细介绍在 Python 中将数字转换为字母的几种常用方法,并提供示例代码帮助你理解和应用这些方法。
网络技术联盟站
2023/06/01
2K0
python中将dict存入list中,list值仍然随着dict变化【Flask】
在一次将数据库查询结果手动转化为json数据(obj转json)的过程中,发现前端得到的每条数据都是一样的,,,,简述为,列表存入字典值后值会变化,代码如下:
来杯Sherry
2023/05/25
3690
如何在js中将统计代码图标隐藏
  建站时我们都会加一下网站统计,方便把控内容的内容的运营。大部分站长安装的站点统计是第三方统计代码,js形式的,很少用以服务器日志为基础分析的统计。(当然能通过网站日志来分析网站的运营者比一般的站长水平相对要高一些,也更会折腾。因为很多统计都没记录蜘蛛的轨迹)普通的js统计代码就能满足大多数的需求。安装统计代码想必大家闭着眼睛都会,但如果网站是静态页面的话,那每个页面都要添加到,即使安装在统一调用的页脚,那生成页面也需要一定的时间。有没更便捷的办法呢?将统计代码写进常用的js文件中。   将统计代码写进j
ytkah
2018/03/05
13.5K0
如何在js中将统计代码图标隐藏
Python中将字典转换为有序列表、无序列表的方法
说明:列表不可以转换为字典 1.转换后的列表为无序列表 a = {'a' : 1, 'b': 2, 'c' : 3} #字典中的key转换为列表 key_value = list(a.keys()
用户1214487
2018/04/13
3.6K0
Python中将字典转换为有序列表、无序列表的方法
如何在小程序里面放入企业官网注意:
小程序解析html网页标签,有3种方法: 1:使用 wxParse 解析html 2:单独解析 html标签 3:使用最新的小程序组件 web-view 前段时间,微信正式宣布为方便开发者灵活配置小程序,小程序现开放内嵌 Web 页面能力,但这个开放的能力也具有一定的局限性,小程序如果想要内嵌网页,那域名只能是自己公司的,对这个网站拥有控制权才可以。 参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/component/web-view.html 在小程序里
王小婷
2018/06/01
1.2K0
如何在 .Net 7 中将 Query 绑定到数组
在 .Net 7 中,我们可以通过绑定数组的方式来接收来自查询字符串的参数。这样就不需要再使用逗号分隔的字符串来获取参数了。
newbe36524
2023/08/23
1490
flutter - 如何在 dart/flutter 中收听流值
如果流不是广播流,则您只能收听一次。 请参阅此 Medium post 以了解有关 Streams 的更多信息。 收听 stream 时,您需要在 _assetsAudioPlayer.currentPosition 函数中添加您的代码。
徐建国
2021/08/30
1.1K0
idea将多个项目放入一个模块中如何各自运行
导入完成后,出现新项目目录,在目录下找到红色报错的目录删除掉,导入自己的,下面是我删除、导入后的样子、
2020/10/23
2.8K0
idea将多个项目放入一个模块中如何各自运行
点击加载更多

相似问题

如何在golang中将regexp放入proto struct中?

228

如何在golang中将值放入可选字符串参数中?

119

如何在golang urfave cli中将标志值传递给子命令

10

如何在golang中将tar文件放入tar文件中?

21

如何在XPages中将数字列表放入组合框值列表

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档