CIFAR資料集: 點擊我
下載CIFAR-10資料集(163MB): 點擊我
下載CIFAR-100資料集(161MB): 點擊我
以CIFAR-10做說明,
點選上方下載連結後會取得'cifar-10-python.tar.gz',
接著手動先解壓縮檔案,
取得cifar-10-batches-py資料夾,
裡面有6個檔案是我們所需要的,
分別為
'data_batch_1', 'data_batch_2',
'data_batch_3', 'data_batch_4',
'data_batch_5', 'test_batch',
如何讀取這些檔案呢?
請參考如下:
import pickle def unpickle(file): with open(file, 'rb') as fo: dict = pickle.load(fo, encoding='bytes') return dict datasets = unpickle(data_batch_1) #選擇要讀取的檔案 print(datasets) #查看檔案內容 |
檔案內容大致如下:
{b'batch_label' : b'training batch 1 of 5', b'labels' : [6,9,9,4,...],
b'data' : arrary([[59, 43, 50, ..., 140, 84, 72],
[154, 126, 105, ..., 139, 142, 144],
...,
[]], dtype=uint8),
b'filenames' : [b'leptodactylus_pentadactylus_s_000004.png',...]}
接著我們要把這些內容轉換成影像保存下來,
並且依據各類別分別放置同類型影像,
首先我們發現資料保存類別的資訊是0~9做為代表,
我們在保存過程中順便更換類別名稱方便查詢,
假設都已經讀取到檔案了上述的內容,
接續寫法如下:
import os import numpy as np import PIL import Image labels = datasets[b'labels'] #如果忘了datasets怎麼來, 請往上查看 data = datasets[b'data'] filenames = datasets[b'filenames']
classnames = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck'] for i in range(10): os.mkdir('./'+classnames[i]) #建立各類別目錄, 後續會將影像存入對應目錄內 for i in range(len(labels)): savefilename = str(filenames[i], encoding='utf-8') #將byte格式轉換為string saveData = data[i].reshape(3, 32, 32).astype('uint8') R, G, B = Image.fromarray(saveData[0]), Image.fromarray(saveData[1]), Image.fromarray(saveData[2]) img = Image.merge('RGB', (R, G, B)) img.save('./' + classnames[labels[i]] + '/' + savefilename) |
留言列表