首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >cifar10随机化训练和测试集

cifar10随机化训练和测试集
EN

Stack Overflow用户
提问于 2018-12-12 03:33:58
回答 2查看 2.3K关注 0票数 1

我想对keras.datasets库中存在的CIFAR-10数据集的60000个观察值进行随机化。我知道对于构建神经网络来说,它可能不是那么重要,但我是Python新手,我想学习用这种编程语言处理数据。

因此,要导入数据集,我运行以下命令

代码语言:javascript
复制
from keras.datasets import cifar10
(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()

这会自动给出训练集和测试集的默认细分;但我想混合它们。我想到的步骤是:

  • 将训练集和测试集连接在形状为(60000,32,32,3)的数据集X和数据集Y中(60000,1)
  • 生成一些随机指标来子集X和Y数据集,例如,50000个of的训练集和10000个of的测试集
  • 创建具有与原始形状相同的形状的新数据集(以ndarray格式) X_train,X_test,Y_train,Y_test,以便我可以开始训练卷积神经网络

但也许有一种更快的方法可以做到这一点。

我尝试了几个小时的不同方法,但我什么也没能做到。有人能帮帮我吗?我真的很感激,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-12 05:31:01

您可以使用sklearn.model_selection.train_test_split拆分数据。如果您想在每次运行代码时使用相同的随机化索引选择,则可以设置random_state值,这样每次都会有相同的测试/训练拆分。

代码语言:javascript
复制
from keras.datasets import cifar10
(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()

# View first image
import matplotlib.pyplot as plt
plt.imshow(X_train[0])
plt.show()

代码语言:javascript
复制
import numpy as np
from sklearn.model_selection import train_test_split

# Concatenate train and test images
X = np.concatenate((X_train,X_test))
y = np.concatenate((Y_train,Y_test))

# Check shape
print(X.shape) # (60000, 32, 32, 3)

# Split data
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=10000, random_state=1234)

# Check shape
print(X_train.shape) # (50000, 32, 32, 3)

# View first image
plt.imshow(X_train[0])
plt.show()

票数 2
EN

Stack Overflow用户

发布于 2018-12-12 05:34:02

这是你要求的一个完整的演示。首先,我们下载数据并将其随机化一次,然后将第一个50K用于训练,其余10K用于验证目的。

代码语言:javascript
复制
In [21]: import tensorflow  
In [22]: import tensorflow.keras.datasets as datasets    
In [23]: cifar10 = datasets.cifar10.load_data() 
In [24]: (X_train, Y_train), (X_test, Y_test) = datasets.cifar10.load_data() 

In [25]: X_train.shape, Y_train.shape 
Out[25]: ((50000, 32, 32, 3), (50000, 1))

In [26]: X_test.shape, Y_test.shape 
Out[26]: ((10000, 32, 32, 3), (10000, 1)) 

In [27]: import numpy as np
In [28]: X, Y = np.vstack((X_train, X_test)), np.vstack((Y_train, Y_test))  

In [29]: X.shape, Y.shape 
Out[29]: ((60000, 32, 32, 3), (60000, 1)) 

In [30]: # Shuffle only the training data along axis 0 
    ...: def shuffle_train_data(X_train, Y_train): 
    ...:     """called after each epoch""" 
    ...:     perm = np.random.permutation(len(Y_train)) 
    ...:     Xtr_shuf = X_train[perm] 
    ...:     Ytr_shuf = Y_train[perm] 
    ...:      
    ...:     return Xtr_shuf, Ytr_shuf 


In [31]: X_shuffled, Y_shuffled = shuffle_train_data(X, Y) 

In [32]: (X_train_new, Y_train_new) = X_shuffled[:50000, ...], Y_shuffled[:50000, ...] 

In [33]: (X_test_new, Y_test_new) = X_shuffled[50000:, ...], Y_shuffled[50000:, ...] 

In [34]: X_train_new.shape, Y_train_new.shape 
Out[34]: ((50000, 32, 32, 3), (50000, 1))

In [35]: X_test_new.shape, Y_test_new.shape 
Out[35]: ((10000, 32, 32, 3), (10000, 1))

我们有一个函数shuffle_train_data,它一致地打乱数据,使示例及其标签保持相同的顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53731141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档