Python中train_files和val_files未定义的NameError错误求助
解决NameError: 'train_files'和'val_files'未定义的问题
这个错误的核心是:代码执行到使用train_files和val_files的位置时,这两个变量还未被定义,或者定义的作用域无法被当前代码访问。以下是具体排查和解决步骤:
确保变量已提前定义
在使用这两个变量之前,必须添加代码对它们进行赋值,赋值方式取决于你的数据来源:# 示例1:从本地目录读取文件路径列表 import os # 训练集文件路径 train_dir = "./path/to/train/directory" train_files = [os.path.join(train_dir, fname) for fname in os.listdir(train_dir) if os.path.isfile(os.path.join(train_dir, fname))] # 验证集文件路径 val_dir = "./path/to/val/directory" val_files = [os.path.join(val_dir, fname) for fname in os.listdir(val_dir) if os.path.isfile(os.path.join(val_dir, fname))]如果你的数据来自CSV、数据库或其他数据集API,只需将对应逻辑替换即可,关键是让
train_files和val_files指向有效的文件路径列表。检查变量作用域
如果train_files和val_files是在某个函数内部定义的,外部代码无法直接访问。比如:def load_dataset(): # 函数内部定义的变量仅在函数内有效 train_files = [...] val_files = [...]解决方法是让函数返回这两个变量,在外部接收后再使用:
def load_dataset(): train_files = [...] val_files = [...] return train_files, val_files # 在使用前获取变量 train_files, val_files = load_dataset()核对变量拼写
Python是大小写敏感语言,确认使用的变量名和定义时完全一致,比如不要把train_files写成train_file或TrainFiles。
完成上述步骤后,再执行你提供的代码:
STEPS_PER_EPOCH = len(train_files)//BATCH_SIZE VAL_STEPS = len(val_files)//BATCH_SIZE history = model.fit_generator(generator = batch_generator(train_files, BATCH_SIZE), epochs = NUM_EPOCHS, steps_per_epoch = STEPS_PER_EPOCH, class_weight = cl_weight, # Check if providing class weight is useful validation_data = batch_generator(val_files, BATCH_SIZE), validation_steps = VAL_STEPS, callbacks = callbacks_list, )
即可避免NameError错误。
内容的提问来源于stack exchange,提问作者Isha Pathania
相关产品推荐
相关产品推荐

