0

更多的是一个理论问题。如果我在最后一层是 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))

这是股票数据,但我创建了一个分类器,所以它只是一个 0 或 1,基于它在 60 分钟内是更高还是更低。所以一开始就有很多随机性。我只是假设 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

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

4

1 回答 1

0

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

获得此结果清楚地表明您的模型无法正常工作。造成这种情况的常见原因之一是您的特征(因变量或结果变量)。如果您发布模型、用于转换数据的代码和数据负责人,人们会更容易帮助您。

于 2017-09-06T17:06:39.517 回答