1. 程式人生 > >深度學習(tensorflow) —— 自己數據集讀取opencv

深度學習(tensorflow) —— 自己數據集讀取opencv

spa 屬於 有效 測試 大小 打開文件 需要 深度學習 ray

先來看一下我們的目錄:
技術分享圖片
dataset1 和creat_dataset.py  屬於同一目錄       mergeImg1 和mergeImg2 為Dataset1的兩子目錄(兩類為例子)目錄中存儲圖像等文件

核心文件
creat_dataset.py 文件如下
#
來生成訓練集和測試集的矩陣 import cv2 as cv import numpy as np import os dataset_path = ["mergeImg1","mergeImg2"] #這裏為了增加限制,只讀取以下倆個(防止有其他文件夾 幹擾) #有效的path def gain_data(path): train_data
= [];train_label = [] test_data = [];test_label = [] category = 0 for i in os.listdir(path): #dataset 目錄下的兩類 if i in dataset_path: #讀取指定的文件夾 因為會存在其他文件夾 filepath = os.path.join(path,i) #目錄下/子目錄 if os.path.isdir(filepath):
for file in os.listdir(filepath): #目錄下的文件 filename = os.path.join(filepath,file) img = cv.imread(filename) #打開文件 img = cv.resize(img,(160,160)) #將圖片進行大小設置 train_data.append(img) train_label.append(category) #
存儲對應標簽 category = category + 1 #存儲類別變更 (0 , 1) data = np.array(train_data) label = train_label cv.destroyAllWindows() return data,label #標簽轉化函數 (0,0,1,1) --> ([1,0],[1,0],[0,1],[0,1]) def label_cov(train_label): result = [] calss_num = len(set(train_label)) label = [0] * calss_num for i in train_label: label[i-1] = 1 result.append(label) label = [0] * calss_num result = np.array(result) return result #將數據x 和標簽y 進行隨機排列(打亂) 註x和y 應該為矩陣類型 def shuffle_data(x , y): num_example = x.shape[0] arr = np.arange(num_example) np.random.shuffle(arr) data_train = x[arr] label_train = y[arr] return data_train,label_train def gain_data1(path): #對於數據集1 進行獲取 train_data,train_label = gain_data(os.path.join(path,"Dataset1")) lab = label_cov(train_label) #標簽轉換 lab = np.array(lab) train_data, lab = shuffle_data(train_data, lab) #隨機打亂 return train_data,lab def gain_data2(path): #對於數據集2 獲取 train_data,train_label = gain_data(os.path.join(path,"Dataset2")) lab = label_cov(train_label) #標簽轉換 keras中不需要 tf需要 lab = np.array(lab) train_data, lab = shuffle_data(train_data, lab) #隨機打亂 return train_data,lab a,b= gain_data1("目錄") #a,b返回的就是我們需要的數據 可以直接傳入神經網絡中

如果大家有什麽不明白的可以與我交流。 讀取數據所使用的函數都十分簡單。

深度學習(tensorflow) —— 自己數據集讀取opencv