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

FileNotFoundError与样本数不匹配ValueError问题求助

解决Python图像处理中的路径错误与样本数不一致问题

咱们一步步拆解你的问题,这两个报错确实是关联的,先从最开始的FileNotFoundError说起:

一、第一个问题:FileNotFoundError 根源与修复

你最初的代码里,有几个明显的问题导致了路径错误:

  • 大小写敏感坑:你定义的是大写的Path = r'D:\ncfm\train',但循环里却用了小写的path——Python对变量名大小写是严格区分的,这直接导致程序用了当前工作目录(比如你报错里的Users\\USER\\Desktop\\...),而不是你指定的D盘路径。
  • 路径拼接不规范:直接用+ '/' +拼接路径在Windows系统下很容易出问题,应该用os.path.join()来做跨系统安全拼接,它会自动处理不同系统的路径分隔符。
  • 乱改原数组导致逻辑混乱:你在循环里把folder[i+1]赋值成了图像数组,这直接覆盖了原来的文件夹名称,后续循环肯定会出错。
  • os.listdir用法错误:os.listdir只能接收目录路径,不能带*.jpg这种通配符,它会把整个字符串当成路径来解析,这就是你报错里出现怪异路径...*.jpg/test images的原因。

修复后的代码应该是这样的(还补了你漏导入的numpy):

import os
import cv2
import numpy as np

# 单独存文件夹名称,别和图像数据混在一起
folder_names = ['test images', 'ALB', 'BET', 'DOL', 'LAG', 'NoF', 'OTHER', 'SHARK', 'YFT']
base_path = r'D:\ncfm\train'
# 用新数组存每个文件夹的图像数据
image_datasets = []

for folder in folder_names:
    # 安全拼接路径
    folder_path = os.path.join(base_path, folder)
    # 先检查路径是否存在,避免直接报错
    if not os.path.exists(folder_path):
        print(f"警告:路径不存在 -> {folder_path}")
        image_datasets.append(np.array([]))
        continue
    # 只筛选jpg文件,过滤掉非图像文件
    jpg_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.jpg')]
    # 读取并扁平化图像
    folder_images = np.array([cv2.imread(os.path.join(folder_path, f)).flatten() for f in jpg_files])
    image_datasets.append(folder_images)

二、第二个问题:ValueError 样本数不一致的修复

你后来改的代码里,有两个致命错误直接导致了样本数不匹配:

  • 路径拼接漏逗号:os.path.join('Users', 'USER' , 'Desktop','ncfm' 'train', fld, '*.jpg')里的'ncfm' 'train'没加逗号,Python会自动把这两个字符串拼成'ncfmtrain',这和你实际的文件夹结构完全不符。
  • 错误统计样本数:你用L.append(len(path)),这里的len(path)是路径字符串的长度,根本不是文件夹里的图像数量!这就导致你统计的“样本数”完全是错的,和实际读取的图像数量自然对不上,后续模型训练就会报样本数不一致的错误。

要正确统计每个文件夹的样本数,应该这么写:

import os

folders = ['test images', 'ALB', 'BET', 'DOL', 'LAG', 'NoF', 'OTHER', 'SHARK', 'YFT']
# 修正路径拼接的逗号问题
base_path = os.path.join('Users', 'USER' , 'Desktop','ncfm', 'train')
sample_counts = []

for fld in folders:
    folder_path = os.path.join(base_path, fld)
    if not os.path.exists(folder_path):
        print(f"警告:路径不存在 -> {folder_path}")
        sample_counts.append(0)
        continue
    # 统计真实的jpg文件数量
    jpg_count = len([f for f in os.listdir(folder_path) if f.lower().endswith('.jpg')])
    sample_counts.append(jpg_count)
    print(f"加载文件夹 {fld} (索引: {folders.index(fld)}),样本数: {jpg_count}")

# 后续用sample_counts的时候,要和你的特征数组长度对应上

三、两个问题的关联

第一个问题的路径错误,会导致你要么读不到图像,要么只读到部分文件夹的图像;第二个问题里错误统计样本数(用路径长度凑数),会让你误以为样本数是某个数值,但实际特征数组的样本数是真实的图像数量,两者完全不匹配,就会触发Found input variables with inconsistent numbers of samples的错误。

只要按照上面的方法修复路径问题,正确统计样本数,后续的模型输入就不会出现样本数不一致的情况了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:45:33