首页 > 解决方案 > 由于我的优化器,我的 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

标签: pythontensorflowmachine-learningneural-networkkeras

解决方案


如果您正在进行回归,我会更改您正在寻找的指标,以反映您训练的内容。

model.compile(optimizer=Optimizer,
              loss=['mse'],
              metrics=['mse']
              )

如果您正在进行分类(这就是准确性的意义所在),那么损失应该改变为

model.compile(optimizer=Optimizer,
              loss=['categorical_crossentropy'],
              metrics=['acc']
              )

推荐阅读