Keras/TensorFlow报错ValueError: None values not supported求助
问题定位与解决
根因分析
报错ValueError: None values not supported的核心原因是:你的训练数据集仅包含输入数据,没有提供标签(target)。当调用model.fit()时,Keras无法获取y_true(真实标签),导致其传入损失函数的值为None,而底层的optree库无法处理None类型的张量。
你的损失函数虽然定义为接收y_true和y_pred参数,但实际并未使用y_true,但Keras仍然要求训练数据必须包含输入和标签对(或明确告知无需标签,但这种场景极少)。
解决方案
修改数据集,使其同时返回输入和标签(如果是测试场景,可以用输入数据本身作为 dummy 标签;如果是真实任务,替换为你的实际标签数据)。
修正后的代码
from tensorflow.keras import layers, Model, Input from tensorflow.keras.models import Sequential import pandas as pd import numpy as np import tensorflow as tf input_data = pd.DataFrame(np.random.rand(1000, 10)) # 创建包含输入的数据集 data = tf.data.Dataset.zip({'input_values' : tf.data.Dataset.from_tensor_slices(input_data.values)}) # 关键修改:添加标签(此处用输入数据本身作为dummy标签,实际任务替换为真实标签) data = data.map(lambda x: (x, x['input_values'])) batch_size = 100 train_split = 0.8 train_rows = int(train_split * input_data.shape[0]) train_dataset = data.take(train_rows) validation_dataset = data.skip(train_rows) train_data_batched = train_dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE) validation_data_batched = validation_dataset.batch(batch_size).prefetch(tf.data.AUTOTUNE) num_outputs = 10 input_layer = Input(shape=(num_outputs,), name=f'input_values') output = layers.Dense(num_outputs, activation='sigmoid', name='output')(input_layer) # Define the model model = Model( inputs=[input_layer], outputs=output, ) max_epochs = 10 def loss(y_true, y_pred): return 2.0 model.compile( loss=loss, optimizer='adam', ) history = model.fit( train_data_batched, epochs=max_epochs, validation_data=validation_data_batched )
说明
- 通过
data.map(lambda x: (x, x['input_values']))将每个数据元素转换为(输入字典, 标签张量)的形式,确保Keras能获取到有效的y_true。 - 如果是真实监督学习任务,只需将
x['input_values']替换为你的实际标签数据即可(需保证标签形状与模型输出形状匹配)。
内容的提问来源于stack exchange,提问作者quant
相关产品推荐
相关产品推荐

