更多的是一个理论问题。如果我在最后一层是 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
这些是我的损失和准确性。