深度學習2.0-12.神經網路與全連線層之資料集的載入

哎呦-_-不錯發表於2020-10-08

資料集的載入

在這裡插入圖片描述

1.tf.data.Dataset.from_tensor_slices

它的作用是切分傳入Tensor的第一個維度,生成相應的dataset。

將輸入的張量的第一個維度看做樣本的個數,沿其第一個維度將tensor切片,得到的每個切片是一個樣本資料。實現了輸入張量的自動切片。

可以是numpy格式,也可以是tensorflow的tensor的格式,函式會自動將numpy格式轉為tensorflow
的tensor格式

輸入可以是一個tensor 或 一個tensor字典(字典的每個key對應的value是一個tensor,要求各tensor的
第一個維度相等) 或 一個tensor tupletuple 的每個元素是一個tensor,要求各tensor的第一個維度
相等)
# from_tensor_slices 為輸入張量的每一行建立一個帶有單獨元素的資料集
ts = tf.constant([[1, 2], [3, 4]])
ds = tf.data.Dataset.from_tensor_slices(ts)   # [1, 2], [3, 4]

2.keras.datasets

在這裡插入圖片描述
mnist資料載入
在這裡插入圖片描述
CIFAR10/100資料集的載入
在這裡插入圖片描述

3.tf.data.Dataset.from_tensor_slices

在這裡插入圖片描述

1.shuffle-打散-注意:x和y的相對順序不能打散

可以利用idx來記錄打散順序,以確保x和y的相對順序
在這裡插入圖片描述

2.map-可用於資料預處理

在這裡插入圖片描述

3.batch-讀取batch個(x,y)

在這裡插入圖片描述

4.repeat-重複取

在這裡插入圖片描述

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets

# 資料預處理
def prepare_mnist_features_and_labels(x,y):
    x = tf.cast(x,dtype=tf.float32) / 255.0
    y = tf.cast(y,dtype=tf.int64)
    y = tf.one_hot(y,depth=10)
    return x,y

# 資料集
# 資料集載入-->dataset-->ont_hot等資料預處理-->shuffle-->batchm
def mnist_dataset():
    (x,y),(x_val,y_val) = datasets.fashion_mnist.load_data()

    ds = tf.data.Dataset.from_tensor_slices((x,y))
    ds = ds.map(prepare_mnist_features_and_labels)
    ds = ds.shuffle(60000).batch(100)

    ds_val = tf.data.Dataset.from_tensor_slices((x_val,y_val))
    ds_val = ds_val.map(prepare_mnist_features_and_labels)
    ds_val = ds_val.shuffle(10000).batch(100)

    return ds,ds_val

if __name__ == '__main__':
    ds,ds_val = mnist_dataset()

相關文章