【问题标题】:keras how to feed an input variable with the output of my modelkeras 如何用我的模型的输出来提供输入变量
【发布时间】:2020-07-03 19:47:22
【问题描述】:

我在这个问题上转了几年,我想使用预测 t+0 作为我的输入之一来预测 t+1。 我发现的只是一次运行我的模型,然后手动将我的最后一个预测插入到下一步运行的输入中......效率不高且无法训练。

我使用带有张量流的 keras。感谢您的帮助!

【问题讨论】:

    标签: tensorflow keras keras-layer tf.keras


    【解决方案1】:

    我建议你ChainRegressor/Classifier from sklearn。当您指定此模型时,使用先前的预测作为新拟合的特征在每个步骤中迭代拟合。这是回归任务中的一个示例

    import numpy as np
    import tensorflow as tf
    from tensorflow.keras.layers import *
    from tensorflow.keras.models import *
    from sklearn.multioutput import RegressorChain
    
    n_sample = 1000
    input_size = 20
    
    X = np.random.uniform(0,1, (n_sample,input_size))
    y = np.random.uniform(0,1, (n_sample,3)) <=== 3 step forecast
    
    def create_model():
        
        global input_size
        
        model = Sequential([
            Dense(32, activation='relu', input_shape=(input_size,)),
            Dense(1)
        ])
    
        model.compile(optimizer='Adam', loss='mse')
        input_size += 1 # <== important 
        # increase the input dimension and include the previous predictions in each iteration
        
        return model
    
    model = tf.keras.wrappers.scikit_learn.KerasRegressor(build_fn=create_model, epochs=1, 
                                                           batch_size=256, verbose = 1)
    chain = RegressorChain(model, order='random', random_state=42)
    chain.fit(X, y)
    
    chain.predict(X).shape
    

    【讨论】:

    • 如果我使用lstm seq of 5 last time step input,它也可以管理最后5个预测时间步吗?
    • 您可以根据自己的需要进行管理和自定义
    • 我对 sklearn 不熟悉,我在实现时遇到了一些困难,我的代码/模型有点复杂....但是您的解决方案看起来很棒,谢谢!
    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 2020-05-28
    • 2021-06-18
    • 1970-01-01
    相关资源
    最近更新 更多