Tensorflow數(shù)據(jù)輸入

博客地址:?https://blog.csdn.net/qq_34106574/article/details/80691162

python_數(shù)據(jù)輸入

1,在機(jī)器學(xué)習(xí)中對(duì)數(shù)據(jù)的讀入,預(yù)處理,清洗十分重要,這部分我們就從如何用python讀入數(shù)據(jù)開(kāi)始


(1) 首先我們先來(lái)對(duì)python的一些數(shù)據(jù)類型進(jìn)行一個(gè)回顧,暫時(shí)就list與numpy做簡(jiǎn)要介紹

我們先看下面的結(jié)果:兩個(gè)類型還是有區(qū)別的,可以用list來(lái)初始化numpy(以行來(lái)堆疊),list的apend函數(shù)可以增加元素,numpy不支持這個(gè)函數(shù)

>>> import numpy as np

>>> img=[]?//定義list

>>> tem=np.array([img,lab])?//list初始化numpy,以行堆疊

>>> tem.transpose()?//轉(zhuǎn)置

>>> np.vstack((tem,np.array([5,3])))?//垂直疊加,水平用 hstack()

(2)numpy的維度問(wèn)題

np.zeros((4,3,2)),第一項(xiàng)表表示個(gè)數(shù),第二項(xiàng)表示行數(shù),第三項(xiàng)表示列數(shù)


>>> a=np.zeros((4,3,2))

>>> print(a)


>>> b=np.zeros((3,2))

>>> print(b)

[[0. 0.]

[0. 0.]

[0. 0.]]

按第一維度切片輸出:

>>> for r in b:

... print(r)

...

[0. 0.]

[0. 0.]

[0. 0.]

>>> for r in a:

... print(r)


(3)以上為小白補(bǔ)習(xí)內(nèi)容,下面開(kāi)始正文:

要讀入數(shù)據(jù)先要獲取文件路徑,下面一段程序給出解析:

os.walk可以返回參數(shù)(路徑)下的內(nèi)容為一個(gè)包含三個(gè)元素的元組:根路徑(絕對(duì)路徑),子目錄名,文件名

>>> import os

>>> for r,s,f in os.walk('K:/tensorflow_vgg16/face_train'):

... print(f)


os.path.join可以將路徑組合,不僅可以在當(dāng)前目錄組合,而且可以跨越子目錄組合,真是強(qiáng)力膠啊?。?!

>>> for r,s,f in os.walk('K:/tensorflow_vgg16/face_train'):

... for n in f:

... print(os.path.join(r,n))


#os.listdir(one_folder)列出當(dāng)前目錄所有文件



下面一個(gè)完整的獲取路徑的方式:


def?get_file(file_dir):

'''得到文件的數(shù)據(jù)(路徑+名字)列表和標(biāo)簽列表 參數(shù):

file_dir: 數(shù)據(jù)的目錄 返回值:

images: 數(shù)據(jù)(路徑+名字)字符列表

labels: 標(biāo)簽整型列表 '''

images = []

temp = []

for?root, sub_folders, files?in?os.walk(file_dir):

#os.walk可以返回參數(shù)(路徑)下的內(nèi)容為一個(gè)包含三個(gè)元素的元組:根路徑(絕對(duì)路徑),子目錄名,文件名

# image directories

for?name?in?files:

images.append(os.path.join(root, name))?#組合圖像與當(dāng)前目錄

# get 10 sub-folder names

for?name?in?sub_folders:

temp.append(os.path.join(root, name))?#組合子目錄與當(dāng)前目錄

# assign 10 labels based on the folder names

labels = []

for?one_folder?in?temp:

n_img = len(os.listdir(one_folder))?#os.listdir(one_folder)列出當(dāng)前目錄所有文件,len計(jì)算字符列表的長(zhǎng),即個(gè)數(shù)

letter = one_folder.split('\\')[-1]?#字符切片[-1]表示切最后一個(gè)元素

if?letter ==?'0':

labels = np.append(labels, n_img * [0])

elif?letter ==?'1':

labels = np.append(labels, n_img * [1])

elif?letter ==?'2':

labels = np.append(labels, n_img * [2])

elif?letter ==?'3':

labels = np.append(labels, n_img * [3])

# shuffle此步為了打亂數(shù)據(jù)和

temp = np.array([images, labels])

temp = temp.transpose()

np.random.shuffle(temp)


#重新分離

image_list = list(temp[:,?0])

label_list = list(temp[:,?1])

label_list = [int(float(i))?for?i?in?label_list]?#???? int(i)

return?image_list, label_list


(4)獲取路徑之后就是讀圖了

讀圖一般有很多工具,opencv,matplot,keras,tensorflow


import cv2


def?read_img(image_list):

images[]

for path in image_list:

images.append(cv2.imread(path ))

rerurn images


(5)通常TensorFlow的數(shù)據(jù)是四維張量,如果使用其他圖像讀取工具時(shí),有時(shí)需要進(jìn)行數(shù)據(jù)維度轉(zhuǎn)換:

x=p.reshap(-1,30,50,3)

x=p[:,np.ewaxis,:]

......

(6)數(shù)據(jù)類型轉(zhuǎn)換:我們讀取數(shù)據(jù)時(shí)可能會(huì)用不同的工具,PIL.Image , cv2, numpy

以opencv現(xiàn)在的版本,只要適合維度的numpy.array都可以直接接收無(wú)需轉(zhuǎn)換;

PIL.Image的轉(zhuǎn)換也非常方便,imag=image.fromarray() / array=np.array(imag)

img = Image.open('K:/keras_project/fine-tuning/test.jpg')

imge = np.array(img)

cv2.imshow('src',imge)?#由于cv2中是bgr存放,所以色彩有異常 可前置 :cv2.cvtColor(imge,cv2.COLOR_BGR2RGB)

cv2.waitKey(0)


版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)聯(lián)系作者取得授權(quán)。https://blog.csdn.net/qq_34106574/article/category/7628923?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容