python - 由于我的优化器,我的 Keras 神经网络精度是否总是停留在 ~0.55 左右?
问题描述
我在 Keras 中为神经网络编写了以下代码,当我运行它时,准确率总是停留在 0.4-0.6 左右的值。我选择了错误的优化器还是有其他方法可以提高我的准确性。我有一个输入,包括一个 [8100:63] 数组和一个 [8100:3] 数组的输出。如果能得到一点帮助或一些意见,我将不胜感激。
这是我的代码:
import tensorflow as tf
from keras import metrics
import numpy as np
from keras.models import *
from keras.layers import Dense
from keras import optimizers
from keras.utils import plot_model
from graphviz import *
np.random.seed(234)
#Define Input
tf_features_64 = np.load("IN.npy")
tf_labels_64 = np.load("OUT.npy")
tf_features_32 = tf_features_64.astype(np.float32)
tf_labels_32 = tf_labels_64.astype(np.float32)
X = tf_features_32
Y = tf_labels_32
#create Layers
visible = Input(shape=(63,))
x = Dense(120, activation='relu')(visible)
x = Dense(100, activation='relu')(x)
x = Dense(100, activation='relu')(x)
x = Dense(100, activation='relu')(x)
x = Dense(100, activation='relu')(x)
x = Dense(70, activation='relu')(x)
x = Dense(30, activation='relu')(x)
output = Dense(3)(x)
Optimizer = optimizers.adam(lr=0.01)
model = Model(inputs=visible, outputs = output)
model.compile(optimizer=Optimizer,
loss=['mse'],
metrics=['acc']
)
model.fit(X, Y, epochs=500, batch_size=100, shuffle=True)
print(model.summary)
输出看起来总是这样:
100/8160 [..............................] - ETA: 0s - loss: 8.4386e-05 - acc: 0.6000
2100/8160 [======>.......................] - ETA: 0s - loss: 7.6640e-05 - acc: 0.5633
4000/8160 [=============>................] - ETA: 0s - loss: 7.5545e-05 - acc: 0.5603
5600/8160 [===================>..........] - ETA: 0s - loss: 7.5711e-05 - acc: 0.5580
7300/8160 [=========================>....] - ETA: 0s - loss: 7.6259e-05 - acc: 0.5537
8160/8160 [==============================] - 0s 28us/step - loss: 7.6090e-05 - acc: 0.5522
Epoch 497/500
100/8160 [..............................] - ETA: 0s - loss: 9.6210e-05 - acc: 0.5900
1600/8160 [====>.........................] - ETA: 0s - loss: 8.0017e-05 - acc: 0.5506
2900/8160 [=========>....................] - ETA: 0s - loss: 7.9372e-05 - acc: 0.5566
4300/8160 [==============>...............] - ETA: 0s - loss: 7.7604e-05 - acc: 0.5526
5900/8160 [====================>.........] - ETA: 0s - loss: 7.5976e-05 - acc: 0.5520
7600/8160 [==========================>...] - ETA: 0s - loss: 7.5226e-05 - acc: 0.5488
8160/8160 [==============================] - 0s 33us/step - loss: 7.5611e-05 - acc: 0.5515
Epoch 498/500
100/8160 [..............................] - ETA: 0s - loss: 7.1056e-05 - acc: 0.5400
2000/8160 [======>.......................] - ETA: 0s - loss: 7.3529e-05 - acc: 0.5390
3900/8160 [=============>................] - ETA: 0s - loss: 7.2863e-05 - acc: 0.5505
5800/8160 [====================>.........] - ETA: 0s - loss: 7.3346e-05 - acc: 0.5534
7200/8160 [=========================>....] - ETA: 0s - loss: 7.4003e-05 - acc: 0.5524
8160/8160 [==============================] - 0s 29us/step - loss: 7.4069e-05 - acc: 0.5522
Epoch 499/500
100/8160 [..............................] - ETA: 0s - loss: 6.8331e-05 - acc: 0.5300
1900/8160 [=====>........................] - ETA: 0s - loss: 7.2856e-05 - acc: 0.5432
3800/8160 [============>.................] - ETA: 0s - loss: 7.3400e-05 - acc: 0.5424
5800/8160 [====================>.........] - ETA: 0s - loss: 7.4324e-05 - acc: 0.5491
7700/8160 [===========================>..] - ETA: 0s - loss: 7.5220e-05 - acc: 0.5531
8160/8160 [==============================] - 0s 27us/step - loss: 7.5057e-05 - acc: 0.5522
Epoch 500/500
100/8160 [..............................] - ETA: 0s - loss: 7.8258e-05 - acc: 0.5700
2100/8160 [======>.......................] - ETA: 0s - loss: 8.3809e-05 - acc: 0.5495
4100/8160 [==============>...............] - ETA: 0s - loss: 8.1708e-05 - acc: 0.5434
6100/8160 [=====================>........] - ETA: 0s - loss: 7.9374e-05 - acc: 0.5475
7900/8160 [============================>.] - ETA: 0s - loss: 7.8028e-05 - acc: 0.5485
8160/8160 [==============================] - 0s 26us/step - loss: 7.7851e-05 - acc: 0.5478
解决方案
如果您正在进行回归,我会更改您正在寻找的指标,以反映您训练的内容。
model.compile(optimizer=Optimizer,
loss=['mse'],
metrics=['mse']
)
如果您正在进行分类(这就是准确性的意义所在),那么损失应该改变为
model.compile(optimizer=Optimizer,
loss=['categorical_crossentropy'],
metrics=['acc']
)
推荐阅读
- python - 如何使用 Python 和 BeautifulSoup 从本网站提取表格
- python - 使用 globals() 或 locals() 来避免创建很少需要的变量是个好主意吗?
- javascript - @import "@" 导致 vue 项目中断
- android - 导航组件片段在第一次执行后卡在运行最后一行代码
- bash - Bash:脚本中的 Diff cmd 未按预期工作
- python - 递归返回列表函数停止?
- javascript - 计算 PixiJs 初始渲染所花费的时间
- python - 如何通过合并另外两个数组来制作多个数组
- visual-studio - 在 D3D12 中处理 DisplayInformation::DisplayContentsInvalidated
- windows - 使用 for 命令循环文件内容与最后一项有问题