在Python中将不同类的图像分割为训练集和测试集

在Python中将不同类的图像分割为训练集和测试集,python,Python,我是python新手,但我想用python实现深度学习工具。我收集了一组不同类别的图片。我的工作是使用卷积网络进行图像分类。第一步是将这些图像分成两组进行训练和测试。然后我将加载这些图像,并在将它们送入网络之前进行一些预处理。我现在只对第一部分感到好奇 我为此发布了我的工作: import numpy as np from os import listdir def getPaths(rootPath): folderList = listdir(rootPath) imgPa

我是python新手,但我想用python实现深度学习工具。我收集了一组不同类别的图片。我的工作是使用卷积网络进行图像分类。第一步是将这些图像分成两组进行训练和测试。然后我将加载这些图像,并在将它们送入网络之前进行一些预处理。我现在只对第一部分感到好奇

我为此发布了我的工作:

import numpy as np
from os import listdir

def getPaths(rootPath):
    folderList = listdir(rootPath)
    imgPaths = []
    categories = []
    for folders in folderList:
    imgPath = os.path.join(rootPath,folders)
    imgPaths.append(imgPath)
    categories.append(folders)
    return (imgPaths, categories)

def getImgPaths(rootPath, p):    
temp = getPaths(rootPath)
folderPaths, categories = temp

trainImgPaths = []
trainLabels = []
testImgPaths = []
testLabels = []
for ii in range(len(folderPaths)):
    temp2 = getPaths(folderPaths[ii])
    imgPaths = temp2[0]
    randIdx = np.random.permutation(len(imgPaths))
    trainIdx = randIdx[:int(p*len(imgPaths))]
    testIdx = [idx for idx in randIdx if not idx in trainIdx]
    trainPaths = [imgPaths[kk] for kk in trainIdx]
    testPaths = [imgPaths[kk] for kk in testIdx]
    trainCat = [categories[ii] for jj in xrange(len(trainPaths))]
    testCat = [categories[ii] for jj in xrange(len(testPaths))] 

    trainImgPaths.extend(trainPaths)
    testImgPaths.extend(testPaths)
    trainLabels.extend(trainCat)
    testLabels.extend(testCat)
    return (trainImgPaths, trainLabels, testImgPaths, testLabels)    

代码可以工作,但似乎有些麻烦

你试了什么?或者你想让我们完成你的任务?我只想编写两个函数。我可以在Matlab中实现这些,但是在python中遇到了一些问题。遇到了哪些问题?让我们看看你试过什么!你需要分层还是随机抽样才行?@MMF:我稍后会发布我的作品
import os, random

def getImagePaths(imgroot, cats, pot):  # please excuse the naming
    trainImagePaths = []
    testImagePaths = []
    trainlabels = []
    testlabels = []
    for cat in cats:
        files = os.listdir(os.path.join(imgroot, cat))
        split = int(pot*len(files))
        trainImagePaths.extend(files[:split])
        testImagePths.extend(files[split:]
        trainlabels.extend([cat]*split)
        testlabels.extend([cat]*len(files)-split)

    # optionally, shuffle

    return trainImagePaths, testImagePaths, trainlabels, testLabels