【发布时间】:2022-08-24 03:07:08
【问题描述】:
我想在财务数据上使用 LSTM 或 CNN 检测分形。分形是高于或低于两个过去和先前价格的价格。我已经生成了我的时间序列和标签。标签确定时间序列样本之一中的点是否为分形。 每个时间序列样本都是 50 个价格的窗口。 我的 X_train 的形状等于 (3780, 50, 1) -> (sample, timeseries loopback, feat)。 Y_train 的形状等于 (3780, 50) 没有 OneHotEncoding。对于 OHE,它应该类似于 (3780, 50, 2)。
我知道如何在整个时间序列(窗口)上应用二进制分类,但我不能对我的时间序列(窗口)上的所有点都这样做。
这是我迄今为止实施的:
maximum_epochs = 1000
learning_rate_epochs = 20
model = Sequential()
model.add(LSTM(100, input_shape=(X_train.shape[1],1), return_sequences=False, activation=\'tanh\'))
model.add(Dropout(0.15))
model.add(Dense(80, activation=\'tanh\'))
model.add(Dropout(0.15))
model.add(Dense(60, activation=\'tanh\'))
model.add(Dropout(0.15))
model.add(Dense(50, activation=\'softmax\'))
model.compile(loss=\'binary_crossentropy\',optimizer=\'adam\', metrics=[\'accuracy\'])
fn = \"model/weights.ckpt\"
# callbacks for early stopping and for learning rate reducer
callbacks_list = [
#KerasPruningCallback(trial, \'val_loss\'),
# tf.keras.callbacks.EarlyStopping(monitor=\'val_loss\', patience=5),
tf.keras.callbacks.ReduceLROnPlateau(monitor=\'loss\', factor=0.9,
patience=learning_rate_epochs,
verbose=0, mode=\'min\', min_lr=0.0000001),
tf.keras.callbacks.ModelCheckpoint(filepath=fn, save_weights_only=True,
monitor=\'val_loss\',mode=\'min\', save_best_only=True)]
model.summary()
但是模型无法学习,并且在准确性或损失上没有任何改善。
任何帮助,将不胜感激。谢谢。
完整源代码: https://gitlab.com/Sorooshmoghimi/intel_fractal_detectoin
分形:
标签: python tensorflow keras conv-neural-network lstm