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

TensorFlow中model.fit()报ValueError:validation_split仅支持张量/NumPy数组

解决TensorFlow中validation_split的ValueError问题

问题重现

运行以下TensorFlow代码时,最后一行model.fit(x, y,batch_size=10,validation_split=0.1)触发报错:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense , Dropout, Activation, Flatten, Conv2D, MaxPooling2D
import pickle
x = pickle.load(open("x.pickle","rb"))
y = pickle.load(open("y.pickle","rb"))
x=x/255.0
model = Sequential()

model.add(   Conv2D(64, (3,3), input_shape = x.shape[1:])   )
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2))) 

model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2))) 
model.add(Flatten())
model.add(Dense(64))

model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss="categorical_crossentropy",
              optimizer="adam",
              metrics=['accuracy'])
model.fit(x, y,batch_size=10,validation_split=0.1)

报错信息:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_10844\1395261416.py in <module>
----> 1 model.fit(x, y,batch_size=10,validation_split=0.1)

~\anaconda3\lib\site-packages\keras\utils\traceback_utils.py in error_handler(*args, **kwargs)
     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

~\anaconda3\lib\site-packages\keras\engine\data_adapter.py in train_validation_split(arrays, validation_split)
   1662     unsplitable = [type(t) for t in flat_arrays if not _can_split(t)]
   1663     if unsplitable:
-&gt; 1664         raise ValueError(
   1665             "`validation_split` is only supported for Tensors or NumPy "
   1666             "arrays, found following types in the input: {}".format(unsplitable)

ValueError: `validation_split` is only supported for Tensors or NumPy arrays, found following types in the input: [<class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>, <class 'int'>]

问题原因

  1. 数据类型不兼容:从pickle加载的y是Python整数列表,而非NumPy数组或Tensor,validation_split仅支持处理NumPy数组/Tensor类型的输入,无法对Python列表自动拆分验证集。
  2. 损失函数不匹配:模型输出使用sigmoid激活(单节点二分类场景),但编译时指定了categorical_crossentropy损失函数,该函数适用于多分类的独热编码标签,二分类场景应使用binary_crossentropy。

解决方案

步骤1:将y转换为NumPy数组

导入numpy库,将加载后的y转为NumPy数组,确保validation_split可以正常处理。

步骤2:修正损失函数

将categorical_crossentropy替换为binary_crossentropy,匹配单节点sigmoid的二分类场景。

修改后的完整代码

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense , Dropout, Activation, Flatten, Conv2D, MaxPooling2D
import pickle
import numpy as np  # 新增导入numpy

x = pickle.load(open("x.pickle","rb"))
y = pickle.load(open("y.pickle","rb"))
y = np.array(y)  # 将y转为NumPy数组
x=x/255.0

model = Sequential()

model.add(Conv2D(64, (3,3), input_shape = x.shape[1:]))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2))) 

model.add(Conv2D(64, (3,3)))
model.add(Activation("relu"))
model.add(MaxPooling2D(pool_size=(2,2))) 
model.add(Flatten())
model.add(Dense(64))

model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss="binary_crossentropy",  # 修正损失函数
              optimizer="adam",
              metrics=['accuracy'])
model.fit(x, y,batch_size=10,validation_split=0.1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:10:35