培训和测试准确性相同

时间:2018-06-19 09:02:59

标签: python machine-learning neural-network keras deep-learning

我正在构建一个将数据分类为7的模型。

输入包括从GIS数据集中提取的7个波段。我正在拍摄一个乐队的一个像素,然后使用监督分类方法训练我的神经网络。

有两个问题:

  • 第一个是我的训练准确度在每个时期都相同

  • 第二个训练和测试精度在每个时期都相同。

我尝试过更改各种模型,优化器和激活功能。

代码

from keras.layers import Dense,Input,Dropout
from keras.models import Model
from keras.models import load_model
from keras.optimizers import Adam
from sklearn.utils import shuffle

import numpy as np
from matplotlib import pyplot as plt
import scipy.io as sci
import time

mat=sci.loadmat('landsat/dataset_beta.mat')
X1=mat.get('x')
Y1=mat.get('y')
X1, Y1 = shuffle(X1, Y1)

m=int(85*X1.shape[0]/100)
bands=7
print(m)

X_train=X1[0:m,0:bands]
Y_train=Y1[0:m]
X_test=X1[m:X1.shape[0],0:bands]
Y_test=Y1[m:X1.shape[0]]


print('Total training examples: '+str(X_train.shape[0]))
print('Total test examples: '+str(X_test.shape[0]))
print('X_train dimensions: '+str(X_train.shape))
print('Y_train dimensions: '+str(Y_train.shape))
print('X_test dimensions: '+str(X_test.shape))
print('Y_test dimensions: '+str(Y_test.shape))

inp=Input(shape=(bands,))
layer=Dense(11,activation='sigmoid')(inp)
#layer=Dropout(0.2)(layer)
layer=Dense(22,activation='sigmoid')(layer)
layer=Dense(33,activation='sigmoid')(layer)
layer=Dense(44,activation='sigmoid')(layer)
layer=Dense(55,activation='sigmoid')(layer)
layer=Dense(66,activation='sigmoid')(layer)
layer=Dense(77,activation='sigmoid')(layer)
layer=Dense(88,activation='sigmoid')(layer)
layer=Dense(99,activation='sigmoid')(layer)
layer=Dense(110,activation='sigmoid')(layer)
layer=Dense(110,activation='sigmoid')(layer)
layer=Dense(99,activation='sigmoid')(layer)
layer=Dense(88,activation='sigmoid')(layer)
layer=Dense(77,activation='sigmoid')(layer)
layer=Dense(66,activation='sigmoid')(layer)
layer=Dense(55,activation='sigmoid')(layer)
layer=Dense(44,activation='sigmoid')(layer)
layer=Dense(33,activation='sigmoid')(layer)
layer=Dense(22,activation='sigmoid')(layer)
layer=Dense(11,activation='sigmoid')(layer)
layer=Dense(7,activation='softmax')(layer)
model=Model(inputs=inp,outputs=layer)

model.compile('RMSprop','binary_crossentropy',metrics=['accuracy'])

history=model.fit(X_train,Y_train,epochs=50,steps_per_epoch=20,validation_data=(X_test,Y_test),validation_steps=1)

3 个答案:

答案 0 :(得分:0)

您的模型非常深入,没有批量规范化或其他深度学习技术来处理深度网络。

从层数较少的模型开始,检查代码是否有效。然后,您可以尝试更深入的模型。

答案 1 :(得分:0)

问题: 您网络的问题是深度。主要问题可能是消失的梯度下降。 (https://en.wikipedia.org/wiki/Vanishing_gradient_problem

选择深度模型之前要记住的事情。
1.为什么不采用传统的机器学习模型?
2.您是否有足够的数据来训练深度模型?如果不能,您可以进行转学吗?
3.是否有接受过类似任务训练的模型?

当我开始学习深度学习时,我曾经尝试过更多的隐藏层。但是大多数模型没有收敛。对我来说,最好的方法是实现众所周知的模型(vgg)并尝试使用超参数。
另外Keras有很多预训练的模型,您可以微调预训练的模型。

答案 2 :(得分:0)

如Daniel所说,使用常见的DL技术(例如批标准化)是一个好习惯。这些将有助于您的数据集并因此进行培训。例如,前面提到的批量归一化有助于使数据集更加“简单”。

我在我编写的初学者深度学习指南中介绍了这些不同的深度学习模型技术(批处理规范,数据重组,辍学等),您可以查看here

祝您好运,如果您有任何疑问,请告诉我!