Tensorflow数据输入

作者: AI小白龙 | 来源:发表于2018-07-24 20:15 被阅读14次

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

    python_数据输入

    1,在机器学习中对数据的读入,预处理,清洗十分重要,这部分我们就从如何用python读入数据开始

    (1) 首先我们先来对python的一些数据类型进行一个回顾,暂时就list与numpy做简要介绍

    我们先看下面的结果:两个类型还是有区别的,可以用list来初始化numpy(以行来堆叠),list的apend函数可以增加元素,numpy不支持这个函数

    >>> import numpy as np

    >>> img=[] //定义list

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

    >>> tem.transpose() //转置

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

    (2)numpy的维度问题

    np.zeros((4,3,2)),第一项表表示个数,第二项表示行数,第三项表示列数

    >>> 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)以上为小白补习内容,下面开始正文:

    要读入数据先要获取文件路径,下面一段程序给出解析:

    os.walk可以返回参数(路径)下的内容为一个包含三个元素的元组:根路径(绝对路径),子目录名,文件名

    >>> import os

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

    ... print(f)

    os.path.join可以将路径组合,不仅可以在当前目录组合,而且可以跨越子目录组合,真是强力胶啊!!!

    >>> 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)列出当前目录所有文件

    下面一个完整的获取路径的方式:

    def get_file(file_dir):

    '''得到文件的数据(路径+名字)列表和标签列表 参数:

    file_dir: 数据的目录 返回值:

    images: 数据(路径+名字)字符列表

    labels: 标签整型列表 '''

    images = []

    temp = []

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

    #os.walk可以返回参数(路径)下的内容为一个包含三个元素的元组:根路径(绝对路径),子目录名,文件名

    # image directories

    for name in files:

    images.append(os.path.join(root, name)) #组合图像与当前目录

    # get 10 sub-folder names

    for name in sub_folders:

    temp.append(os.path.join(root, name)) #组合子目录与当前目录

    # 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)列出当前目录所有文件,len计算字符列表的长,即个数

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

    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此步为了打乱数据和

    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的数据是四维张量,如果使用其他图像读取工具时,有时需要进行数据维度转换:

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

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

    ......

    (6)数据类型转换:我们读取数据时可能会用不同的工具,PIL.Image , cv2, numpy

    以opencv现在的版本,只要适合维度的numpy.array都可以直接接收无需转换;

    PIL.Image的转换也非常方便,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)

    版权声明:本文为博主原创文章,转载请联系作者取得授权。https://blog.csdn.net/qq_34106574/article/category/7628923 

    相关文章

      网友评论

        本文标题:Tensorflow数据输入

        本文链接:https://www.haomeiwen.com/subject/rdwymftx.html