You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复model.predict报错ValueError: Expected input data to be non-empty?

解决ValueError: Expected input data to be non-empty错误

问题代码

生成测试集的代码:

x_test = []
y_test = dataset[training_data_len:, :]
for i in range (60,len(test_data)):
    x_test.append(test_data[i - 60 :i, 0])

x_test = np.array(x_test)
x_test = np.reshape(x_test , (x_test.shape[0] ,x_test.shape[1],1))

执行预测时触发错误:

predictions = model.predict(x_test)
predictions = scaler.inverse_transform(predictions)

错误信息

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[26], line 1
----> 1 predictions = model.predict(x_test)
      2 predictions = scaler.inverse_transform(predictions)

File c:\Users\hemic\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\utils\traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs)
     67     filtered_tb = _process_traceback_frames(e.__traceback__)
     68     # To get the full stack trace, call:
     69     # `tf.debugging.disable_traceback_filtering()`
---&gt; 70     raise e.with_traceback(filtered_tb) from None
     71 finally:
     72     del filtered_tb

File c:\Users\hemic\AppData\Local\Programs\Python\Python311\Lib\site-packages\keras\src\engine\data_adapter.py:1319, in DataHandler.__init__(self, x, y, sample_weight, batch_size, steps_per_epoch, initial_epoch, epochs, shuffle, class_weight, max_queue_size, workers, use_multiprocessing, model, steps_per_execution, distribute, pss_evaluation_shards)
   1314 self._configure_dataset_and_inferred_steps(
   1315     strategy, x, steps_per_epoch, class_weight, distribute
   1316 )
   1318 if self._inferred_steps == 0:
-&gt; 1319     raise ValueError("Expected input data to be non-empty.")

错误原因

核心问题是x_test为空数组:你的循环从range(60, len(test_data))开始执行,如果len(test_data) ≤ 60,循环不会运行,x_test始终是空列表,转成numpy数组后没有任何数据,模型自然无法进行预测。

解决步骤

  1. 确认test_data长度:在生成x_test前添加代码打印长度,验证数据量是否足够:

    print("test_data长度:", len(test_data))
    

    若输出结果≤60,即可确认是数据长度不足导致的问题。

  2. 调整窗口大小:把循环中的60改为更小的数值,只要保证len(test_data) > 窗口大小即可,示例:

    window_size = 30  # 根据test_data实际长度调整
    for i in range(window_size, len(test_data)):
        x_test.append(test_data[i - window_size :i, 0])
    
  3. 检查数据集分割逻辑:确认training_data_len的计算是否合理,是否将绝大多数数据划给了训练集,导致测试集剩余数据过少。可以调整训练集与测试集的分割比例(比如8:2),保证测试集有足够的数据量。

内容的提问来源于stack exchange,提问作者leone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:46:23