如何将自己的数据集变成和cifia数据集一样的格式
时间: 2024-03-08 07:48:41 浏览: 192
模仿CIFAR数据集格式制作自己的数据集代码
若想将自己的数据集转换成CIFAR-10数据集的格式,可以按照以下步骤进行:
1. 读取自己的数据集,将图片转换成numpy数组的格式,并将标签存储在一个单独的数组中。
2. 将numpy数组的形状转换成(N,C,H,W)的形式,其中N表示图片数量,C表示通道数,H和W分别表示图片的高度和宽度。
3. 将像素值缩放到0到1之间,并将其类型转换为float32。
4. 将数据集分成训练集和测试集,并将它们保存到不同的文件中。
5. 将数据集标签保存到单独的文件中。
具体地说,可以参考以下代码(假设自己的数据集保存在data文件夹下):
```python
import numpy as np
import os
import pickle
# 读取自己的数据集
data_path = 'data'
train_data = []
train_labels = []
test_data = []
test_labels = []
for root, dirs, files in os.walk(data_path):
for file in files:
filepath = os.path.join(root, file)
with open(filepath, 'rb') as f:
img = np.array(Image.open(f))
label = int(root.split('/')[-1])
if 'train' in filepath:
train_data.append(img)
train_labels.append(label)
elif 'test' in filepath:
test_data.append(img)
test_labels.append(label)
# 将数据集转换成(N,C,H,W)的形式
train_data = np.array(train_data).transpose((0, 3, 1, 2))
test_data = np.array(test_data).transpose((0, 3, 1, 2))
# 将像素值缩放到0到1之间
train_data = train_data.astype('float32') / 255
test_data = test_data.astype('float32') / 255
# 将数据集分成训练集和测试集
train_data, train_labels = shuffle(train_data, train_labels)
train_data, val_data, train_labels, val_labels = train_test_split(train_data, train_labels, test_size=0.1)
# 保存数据集和标签
def save_data(file_path, data, labels):
with open(file_path, 'wb') as f:
pickle.dump((data, labels), f)
save_data('cifar10_train.pkl', train_data, train_labels)
save_data('cifar10_val.pkl', val_data, val_labels)
save_data('cifar10_test.pkl', test_data, test_labels)
# 保存标签
label_names = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
with open('cifar10_label_names.pkl', 'wb') as f:
pickle.dump(label_names, f)
```
在上述代码中,我们将自己的数据集读取并保存到train_data、train_labels、test_data和test_labels中。接着,我们将数据集转换成(N,C,H,W)的形式,并将像素值缩放到0到1之间。然后,我们将数据集分成训练集、验证集和测试集,并将它们分别保存到cifar10_train.pkl、cifar10_val.pkl和cifar10_test.pkl文件中。最后,我们将标签保存到cifar10_label_names.pkl文件中。
阅读全文