自己制作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数据集:
这里写图片描述
在附件中我会将相应的文件上传,大家感兴趣的话可以进行下载测试,也可以用自己的数据集进行测试,注意图片的格式为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)
  • 13
    点赞
  • 89
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
要读取MNIST数据集npy文件,可以使用Python中的numpy库。首先,确保已经导入numpy库。然后,使用np.load()函数来加载.npy文件。例如,假设.npy文件名为"mnist_data.npy",可以使用以下代码读取数据集: ```python import numpy as np dataset = np.load("mnist_data.npy") ``` 这将读取.npy文件并将数据存储在变量dataset中。现在,你可以使用打印语句查看数据集的内容: ```python print(dataset) ``` 这将打印出数据集的内容。如果你想确保.npy文件已经功加载,可以添加以下代码: ```python print("load .npy done") ``` 这将在控制台输出"load .npy done"以表示.npy文件已经功加载。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [下载MNIST数据集并使用python将数据转换NumPy数组(源码解析)](https://blog.csdn.net/qq_40828914/article/details/122280121)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python .npy文件自制数据集基本使用](https://blog.csdn.net/qq_46006468/article/details/119641292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值