【问题标题】:multi binary classification using tf.keras on timeseries在时间序列上使用 tf.keras 进行多二进制分类
【发布时间】: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


    【解决方案1】:

    您正在尝试解决二进制分类问题;所以输出是二进制的,但你已经定义了 50 个单位的输出层;唯一的事情是将输出层中的单元从 50 更改为 1,并将其激活为 sigmoid。

    【讨论】:

      最近更新 更多