Press "Enter" to skip to content

【TensorFlow】数据集的加载与处理学习笔记

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

TensorFlow(或者说深度学习领域)中常见的且自带的数据集有:

 

MNIST:手写数字识别,手写数字数据集。被称为深度学习的“hello world”。

 

CIFAR10/100:小型图片数据集。

 

IMDB:电影评论数据集。

 

BOSTON HONSING:波士顿房价预测。(这个不介绍,因为我没玩过
但是也很常见)

 

import tensorflow as tf

 

MNIST:

 

加载MNIST数据集:

 

(train_x,train_y),(test_x,test_y)=tf.keras.datasets.mnist.load_data()

 

返回的数据集分为两类,前面的是训练集,后面的是验证集.

 

训练集的数量有60K,验证集的数量有10K.训练集和验证集中x的形状都是(28,28),y的值为0~9(分别代表手写数字是什幺)

 

一般的处理方式:

 

#将x的值的范围缩小在0~1之间,为了便于深度学习的计算
#将y的值的类型转为int
def preprocess(x,y):
    x=tf.cast(x,dtype=tf.float32)/255.
    y=tf.cast(y,dtype=tf.int32)
    return x,y
#下载MNIST数据集
(train_x,train_y),(text_x,text_y)=datasets.fashion_mnist.load_data()
#获取以train_x和train_y为元素的训练集迭代器
db=tf.data.Dataset.from_tensor_slices((x,y))
#将训练集打乱顺序并且分为每批次100个数量
db=db.map(preprocess).shuffle(6000).batch(100)
#获取以test_x和test_y为元素的验证集迭代器
test_db=tf.data.Dataset.from_tensor_slices((text_x,text_y))
test_db=test_db.map(preprocess).batch(100)

 

CIFAR10/100:

 

加载CIFAR10/100数据集:

 

#加载CIFAR10数据集
(train_x,train_y),(test_x,test_y)=tf.keras.datasets.cifar10.load_data()
#加载CIFAR100数据集
(train_x,train_y),(test_x,test_y)=tf.keras.datasets.cifar10.load_data()

 

CIFAR10和CIFAR100的内容是一样的,是各种物品的图片,但CIFAR10将图片大体分为了10类,而CIFAR100细分成了100类.

 

训练集的数量为50K,验证集的数量为10K.x的形状为(32,32,3),y的形状为(1,)(所以y得降维成一维才能正常使用)

 

一般的处理方式:(以CIFAR100为例)

 

#将x的值的范围变成0~1,以便深度学习的计算
#将y的值的类型变成int
def prepare(x,y):
    x=tf.cast(x,dtype=tf.float32)/255.
    y=tf.cast(y,dtype=tf.int32)
    return x,y
#下载CIFAR100数据集
(x,y),(test_x,test_y)=datasets.cifar100.load_data()
#将y的形状由(1,)变成(1)
y=tf.squeeze(y,axis=1)
test_y=tf.squeeze(test_y,axis=1)
#生成训练集和验证集的迭代器
db=tf.data.Dataset.from_tensor_slices((x,y))
test_db=tf.data.Dataset.from_tensor_slices((test_x,test_y))
#数据预处理,打乱数据集的顺序并且分好批次.
db=db.map(prepare).shuffle(50000).batch(64)
test_db=test_db.map(prepare).batch(64)

 

IMDB:

 

加载IMDB数据集:

 

(train_x,train_y),(test_x,test_y)=tf.keras.datasets.imdb,load_data(num_words=10000)

 

返回的验证集为25K,验证集为25K.下载的参数”num_words”为所加载的数据集含的单词数,一般来说10000就足够了(我一大学生连1000的词汇量都还没有
)

 

x为电影评论.y为0或1,1表示好评,0表示差评.

 

一般的处理方式:

 

#加载IMDB数据集
(train_x,train_y),(test_x,test_y)=datasets.imdb.load_data(num_words=total_words)
#将x进行长度的限制
train_x=keras.preprocessing.sequence.pad_sequences(x,maxlen=max_review_len)
test_x=keras.preprocessing.sequence.pad_sequences(test_x,maxlen=max_review_len)
#生成训练集迭代器
db=tf.data.Dataset.from_tensor_slices((train_x,train_y))
#打乱数据集并且分批次
#drop_remainder:是否删除余数
db=db.shuffle(1000).batch(batches,drop_remainder=True)
test_db=tf.data.Dataset.from_tensor_slices((test_x,test_y))
test_db=test_db.batch(batches,drop_remainder=True)

 

自定义数据集:

 

大多情况下我们深度学习要用自己的数据集,而有时候数据集过少而容易导致训练效果不佳,则可以进行数据增强.

 

x=tf.image.random_flip_up_down(x)

 

将图片随机进行上下翻转.

 

x=tf.image.random_flip_left_right(x)

 

将图片随机进行左右翻转.

 

x=tf.image.random_crap(x,shape)

 

将图片进行随机裁剪.

 

x=tf.image.random_brightness(x,max_delta=最大改变量)

 

将图片的亮度随机的改变,最大改变量为max_delta,且必须为非负数.

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。