首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用keras和验证精度0.0000e+00的神经网络精度非常低

使用keras和验证精度0.0000e+00的神经网络精度非常低
EN

Stack Overflow用户
提问于 2017-11-10 14:00:44
回答 3查看 11.5K关注 0票数 4

下面是我正在使用的代码。请让我知道为什么我的验证和训练准确率如此之低?验证准确率仅为0.0000e+00,训练准确率约为37%。可能出了什么问题?我的训练集有10500行,172列。我的测试集有3150行,172列。我的第一列是响应(class),因此我只使用它作为Y,其余的列作为X。我的响应是3个类: default,LF和RF

代码语言:javascript
复制
from __future__ import print_function
import numpy as np
import pandas
from keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.optimizers import SGD
from keras.utils import np_utils
from sklearn.preprocessing import LabelEncoder
np.random.seed(1671)
NB_EPOCH = 5
BATCH_SIZE = 128
VERBOSE = 1
NB_CLASSES = 3
OPTIMIZER = SGD()
N_HIDDEN = 128
VALIDATION_SPLIT=0.1
RESHAPED = 171
dataframe_train = pandas.read_csv("TrainingEdgesToAction.csv", header=None)
dataset_train = dataframe_train.values
X_train = dataset_train[1:,1:172].astype(float)
#X_train = dataset_train[1:,0:172]
Y_train = dataset_train[1:,0]

dataframe_test = pandas.read_csv("TestingEdgesToAction.csv", header=None)
dataset_test = dataframe_test.values
X_test = dataset_test[1:,1:172].astype(float)
#X_test = dataset_test[1:,0:172]
Y_test = dataset_test[1:,0]

X_train = X_train.reshape(10500,RESHAPED)
X_test = X_test.reshape(3150,RESHAPED)
X_train /= 255
X_test /= 255
print(X_train.shape[0],'train samples')
print(X_test.shape[0],'test samples')

encoder = LabelEncoder()
encoder.fit(Y_train)
encoded_Y_train = encoder.transform(Y_train)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y_train = np_utils.to_categorical(encoded_Y_train)
print(dummy_y_train)

encoder = LabelEncoder()
encoder.fit(Y_test)
encoded_Y_test = encoder.transform(Y_test)
# convert integers to dummy variables (i.e. one hot encoded)
dummy_y_test = np_utils.to_categorical(encoded_Y_test)
print(dummy_y_test)

#Y_train = np_utils.to_categorical(Y_train,NB_CLASSES)
#Y_test = np_utils.to_categorical(Y_test, NB_CLASSES)

model = Sequential()
model.add(Dense(N_HIDDEN,input_shape=(RESHAPED,)))
model.add(Activation('relu'))
model.add(Dense(N_HIDDEN))
model.add(Activation('relu'))
model.add(Dense(NB_CLASSES))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',optimizer=OPTIMIZER,metrics=
['accuracy'])
history = model.fit(X_train,dummy_y_train,batch_size=BATCH_SIZE,epochs=NB_EPOCH,shuffle=True,verbose=VERBOSE,validation_split=VALIDATION_SPLIT)
score = model.evaluate(X_test,dummy_y_test,verbose=VERBOSE)

print("\nTest score:",score[0])
print("Test accuracy:",score[1])

10500 train samples
3150 test samples
[[ 1.  0.  0.]
[ 1.  0.  0.]
[ 1.  0.  0.]
..., 
[ 0.  0.  1.]
[ 0.  0.  1.]
[ 0.  0.  1.]]
[[ 1.  0.  0.]
[ 1.  0.  0.]
[ 1.  0.  0.]
..., 
[ 0.  0.  1.]
[ 0.  0.  1.]
[ 0.  0.  1.]]
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense_49 (Dense)             (None, 128)               22016     
_________________________________________________________________
activation_49 (Activation)   (None, 128)               0         
_________________________________________________________________
dense_50 (Dense)             (None, 128)               16512     
_________________________________________________________________
activation_50 (Activation)   (None, 128)               0         
_________________________________________________________________
dense_51 (Dense)             (None, 3)                 387       
_________________________________________________________________
activation_51 (Activation)   (None, 3)                 0         
=================================================================
Total params: 38,915
Trainable params: 38,915
Non-trainable params: 0
_________________________________________________________________
Train on 9450 samples, validate on 1050 samples
Epoch 1/5
9450/9450 [==============================] - 2s - loss: 1.0944 - acc: 0.3618 
- val_loss: 1.1809 - val_acc: 0.0000e+00
Epoch 2/5
9450/9450 [==============================] - 1s - loss: 1.0895 - acc: 0.3704 
- val_loss: 1.2344 - val_acc: 0.0000e+00
Epoch 3/5
9450/9450 [==============================] - 0s - loss: 1.0874 - acc: 0.3704 
- val_loss: 1.2706 - val_acc: 0.0000e+00
Epoch 4/5
9450/9450 [==============================] - 0s - loss: 1.0864 - acc: 0.3878 
- val_loss: 1.2955 - val_acc: 0.0000e+00
Epoch 5/5
9450/9450 [==============================] - 0s - loss: 1.0860 - acc: 0.3761 
- val_loss: 1.3119 - val_acc: 0.0000e+00
2848/3150 [==========================>...] - ETA: 0s
Test score: 1.10844093784
Test accuracy: 0.333333333333
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-11 17:10:31

我决定总结一下我们的“聊天”。

所以,如果你的测试准确率很低(大约在≈0.1%左右)怎么办,这里有一些一般性的建议:

  • 尝试不同的优化器,根据我的经验,Adam是一个很好的起点。
  • 尝试不同的激活函数;我建议你从"relu“开始,同时尝试"selu”和"elu“。
  • 增加了正则化。Dropout和BatchNormalization可能会提高测试的准确性。
  • 给你的网络一些时间,训练它更长的时间。
  • 使用超参数,如层数,批量大小,纪元数,学习率等等。
  • 最后,始终在将data馈送到NN之前对其进行标准化。
票数 10
EN

Stack Overflow用户

发布于 2019-10-02 02:48:57

因此,对我来说,我正在寻找一个指标来查看我的回归模型的表现,对我来说,使用R²作为主要指标效果最好。R²可以描述一个模型在预测方面有多“好”。正如@Paddy已经提到的,你需要给模型一些时间。在你的案例中至少有30个时代。那么现在什么时候:

R²=0意味着模型总是无法预测正确的目标变量R²=1意味着模型能够完美地预测目标变量。

在代码中,它将如下所示:

代码语言:javascript
复制
def det_coeff(y_true, y_pred):
u = K.sum(K.square(y_true - y_pred))
v = K.sum(K.square(y_true - K.mean(y_true)))
return K.ones_like(v) - (u / v)

这是用于确定度量的函数。

代码语言:javascript
复制
model.compile(optimizer="SGD", loss="mse", metrics=[det_coeff])
票数 1
EN

Stack Overflow用户

发布于 2021-04-22 12:34:41

我也遇到过类似的问题。请尝试打乱您的数据,这可以解决您的问题。

代码语言:javascript
复制
from sklearn.utils import shuffle
Xtrain, ytrain = shuffle(Xtrain, ytrain)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47216529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档