根据label数据集的划分来对input数据集作相同的划分

在做关于图像处理方面的机器学习任务时,有时会涉及到input和lable数据集需要做相同的预处理,比如分割,当对label数据集按照规则划分后,需要对input中相对应部分作相同处理。在此记录如果根据已经分割好(按比例随机)的label来对input作相同划分。

1、首先将label下每部分的图像名字写入txt

ls -R /home/datalab/work/datasets/test_7pilang/*.jpg > file.txt

2、根据txt中每个文件名字,遍历input文件夹,将input中与之相对应的图像筛选出来,移动到指定目录。(这儿可能一对多,如果label有一张,但是input有RGB,还有IR红外波段等,但其名字往往只有后缀不同,因此用判断是否包含相应字符串的方法)

import os,shutil
path = r"test_file.txt"
#传入要读的文件路径
filee = open(path,"r",encoding="utf-8",errors="ignore")
sourceDir="/home/xzx/Project/Spatiotemporal/data/singleImage/cloudy" #源目录
targetDir="/home/xzx/Project/Spatiotemporal/data/singleImage/test/" #目标目录

while True:
    mystr = filee.readline()#表示一次读取一行
    mystr = mystr[:-5]
    if not mystr:
#读到数据最后跳出,结束循环。数据的最后也就是读不到数据了,mystr为空的时候
        break
    for root, dirs, files in os.walk(sourceDir):
        for file in files:
            result = mystr in file
            if result == True:
                shutil.move(os.path.join(root,file),targetDir) #移动
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,用于使用CNN对身份进行图像分类: ```python import pandas as pd import numpy as np import tensorflow as tf from tensorflow.keras.preprocessing.image import ImageDataGenerator from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout # 读取数据集和标签 df = pd.read_csv('Label.csv') train_df = df[df['split'] == 'train'] test_df = df[df['split'] == 'test'] # 定义图像生成器 train_datagen = ImageDataGenerator(rescale=1./255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True) test_datagen = ImageDataGenerator(rescale=1./255) # 生成训练集和测试集 train_generator = train_datagen.flow_from_dataframe( dataframe=train_df, directory='./images', x_col='image_name', y_col='label', target_size=(224, 224), batch_size=32, class_mode='categorical' ) test_generator = test_datagen.flow_from_dataframe( dataframe=test_df, directory='./images', x_col='image_name', y_col='label', target_size=(224, 224), batch_size=32, class_mode='categorical' ) # 定义CNN模型 model = Sequential() model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(224, 224, 3))) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(128, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Conv2D(256, (3, 3), activation='relu')) model.add(MaxPooling2D((2, 2))) model.add(Flatten()) model.add(Dense(512, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(4, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 训练模型 history = model.fit(train_generator, epochs=10, validation_data=test_generator) # 评估模型 test_loss, test_acc = model.evaluate(test_generator) print('Test accuracy: {:.2f}%'.format(test_acc * 100)) ``` 在这个示例代码中,我们首先读取数据集和标签,然后使用Keras中的ImageDataGenerator生成器对图像进行预处理,包括缩放、裁剪、归一化等操。接着,我们使用flow_from_dataframe函数来生成训练集和测试集,同时指定了图像的大小、批次大小和类别个数等参数。 然后,我们定义了一个简单的CNN模型,包括多个卷积层、池化层和全连接层。在模型编译时,我们使用了交叉熵损失函数和Adam优化器,并设置了准确率为性能指标。 最后,我们使用训练集进行模型训练,并使用测试集进行验证和评估。在评估模型时,我们计算了测试集的准确率,并输出了结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值