如何修复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()` ---> 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: -> 1319 raise ValueError("Expected input data to be non-empty.")
错误原因
核心问题是x_test为空数组:你的循环从range(60, len(test_data))开始执行,如果len(test_data) ≤ 60,循环不会运行,x_test始终是空列表,转成numpy数组后没有任何数据,模型自然无法进行预测。
解决步骤
确认test_data长度:在生成x_test前添加代码打印长度,验证数据量是否足够:
print("test_data长度:", len(test_data))若输出结果≤60,即可确认是数据长度不足导致的问题。
调整窗口大小:把循环中的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])检查数据集分割逻辑:确认
training_data_len的计算是否合理,是否将绝大多数数据划给了训练集,导致测试集剩余数据过少。可以调整训练集与测试集的分割比例(比如8:2),保证测试集有足够的数据量。
内容的提问来源于stack exchange,提问作者leone
相关产品推荐
相关产品推荐

