非常低的误差,但keras RNN的精度低

时间:2017-09-06 16:42:46

标签: model neural-network loss rnn

更多的理论问题比什么都重要。如果我在二进制分类中的交叉熵损失接近于零,其中最后一层是softmax而输入层是LSTM,那么在列车集上精度是否达到54%是否有意义?我会假设它会过度拟合数据,如果我有这么低的损失,那么我会有一个非常高度精确的过度拟合功能。

我也尝试过不同的学习率,0.01,0.001,0.0001都具有完全相同的结果。我还在第一个LSTM下添加了第二个LSTM层,以增加模型的复杂性,以便有目的地过度拟合模型,但这也没有做任何事情。

我错过了什么理论概念?

model.add(LSTM(64, input_shape=(100000,26), return_sequences = True, activation = 'relu'))
model.add(Dropout(0.3))
model.add(LSTM(32, return_sequences = True, activation = 'relu'))
model.add(Dense(2))
model.add(Activation('softmax'))
opt1 = keras.optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss='categorical_crossentropy', optimizer=opt1, metrics=['accuracy'])

filepath="model_check-{epoch:02d}-{loss:.4f}.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='loss', verbose=1, 
                             save_best_only=True, mode='min')
callbacks_list = [checkpoint]

model.fit(df_matrix2, y_matrix2, epochs=5, batch_size=2, verbose=2)

并在开始时设置矩阵。因为我之前正在测试其他东西,所以有一些重叠。

df_matrix = df_model.as_matrix()
df_matrix = np.reshape(df_matrix,(-1,588425,26))
y_matrix = y.as_matrix()
y_matrix = np.reshape(y_matrix,(-1,588425,1))
df_matrix2 = df_matrix[:,0:100000,:]
df_matrix2 = np.reshape(df_matrix2, (-1,100000,26))
y_matrix2 = y_matrix[:,0:100000,:]
y_matrix2 = np.reshape(y_matrix2,(-1,100000,1))
y_matrix2 = keras.utils.np_utils.to_categorical(y_matrix2,2)
y_matrix2 = np.reshape(y_matrix2,(-1,100000,2))

这是库存数据,但我创建了一个分类器,因此根据它是否在60分钟内更高或更低,它只是一个0或1。所以开始时有很多随机性。我只是假设LSTM会过度配合而且我会获得高精度。

Epoch 1/5
194s - loss: 0.0571 - acc: 0.5436
Epoch 2/5
193s - loss: 1.1921e-07 - acc: 0.5440
Epoch 3/5
192s - loss: 1.1921e-07 - acc: 0.5440
Epoch 4/5

这些是我的损失和准确性。

1 个答案:

答案 0 :(得分:0)

请注意,50%意味着没有准确性,因为它与抛硬币一样好。一般来说,当你有54%的准确率时,这意味着它是完全随机的。通过神经网络很难看到“抛硬币”随机性,这就是4%来自的地方。至少在Keras中使用Tensorflow后端进行二进制预测就像这样。

获得此结果清楚地表明您的模型无法正常工作。其中一个常见原因是您的功能(因变量或结果变量)。如果您发布模型,用于转换数据的代码和数据头,人们会更容易为您提供帮助。