gpt4 book ai didi

python - LSTM Keras 网络的恒定输出和预测语法

转载 作者:行者123 更新时间:2023-12-03 09:40:09 24 4
gpt4 key购买 nike

我是神经网络的新手,有两个可能非常基本的问题。我正在建立一个通用的 LSTM 网络来预测序列的 future ,基于多个特征。
因此,我的训练数据具有以下形状(训练序列的数量、每个序列的长度、每个时间步的特征量)。
或者更具体一些,比如 (2000, 10, 3)。
我试图预测一个特征的值(value),而不是所有三个特征的值(value)。

  • 问题:

  • 如果我让我的网络更深和/或更宽,我得到的唯一输出是要预测的值的常数平均值。以这个设置为例:
    z0 = Input(shape=[None, len(dataset[0])])

    z = LSTM(32, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z0)
    z = LSTM(32, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z)
    z = LSTM(64, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z)
    z = LSTM(64, return_sequences=True, activation='softsign', recurrent_activation='softsign')(z)
    z = LSTM(128, activation='softsign', recurrent_activation='softsign')(z)

    z = Dense(1)(z)
    model = Model(inputs=z0, outputs=z)
    print(model.summary())

    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])

    history= model.fit(trainX, trainY,validation_split=0.1, epochs=200, batch_size=32,
    callbacks=[ReduceLROnPlateau(factor=0.67, patience=3, verbose=1, min_lr=1E-5),
    EarlyStopping(patience=50, verbose=1)])

    This is what results from a network like that. Note: These are predictions from the input used for training

    如果我只使用一层,例如:
    z0 = Input(shape=[None, len(dataset[0])])

    z = LSTM(4, activation='soft sign', recurrent_activation='softsign')(z0)

    z = Dense(1)(z)
    model = Model(inputs=z0, outputs=z)
    print(model.summary())

    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
    history= model.fit(trainX, trainY,validation_split=0.1, epochs=200, batch_size=32,
    callbacks=[ReduceLROnPlateau(factor=0.67, patience=3, verbose=1, min_lr=1E-5),
    EarlyStopping(patience=200, verbose=1)])

    这些预测有些合理,至少它们不再是恒定的。

    为什么会这样?大约 2000 个样本并不多,但在过度拟合的情况下,我希望预测能够完美匹配......
  • 编辑:解决了,正如评论中所述,只是 Keras 总是期望批次:Keras

  • 当我使用:
    `test=model.predict(trainX[0])`

    为了得到第一个序列的预测,我得到一个维度错误:

    "Error when checking : expected input_1 to have 3 dimensions, but got array with shape (3, 3)"



    我需要输入一系列序列,例如:
    `test=model.predict(trainX[0:1])`

    这是一种解决方法,但我不确定这是否有更深层次的含义,或者只是一个语法问题......

    最佳答案

    这是因为您尚未标准化输入数据。
    任何神经网络模型最初都会将权重归一化到零附近。由于您的训练数据集具有所有正值,因此模型将尝试调整其权重以仅预测正值。但是,激活函数(在您的情况下为 softsign)会将其映射到 1。因此该模型除了添加偏差之外什么也做不了。这就是为什么你在数据集的平均值周围得到一条几乎恒定的线。
    为此,您可以使用像 sklearn 这样的通用工具。预处理您的数据。如果您使用的是 Pandas 数据框,这样的事情会有所帮助

    data_df = (data_df - data_df.mean()) / data_df.std()
    或者要在模型中有参数,可以考虑添加 batch normalization图层到您的模型

    关于python - LSTM Keras 网络的恒定输出和预测语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46512157/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com