python - 为什么尽管损失衰减且评估结果合理,但张量流的“准确度”值始终为 0
问题描述
我正在学习如何使用 Tensorflow,并按照其中一个示例构建了一个模型来执行方程 y=mx+c 的线性回归。我生成了一个包含 1999 个样本的 csv 文件和一个模型,我可以在其中更改规范化(开/关)、层数、节点数和 epoch 数。在我事先不知道答案但对我的结果感到困惑的情况下,我希望能够使用训练和评估的损失/准确性来指导这些变量的选择,总结如下
归一化层 节点 Epochs Start Loss End Loss Accuracy
真 1 200 5 0.6022 0.4348 0
正确 1 200 50 0.5963 0.4347 0
真 10 200 5 0.5249 0.4525 0
真 10 200 50 0.5157 0.4418 0
正确 10 500 5 0.5816 0.4825 0
真 10 500 50 0.5591 0.4422 0
错误 1 200 5 996.2897 1.8313 0
错误 1 200 50 1063.1994 1.7264 0
错误 10 200 5 421.1371 40.6160 0
错误 10 200 50 293.6943 46.2854 0
错误 10 500 5 382.2659 297.2881 0
错误 10 500 50 412.2182 79.7649 0
我使用的编译参数是
编译优化器:adam loss:mean_absolute_error 指标:['accuracy'] loss_weights:[1.0]
示例模型摘要是
型号:“LRmodel”
层(类型)输出形状参数#
LR-输入 (InputLayer) [(None, 1)] 0
密集(密集)(无,200)400
ML-LinearRegression (Dense) (None, 1) 201
总参数:601
可训练参数:601
不可训练参数:0
示例拟合结果是
1600/1600 - 1s - 损失:1063.1994 - 准确度:0.0000e+00 - val_loss:90.2848 - val_accuracy:0.0000e+00
纪元 2/5
1600/1600 - 0s - 损失:137.8654 - 准确度:0.0000e+00 - val_loss:2.1525 - val_accuracy:0.0000e+00
时代 3/5
1600/1600 - 0s - 损失:4.4340 - 准确度:0.0000e+00 - val_loss:3.4557 - val_accuracy:0.0000e+00
时代 4/5
1600/1600 - 0s - 损失:1.7573 - 准确度:0.0000e+00 - val_loss:3.1190 - val_accuracy:0.0000e+00
纪元 5/5
1600/1600 - 0s - 损失:1.7264 - 准确度:0.0000e+00 - val_loss:3.2794 - val_accuracy:0.0000e+00
另外还有2个问题我不明白
- 有时拟合有一个永远不会改变的高损失,模型无法计算结果。发生这种情况时,我再次运行训练(有时多次)并最终获得上述结果,而无需更改数据或代码。
- 规范化产生的模型不如我不规范化模型时准确。
解决方案
推荐阅读
- .net-core - .NET Core - 使用 AddSingleton() 在容器中配置的类需要是单例吗?
- laravel - 为什么 vagrant up 不生成代码目录?
- java - 如果它取决于 Mono 对象,我如何返回响应?
- python - 向训练有素的 tensorflow keras 模型添加重新缩放层(或任何层)
- javascript - 如何使用基于字符的正则表达式将值匹配到单独的可选组中?
- python - pip 会卸载模块吗?
- excel - 我收到编译错误预期识别功能错误
- flutter - 背景图像未设置为白色 | 为文本添加样式
- excel - excel中的MOD函数
- angular-material - 在 ngIf 过滤器之后,Mat Cards 没有重新排列到同一行