自己制作npy数据集,数据格式类似于mnist数据(16)---《深度学习》

代码:

import tensorflow as tf
import numpy as np
import os
from PIL import Image

dir="/home/jobs/Pictures/test"

def getFileArr(dir):
    result_arr=[]
    label_list=[]
    map={}
    map_file_result={}
    map_file_label={}
    map_new={}
    count_label=0
    count=0

    file_list=os.listdir(dir)
    for file in file_list:
        file_path=os.path.join(dir,file)

        label=file.split(".")[0].split("_")[0]
        map[file]=label
        if label not in label_list:
            label_list.append(label)
            map_new[label]=count_label
            count_label=count_label+1
        img=Image.open(file_path)
        result=np.array([])
        r,g,b=img.split()

        r_arr=np.array(r).reshape(12544)
        g_arr=np.array(g).reshape(12544)
        b_arr=np.array(b).reshape(12544)
        img_arr=np.concatenate((r_arr,g_arr,b_arr))
        result=np.concatenate((result,img_arr))
        #result=result.reshape((3,112,112))
        result=result.reshape((112,112,3))
        result=result/255.0
        map_file_result[file]=result
        result_arr.append(result)
        count=count+1
    for file in file_list:
        map_file_label[file]=map_new[map[file]]
        #map[file]=map_new[map[file]]

    ret_arr=[]
    for file in file_list:
        each_list=[]
        label_one_zero=np.zeros(count_label)
        result=map_file_result[file]
        label=map_file_label[file]
        label_one_zero[label]=1.0
        #print(label_one_zero)
        each_list.append(result)
        each_list.append(label_one_zero)
        ret_arr.append(each_list)
    os.makedirs("/home/jobs/Desktop/data_self")
    np.save('/home/jobs/Desktop/data_self/test_data.npy', ret_arr)
    return ret_arr
if __name__=="__main__":
    ret_arr=getFileArr(dir)

自己所用到的图片集合:
自己制作npy数据集,数据格式类似于mnist数据(16)---《深度学习》_第1张图片
生成的npy数据集:
自己制作npy数据集,数据格式类似于mnist数据(16)---《深度学习》_第2张图片
在附件中我会将相应的文件上传,大家感兴趣的话可以进行下载测试,也可以用自己的数据集进行测试,注意图片的格式为112*112*3,注意在训练之前进行调整,注意对标签也要做相应的处理!
大家可以去我的资源页进行下载相应的训练图片集和生成的npy数据集!

更新:
由于前面的那个label中我们根据统计的标签的总数直接对其进行one_hot编码,这样可能得到的编码和我们所希望的编码不是同一个,一般我们都会有类标签和数字对应的映射关系map,用于将标签转化为one_hot编码:
下面的代码可以展示这种关系,我们如果有自己定义的map映射关系,则可以在底下给map_file_label[file]赋值的时候可以配置map_new[map[file]],我们就可以将map_new替换为我们定义的那个map映射关系,然后就可以生成我们自定义的标签啦!

#-*-coding=utf-8-*-
import tensorflow as tf
import numpy as np
import os
from PIL import Image

dir="test_data_std/"

def getFileArr(dir):
    result_arr=[]
    label_list=[]
    map={}
    map_file_result={}
    map_file_label={}
    map_new={}
    count_label=0
    count=0

    file_list=os.listdir(dir)
    for file in file_list:
        file_path=os.path.join(dir,file)

        label=file.split(".")[0].split("_")[0]
        map[file]=label
        if label not in label_list:
            label_list.append(label)
            map_new[label]=count_label
            count_label=count_label+1
        img=Image.open(file_path)
        result=np.array([])
        r,g,b=img.split()

        r_arr=np.array(r).reshape(224*224)
        g_arr=np.array(g).reshape(224*224)
        b_arr=np.array(b).reshape(224*224)
        img_arr=np.concatenate((r_arr,g_arr,b_arr))
        result=np.concatenate((result,img_arr))
        result=result.reshape((224,224,3))
        result=result/255.0
        map_file_result[file]=result
        result_arr.append(result)
        count=count+1
    for file in file_list:
        map_file_label[file]=map_new[map[file]]
        #map[file]=map_new[map[file]]

    ret_arr=[]
    for file in file_list:
        each_list=[]
        label_one_zero=np.zeros(count_label)
        result=map_file_result[file]
        label=map_file_label[file]
        #label_one_zero[label]=1.0
        #print(label_one_zero)
        each_list.append(result)
        each_list.append(label)
        ret_arr.append(each_list)
    np.save('test_data.npy', ret_arr)
    return ret_arr

def to_categorial(y,n_classes):
    y_std=np.zeros([len(y),n_classes])
    for i in range(len(y)):
        y_std[i,y[i]]=1.0
    return y_std

def load_data(train_dir,test_dir):
    train_data=np.load(train_dir)
    test_data=np.load(test_dir)
    X_train_non,y_train_non=train_data[:,0],train_data[:,1]
    X_test_non,y_test_non=test_data[:,0],test_data[:,1]

    X_train=np.zeros([len(X_train_non),224,224,3])
    X_test=np.zeros([len(X_test_non),224,224,3])
    for i in range(len(X_train_non)):
        X_train[i,:,:,:]=X_train_non[i]
    for i in range(len(X_test_non)):
        X_test[i,:,:,:]=X_test_non[i]
    #y_train_non=y_train_non.tolist()
    #y_test_non=y_test_non.tolist()
    y_train=to_categorial(y_train_non,1000)
    y_test=to_categorial(y_test_non,1000)   
    return (X_train,y_train),(X_test,y_test)

你可能感兴趣的:(深度学习)