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

JupyterLab中训练TensorFlow回归模型触发RuntimeError:tf.data.Dataset仅支持在eager模式或tf.function内进行Python式迭代,求修复方案

JupyterLab中训练TensorFlow回归模型触发RuntimeError:tf.data.Dataset仅支持在eager模式或tf.function内进行Python式迭代,求修复方案

嗨,看了你的问题和代码,我发现你踩了两个关键小坑,才触发了这个RuntimeError,咱们一步步来修复:


第一个坑:特征数据处理+变量名错误

你的原始特征df_total_x_data是3列(lamda, eps, c)的多维数据,但你用reshape(-1, 1)把它硬生生压成了单维度,这不仅浪费了另外两个特征的信息,还会导致后续模型输入形状不匹配。而且你后面拆分数据集时用的是x_data,但定义的变量是X_data,大小写不一致也会导致数据异常。

修复方案:
去掉多余的reshape,保留原数据的3列形状,同时修正变量名:

# 保留3列特征的原始形状,不需要reshape
X_data = df_total_x_data.values
y_data = df_sen_final.values

# 修正变量名,和上面的X_data保持一致,避免数据错误
x_train, x_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, random_state=42)

第二个坑:模型输入形状和特征不匹配

你定义的模型输入形状是input_shape=(1,),但实际特征是3列,输入维度应该是3。这种形状不兼容会让TensorFlow在处理数据集迭代时抛出那个RuntimeError。

修复方案:
把模型的输入形状改成特征的维度数(也就是3):

model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(3,))])

额外的验证小技巧

如果修改后还是有问题,可以检查一下数据类型,TensorFlow对float32类型的数据兼容性更好,你可以加一行类型转换:

X_data = df_total_x_data.values.astype('float32')
y_data = df_sen_final.values.astype('float32')

完整修正后的代码

import tensorflow as tf
from sklearn.model_selection import train_test_split
import pandas as pd

# 假设df_total_x_data和df_sen_final是你已经加载好的DataFrame
X_data = df_total_x_data.values.astype('float32')  # 保留3列特征,转为float32类型
y_data = df_sen_final.values.astype('float32')

# 拆分训练集和测试集,修正变量名
x_train, x_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, random_state=42)

# 定义模型,输入形状匹配3个特征
model = tf.keras.Sequential([tf.keras.layers.Dense(1, input_shape=(3,))])
model.compile(optimizer='adam', loss='mean_squared_error')

# 启动训练
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

备注:内容来源于stack exchange,提问作者Earth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 10:48:13