我已经有一个适合data[0:100]
使用python 的时间序列数据(例如ex )的ARIMA(p,d,q)模型。我想forecast[100:120]
使用此模型进行预测()。但是,考虑到我也拥有未来的真实数据(例如:)data[100:120]
,如何确保多步预测将我拥有的未来的真实数据考虑在内,而不是使用其预测的数据?
本质上,当进行预测时,我希望forecast[101]
使用data[100]
代替进行计算forecast[100]
。
我想避免在每个时间步都用更新的“历史记录”重新拟合整个ARIMA模型。
我适合ARIMAX模型,如下所示:
train, test = data[:100], data[100:]
ext_train, ext_test = external[:100], external[100:]
model = ARIMA(train, order=(p, d, q), exog=ext_train)
model_fit = model.fit(displ=False)
Run Code Online (Sandbox Code Playgroud)
现在,以下代码使我可以预测整个数据集(包括测试)的值
forecast = model_fit.predict(end=len(data)-1, exog=external, dynamic=False)
Run Code Online (Sandbox Code Playgroud)
但是,在这种情况下,经过100步后,ARIMAX预测值会迅速收敛到长期平均值(如预期的那样,因为经过100步后,它仅使用预测值)。我想知道是否有办法提供“未来”的真实价值,以提供更好的在线预测。类似于以下内容:
forecast = model_fit.predict_fn(end = len(data)-1, exog=external, true=data, dynamic=False)
Run Code Online (Sandbox Code Playgroud)
我知道我总是可以通过以下方式不断调整ARIMAX模型
historical = train
historical_ext = ext_train
predictions = []
for t in range(len(test)):
model = ARIMA(historical, order=(p,d,q), exog=historical_ext)
model_fit = model.fit(disp=False)
output = model_fit.forecast(exog=ext_test[t])[0]
predictions.append(output)
observed …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Jetson Nano 在管道中运行两个推理。第一个推论是使用 MobileNet 和 TensorRT 进行对象检测。我的第一个推理的代码几乎是从AastaNV/TRT_Obj_Detection存储库复制的。唯一的区别是我更改了该代码,使其驻留在 Inference1 类中。
第二个推理作业使用第一个推理的输出来运行进一步分析。对于这个推论,我使用tensorflow(不是TensorRT,但我假设它是在后端调用的?)使用自定义模型。该模型是从.pb
文件(冻结图)加载的。加载后,通过调用tensorflow的命令进行推理session.run()
。
如果我仅运行 Inference1 或 ONLY Inference2,则代码运行正常,没有任何错误。但是,当我通过管道传输它们时,出现错误[TensorRT] ERROR: cuda/caskConvolutionLayer.cpp (355) - Cuda Error in execute: 33 (invalid resource handle)
从我在日志中看到的情况来看,TensorRT 序列化图的加载没有任何问题。Tensorflow 也被导入并且它可以识别我的 GPU。从网上搜索我发现这个问题可能与CUDA Contexts有关?因此,我在下面展示了如何在下面的代码中设置 CUDA 上下文。create_cuda_context
仅在 Inference1 类初始化期间调用一次。称为run_inference_for_single_image
每次迭代。
代码:
def create_cuda_context(self):
self.host_inputs, self.host_outputs = [], []
self.cuda_inputs, self.cuda_outputs = [], []
self.bindings = []
self.stream = cuda.Stream()
for binding in self.engine:
size = trt.volume(self.engine.get_binding_shape(binding)) * self.engine.max_batch_size
host_mem = cuda.pagelocked_empty(size, np.float32) …
Run Code Online (Sandbox Code Playgroud)