dax*_*axu 5 neural-network keras
我正在学习NN和Keras。我的测试数据是这样的:
Result, HomeWinPossibility, DrawPossibility, AwayWinPossibility
[['AwayWin' 0.41 0.28 0.31]
['HomeWin' 0.55 0.25 0.2]
['AwayWin' 0.17 0.21 0.62]
.....
Run Code Online (Sandbox Code Playgroud)
这是我的模型:
Result, HomeWinPossibility, DrawPossibility, AwayWinPossibility
[['AwayWin' 0.41 0.28 0.31]
['HomeWin' 0.55 0.25 0.2]
['AwayWin' 0.17 0.21 0.62]
.....
Run Code Online (Sandbox Code Playgroud)
fit的输出为:
Epoch 1/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9151 - acc: 0.5737
Epoch 2/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9181 - acc: 0.5474
Epoch 3/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9111 - acc: 0.5526
Epoch 100/100
190/190 [==============================] - 1s 3ms/step - loss: 0.9130 - acc: 0.5579
Run Code Online (Sandbox Code Playgroud)
那么,为什么损失不像我阅读的一些NN教程那样减少?是因为我提供的数据只是噪音,所以NN无法找到任何线索或模型不正确的东西吗?
因为acc总是在0.55(即50%)左右,这是否意味着NN实际上比随机猜测(> 33%)更好?如果是这样,为什么在第一个时期就达到了0.57的精度?
那么,为什么损失不像我阅读的一些NN教程那样减少?
可能有很多原因-完全取决于您的数据。您可以调整以下内容:
您的批次大小非常小。尽管某些数据实际上可能对此做出了响应,但我认为1在大多数情况下的批量大小会太小-不用开始了解使用批量大小1时显示的结构的冗余性。批量大小非常取决于多少以及您拥有什么样的数据,但是如果您有足够的数据,请尝试在20到30左右的某个位置进行。
尝试不同的激活功能(但总是有softmax或sigmoid在最后一层,因为你想之间的数字0和1)。
增加第一层和/或第二层中的单位数(如果有足够的数据)。
尝试lr为Adam优化器设置学习率():model.compile(optimizer=keras.optimizers.Adam(lr=0.001), ...)
是因为我提供的数据只是噪音
如果您的数据在各个类别中都是纯噪声,那么很可能考虑到每个类别中的数据点数量大致相同,因此准确度约为33%,因为它实际上只是随机猜测。
由于acc始终约为0.55(因此50%)。这是否意味着NN实际上比随机猜测(33%)要好?
不必要。准确性是对正确分类的类别的度量。假设验证数据(通常是计算准确性的数据集的一部分)仅包含一个类的数据。然后,如果NN仅将所有内容分类为该类别,则验证数据将具有100%的准确性!
这意味着,如果每个类中没有相同数量的数据点,那么就不要单靠准确性!在数据集不平衡的情况下,更好的衡量标准是AUC(ROC曲线下的面积)或F1分数,它也考虑了误报。
我建议您研究一下背后的理论。盲目地跑来跑去可能会很烦,因为您很难获得良好的结果。即使您获得了良好的结果,它们通常也可能不如您想像的那样好。读一本书的地方是伊恩·古德费洛(Ian Goodfellow)关于深度学习的书。
| 归档时间: |
|
| 查看次数: |
3437 次 |
| 最近记录: |