【2】TensorFlow光速入門-數據預處理(得到數據集)


本文地址:https://www.cnblogs.com/tujia/p/13862351.html

 

系列文章:

【0】TensorFlow光速入門-序

【1】TensorFlow光速入門-tensorflow開發基本流程

【2】TensorFlow光速入門-數據預處理(得到數據集)

【3】TensorFlow光速入門-訓練及評估

【4】TensorFlow光速入門-保存模型及加載模型並使用

【5】TensorFlow光速入門-圖片分類完整代碼

【6】TensorFlow光速入門-python模型轉換為tfjs模型並使用

【7】TensorFlow光速入門-總結

 

一、數據來源

數據來源可以是自己業務原有數據或下載的開源數據或爬蟲捉取的第三方數據,需要訓練怎樣的模型的准備什么樣的數據。

例如:圖片分類就需要自己准備不同分類的圖片,按分類命名文件夾(這樣方便讀取)

 

二、導入數據(省時間可以直接跳過,看第三步就好

1)准備數據

已經下載好,分類保存好圖片,我們先要導入到開發環境里,如果你圖片已經准備好,那就可以跳過這一步了

這是我要做的一個表非表的二分類模型的數據:

我把它打包為 wnw.zip,然后放在本地的web環境根目錄下

 

 

 

 

2)導入數據

打開 jupyter 的終端

   

 

 注:也可以用 jupyter 里的界面來操作創建目錄或上傳文件,不過解壓還是得用終端。使用其他方法上傳圖片也行,條條道路通羅馬,只要把數據上傳到可讀取目錄里就行

 

三、數據預處理

下面以圖片分類為例子,看一下怎么預處理數據

注:需要說明的是,不同模型需要的輸入數據是不一樣的,這里主要學習數據的讀取和處理方法,其他模型自己舉一反三就好

1)首先先導入需要用到的包

import pathlib
import random
import tensorflow as tf
from tensorflow import keras
import numpy as np
import matplotlib.pyplot as plt

2)讀取文件夾圖片數據

data_path = '/tf/datasets/wnw'
all_image_paths = []
all_image_labels = []
label_names = []
data_root = pathlib.Path(data_path)
i = 0
for item in data_root.iterdir():
    label_names.append(item.name)
    for image in item.iterdir():
        all_image_paths.append(str(image))
        all_image_labels.append(i)
    i = i + 1
print(label_names)
print(len(all_image_paths))
print(len(all_image_labels))

運行結果:

 3)圖片數據集

處理圖片數據成tensor(張量)數據

def load_and_preprocess_image(path):
    # 文件 轉 tensor
    image = tf.io.read_file(path)
    # 普通 tensor 轉 圖片tensor,channels 為顏色通道,1表示灰圖
    image = tf.image.decode_jpeg(image, channels=1)
    # 縮放圖片尺寸為 100*100
    image = tf.image.resize(image, [100, 100])
    # 顏色的數值范圍是0-255,所以 image/255,進一步將圖片tensor數據數值范圍縮到 0-1
    image /= 255
    return image
# 圖片路徑列表直接轉數據集
path_ds = tf.data.Dataset.from_tensor_slices(all_image_paths)
# 把路徑數據轉成圖片tensor數據
image_ds = path_ds.map(load_and_preprocess_image, num_parallel_calls=tf.data.experimental.AUTOTUNE)

4)label 數據集

label_ds = tf.data.Dataset.from_tensor_slices(tf.cast(all_image_labels, tf.int64))

5)將圖片數據集和標簽數據集壓縮打包一下

image_label_ds = tf.data.Dataset.zip((image_ds, label_ds))

 6)打亂數據

image_count = len(all_image_paths)
ds = image_label_ds.shuffle(buffer_size=image_count)
ds = ds.repeat()
ds = ds.batch(32)
ds = ds.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
print(ds)

 

 注:為了文章更易讀,我省略了一些查看圖片、數據驗證的操作,詳細教程可以看這里:https://tensorflow.google.cn/tutorials/load_data/images

 

重點 Api :

tf.io.read_file           https://tensorflow.google.cn/api_docs/python/tf/io/read_file

tf.image.decode_image             https://tensorflow.google.cn/api_docs/python/tf/io/decode_jpeg

tf.image.resize                           https://tensorflow.google.cn/api_docs/python/tf/image/resize

tf.data.Dataset.from_tensor_slices            https://tensorflow.google.cn/api_docs/python/tf/data/Dataset#from_tensor_slices

tf.data.Dataset.map              https://tensorflow.google.cn/api_docs/python/tf/data/Dataset#map

tf.data.Dataset.zip               https://tensorflow.google.cn/api_docs/python/tf/data/Dataset#zip

 

下一節,我們來說說,如果用這個准備好的數據集來訓練及評估其准確性

【3】TensorFlow光速入門-訓練及評估

 

本文鏈接:https://www.cnblogs.com/tujia/p/13862351.html


 完。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM