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

同一代码在Jupyter Notebook拆分单元格后无法正常运行的问题

Jupyter Notebook拆分单元格后TensorFlow预测结果为空的原因分析

问题场景

将以下代码放在单个Jupyter单元格内运行时,能正常输出TensorFlow日志和符合预期的pandas Series结果:

train_predictions = linear_model.predict(train_feed_input_testing) 
test_predictions = linear_model.predict(test_feed_input) 
train_predictions_series = pd.Series([p['predictions'][0] for p in train_predictions]) 
test_predictions_series = pd.Series([p['predictions'][0] for p in test_predictions])

train_predictions_series, test_predictions_series

但将代码拆分到多个独立单元格后,单独执行train_predictions_series = pd.Series([p['predictions'][0] for p in train_predictions])并查看该对象时,得到的是空Series:

Series([], dtype: float64)

核心原因

这是因为TensorFlow的predict()方法返回的是一次性迭代的生成器/数据流对象:

  • 在同一单元格内运行时,train_predictions会被直接用于后续的列表推导,一次性完成迭代并转换为Series,数据没有被提前消耗。
  • 拆分单元格后,第一次运行train_predictions = linear_model.predict(...)时,Jupyter的自动变量展示机制会隐式遍历这个生成器对象(比如在单元格输出里显示其内容),导致生成器被耗尽。后续再执行列表推导时,已经没有数据可以遍历,最终生成空Series。
  • 另外,当输入的train_feed_input_testing是tf.data.Dataset这类数据流时,predict()返回的结果本身就是只能迭代一次的对象,无法重复读取。

解决办法

  • 提前将预测结果转换为持久化的列表,确保数据存在内存中可重复使用:
    train_predictions = list(linear_model.predict(train_feed_input_testing))
    test_predictions = list(linear_model.predict(test_feed_input))
    
    转换为列表后,无论拆分多少单元格,重复迭代都不会出现空数据的情况。
  • 如需查看train_predictions的内容,避免直接输出变量(会触发全量遍历),可以只查看前几个元素:
    print(train_predictions[:5])
    

内容的提问来源于stack exchange,提问作者SREE SHARON SIVAKUMAR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:25:24