损失函数和精度不会改变keras

损失函数和精度不会改变keras,keras,deep-learning,Keras,Deep Learning,我的Keras模型没有学到任何东西,我也不知道为什么。问题是,在训练期间,损失值和精度值不变。我尝试过提高学习速度,但没有效果,我也尝试过更换optmizers,但没有任何改进。 完整代码如下: import random import pandas as pd import tensorflow as tf from keras.utils import np_utils from keras.utils import to_categorical from sklearn.preproces

我的Keras模型没有学到任何东西,我也不知道为什么。问题是,在训练期间,损失值和精度值不变。我尝试过提高学习速度,但没有效果,我也尝试过更换optmizers,但没有任何改进。 完整代码如下:

import random
import pandas as pd
import tensorflow as tf
from keras.utils import np_utils
from keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder
from keras import backend as K
import glob, os
import keras
from keras.layers import BatchNormalization
from sklearn.preprocessing import StandardScaler
from keras.models import Sequential
from keras.layers import *

dataset = pd.read_csv('meta_sign_1-8_means.csv')


X = dataset.iloc[:,1:101].values
y = dataset.iloc[:,0].values

order = list(range(0,len(y)))
random.shuffle(order)

#print(order)

X = X[order,:]
y = y[order]

print(X[1,:])
#print(y[1:10])

encoder = LabelEncoder()
encoder.fit(y)
encoded_Y=encoder.transform(y)
y = np_utils.to_categorical(encoded_Y)
X = X.astype('float32')

model= Sequential()
model.add(Dense(units=90,input_shape = (100,)))
#model.add(LeakyReLU(alpha=0.05))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(units=100))
#model.add(LeakyReLU(alpha=0.1))
model.add(Activation('relu'))
model.add(Dropout(0.05))
model.add(Dense(402, activation='softmax'))
optm = keras.optimizers.Adam(learning_rate=0.001, beta_1=0.9, beta_2=0.999, amsgrad=False)
model.compile(optimizer=optm,loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(X,y,batch_size=512,nb_epoch=1000,verbose=1)
培训产出:

401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0024
Epoch 38/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0023
Epoch 39/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0024
Epoch 40/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0025
Epoch 41/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0023
Epoch 42/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0023
Epoch 43/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0024
Epoch 44/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0024
Epoch 45/1000
401999/401999 [==============================] - 1s 3us/step - loss: 5.9965 - accuracy: 0.0023
数据集可在以下位置获得: 非常感谢您的帮助!
事先谢谢你

当你在
model=Sequential()
的正上方插入那一行时,
打印(X.shape,y.shape)
给出了什么?@FrederikBode当我添加我得到的X和y的打印形状时:(40199100)(40199402)你代码中的逻辑对我来说很好,正确的丢失函数,没有超级奇怪的模型。如果可以的话,我想向你提出一些想法。我要尝试的第一件事是从
keras
切换到
tf.keras
,这是一样的,但都是
tensorflow
这很有意义。只从一个
tf.keras.layers.Dense
开始,因为精度至少应该改变(向上或向下不重要,应该先改变)。检查您的
LabelEncoder
是否按预期工作(即,它不会为所有内容输出相同的值)。更新我当你测试这些东西时,我会看看我能做什么。@FrederikBode我做了你推荐的,但没有成功。如您所见,我编辑了代码以使用
tf.keras
而不是
keras
,并且我只让一个密集层,损失值不会向上或向下变化,最后,我添加了一行以打印编码向量的值。日志看起来不错<代码>对于e in y:print(numpy.argmax(e,axis=None,out=None))我添加了一个日志,以显示每个历元开始时零层的权重。权重不会随时间变化,它们显示NAN值。