深度学习(18)神经网络与全连接层一: 数据加载
深度學習(18)神經網絡與全連接層一: 數據加載
- 1. 常用數據集
- 2. MNIST數據集
- (1) MNIST樣本
- (2) MNIST加載案例
- 3. CIFAR10/100
- (1) CIFAR10/100樣本
- (2) CIFAR10/100加載案例
- (3) tf.data.Dataset
- (4) .shuffle(打散功能)
- (5) .map(數據預處理功能)
- (6) .batch
- (7) StpIteration
- (8) .repeat()
- (9) For example
Outline
- keras.datasets
- tf.data.Dataset.from_tensor_slices
- shuffle
- map
- batch
- repeat
- we will talk Input Pipeline later
1. 常用數據集
keras.datasets
- boston housing
- Boston housing price regression dataset.
- mnist/fashion mnist
- MNIST/Fashion-MNIST dataset.
- cifar10/100
- small images classification dataset.
- imdb
- sentiment clssification dataset.
2. MNIST數據集
(1) MNIST樣本
- 圖片的shape=[28, 28, 1],共有70k張圖片,其中60k張作為訓練集,10k張作為測試集。
(2) MNIST加載案例
(a)(x, y), (x_test, y_test) = kares.datasets.mnist.load_data(): 自動下載,管理,解析,讀取,轉換這一系列的工作,最終拿到的是一個Numpy的格式,其中(x, y)為train,即訓練集,x.shape=[60000, 28, 28],y.shape=[60000,]; (x_test, y_test)為test,即測試集,x_test.shape=[10000, 28, 28],y_test.shape=[10000,];
(b)x.min()=0; x.max()=255; 注意這里的min和max都是Numpy里的API,這倆值代表了一張圖片里每個像素點的灰度值在[0~255]之間; 為了方便計算,需要歸一化操作,在后邊的操作中需要將其除以255,來達到將其值控制在[01](或者[-11]、[-0.5~0.5],具體怎么處理要看具體應用目的)之間的目的;
(c)y[:4]: 取前4張圖片的y值,即標簽值,為[5, 0, 4, 1],即代表第一章圖片的label值為5; 即代表第二章圖片的label值為0; 即代表第三章圖片的label值為4; 即代表第四章圖片的label值為1; 數據類型為unit8;
(d)y_onehot = tf.one_hot(y, depth=10): 將y進行onehot編碼,因為共有10個數字類別,所以設置depth=10;
(e)y_onehot[:2]: 查看前兩個元素,即第一個元素的標簽值為“5”,所以其onehot編碼為[0., 0., 0., 0., 1., 0., 0., 0., 0., 0.,]; 第一個元素的標簽值為“0”,所以其onehot編碼為[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.,];
3. CIFAR10/100
(1) CIFAR10/100樣本
- CIFAR10表示共有10種類型(大類,例如車、狗、鳥等等)的圖片; CIFAR100表示共有100種類型(小類,例如狗分為邊牧、田園犬等等)的圖片; CIFAR10和CIFAR100是同一個數據集;
- 每張彩色圖片的shape=[32, 32, 3];
(2) CIFAR10/100加載案例
(a)(x, y), (x_test, y_test) = kares.datasets.cifar10.load_data(): 加載與解析CIFAR10數據集;
(x, y), (x_test, y_test) = kares.datasets.cifar100.load_data(): 加載與解析CIFAR100數據集;
(b) 輸入輸出
訓練集輸入x.shape=[50000, 32, 32, 3];
訓練集輸出y.shape=[50000, 1];
測試集輸入x_test.shape=[10000, 32, 32, 3];
測試集輸出y_test.shape=[10000, 1];
(3) tf.data.Dataset
- from_tensor_slices()
(a)db = tf.data.Dataset.from_tensor_slices(x_test): 利用from_tensor_slices()函數將Numpy類型的x_test轉換為Dataset的實例,db就可以很方便地進行迭代操作;
(b)next(iter(db)).shape: iter(db)為迭代器,即it = iter(db) →\to→ next(it);
(c) from_tensor_slice()比“先將數據轉換為Tensor類型再一個個讀取的方法”要好很多;
(d)db = tf.data.Dataset.from_tensor_slices((x_test, y_test)): 這里可以看出,Dataset可以傳入兩個參數,x_test即images,y_test即label;
(4) .shuffle(打散功能)
(a)db = db.shuffle(10000): 將[0~10000]區域內的樣本隨機打散,注意打散的時候x_test對應的y_test必須保持一致;
(5) .map(數據預處理功能)
(a)preprocess(x, y): 定義一個數據預處理的函數;
(b)db2 = db.map(preprocess): 定義預處理函數后,就可以使用map()函數直接調用預處理函數對數據集進行預處理;
(6) .batch
(a)db3 = db2.batch(32): 將數據集劃分為1個batch32張圖片;
(7) StpIteration
(8) .repeat()
(9) For example
參考文獻:
[1] 龍良曲:《深度學習與TensorFlow2入門實戰》
總結
以上是生活随笔為你收集整理的深度学习(18)神经网络与全连接层一: 数据加载的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(17)TensorFlow高阶
- 下一篇: 深度学习(19)神经网络与全连接层二: