tensorflow猫狗大战笔记
第一步:数据集的加工
import cv2
import os #使用os.walk()函数遍历指定文件夹train及其所有子文件夹。
dir='train' #读取图片路径的设定 需要在程序文件里建立train文件夹 将需要更改尺寸的图片放入
for root,dirs,files in os.walk(dir): #for root, dirs, files in os.walk(dir):这行代码用于遍历指定文件夹dir及其所有子文件夹。在每次迭代中,root变量将保存当前遍历的文件夹路径,dirs变量将保存root下所有子文件夹的列表,files变量将保存root下所有文件的列表。
for file in files: #for file in files:这行代码用于遍历当前文件夹下的所有文件。在每次迭代中,file变量将保存当前遍历到的文件名。
filepath=os.path.join(root,file) #filepath = os.path.join(root, file)这行代码用于将当前遍历到的文件名file和文件夹路径root连接起来,生成完整的文件路径filepath。
try: #try是 Python 中的异常处理机制,用于捕获可能发生异常的代码块。通过使用try和except,可以在发生异常时进行适当的处理,避免程序崩溃并提供错误处理的机制。
image=cv2.imread(filepath)
dim=(227,227)
resized=cv2.resize(image,dim)
path='dogs_vs_cats/'+file #path = 'dogs_vs_cats/' + file是将文件名file与'dogs_vs_cats/'这个文件夹路径拼接起来,形成完整的文件路径path。 需要先在程序文件夹下新建一个dogs_vs_cats的文件夹 用于保存尺寸处理后的图片
cv2.imwrite(path,resized) #这行代码将经过调整大小的图像resized保存到指定路径path对应的文件中。
except: #except:这行代码表示如果在try代码块中发生了异常,那么接下来的代码块将会被执行。
print(filepath) #print(filepath)会在出现异常时打印出文件路径的值,方便调试和定位错误。
os.remove(filepath) #将会删除指定路径filepath所对应的文件。
cv2.waitKey(0)


import os
import numpy as np #将导入 NumPy 库,并将它的命名空间重命名为 np。这样,在后续的代码中,你可以通过 np 来访问和使用 NumPy 中的函数和功能。
import tensorflow as tf
import cv2
file_dir='dogs_vs_cats'
def get_file(file_dir): #该函数接受一个参数 file_dir,表示文件目录。这个函数似乎用于获取指定目录下的文件列表。
images=[] #images 列表用于存储所有文件的路径或文件名
temp=[] #temp 列表可能用于临时存储文件路径或文件名的容器
for root,sub_folders,files in os.walk(file_dir): #通过使用 os.walk(file_dir),你可以遍历指定目录 file_dir 下的所有文件和子文件夹。
'''
os.walk(path)---返回的是一个三元组(root,dirs,files):
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
'''
for name in files: #将文件的路径添加到了 images 列表中
images.append(os.path.join(root,name)) #images 列表中存储了所有文件的路径
for name in sub_folders: #将子文件夹的路径添加到了 temp 列表中
temp.append(os.path.join(root,name)) #temp 列表中存储了所有子文件夹的路径
labels=[] #创建了一个空列表 labels 来存储标签
for one_folder in temp: #使用了 one_folder 变量来遍历 temp 列表中存储的子文件夹路径。
n_img=len(os.listdir(one_folder)) #os.listdir(one_folder) 函数返回指定文件夹 one_folder 下的所有文件和文件夹的列表。然后,通过 len() 函数获取该列表的长度,即文件的数量。
letter=one_folder.split('\\')[-1] #通过反斜杠 \ 将 one_folder 路径分割为多个部分,并返回一个列表。然后,通过索引 [-1] 取得列表中的最后一个元素,即文件夹的名称。假设 one_folder 的路径为 "C:\example\folder",然后执行 one_folder.split('\\')[-1],将返回 "folder"。
if letter=='cat':
labels=np.append(labels,n_img*[0]) #将长度为 n_img 的全零数组添加到 labels 数组的末尾,并返回一个新的数组。这里假设你使用的是 numpy 库来进行数组操作。
else:
labels=np.append(labels,n_img*[1]) #将长度为 n_img 的全一数组添加到 labels 数组的末尾,并返回一个新的数组。
temp=np.array([images,labels]) #np.array() 函数将 images 和 labels 作为输入,并将它们合并成一个新的数组。这个新数组的形状将取决于 images 和 labels 的形状。
temp=temp.transpose() #矩阵转置
np.random.shuffle(temp) #对数组 temp 进行随机打乱操作。
images_list=temp[:,0] #获取二维数组 temp 中的第一列。
labels_list=temp[:,1] #获取二维数组 temp 中的第二列。
labels_list=[int(float(i)) for i in labels_list] #对 labels_list 中的每个元素 i,先将其转换为浮点数类型,然后再转换为整数类型,并将转换后的结果组成一个新的列表。
return images_list,labels_list #将处理后的 images_list 和 labels_list 返回

浙公网安备 33010602011771号