从tensorflow_datasets读取的mnist数据集,如何初始化

谷歌把数据集从tensorflow里独立出来了,需要先pip install tensorflow_datasets。但像mnist这样常用的包在原来的地方依然能找到。所有数据的列表在下面的网站:https://tensorflow.google.cn/datasets

回到问题,从tensorflow_datasets读取文件还是很简单的。

import tensorflow as tf
import tensorflow_datasets as tfds

x_train,x_test = tfds.load( name="mnist",split=["train","test"] )
print(x_train)

<PrefetchDataset shapes: {image: (28, 28, 1), label: ()}, types: {image: tf.uint8, label: tf.int64}>
类型是PrefetchDataset,其实就是Dataset,里面包含了两个集image和label。

Dataset我们熟悉,tf.data.Dataset.from_tensor_slices()就会能构造

ds = tf.data.Dataset.from_tensor_slices( ([1,2,3],[3,2,1]) )
print(ds)

<TensorSliceDataset shapes: ((), ()), types: (tf.int32, tf.int32)>
只不过这个叫TensorSliceDataset。

可是我们一般都是在构造dataset前规范数据,而且向量一旦加入到dataset就难以分离了。其实ds.map()是可以实现的,地址如下:https://tensorflow.google.cn/datasets/keras_example
在这里插入图片描述
不想过去看的我截过来了。map第一个参数接收函数指针,它会按照遍历的方式,对数据集的每一个元素执行该函数。这里就是转换类型和归一化。

可能有同学有疑问了这个函数接收2个参数image,label,但组合起来的dataset不是只有被括号括起来的一个参数吗?不会报错吗? 结果真的报错了(要是不报错我要不会发这篇csdn了)
在这里插入图片描述
总的来说就是找不到label。没错,官网给的代码由于年久失修出bug了。
但其实不应该,我们知道通过ds.as_numpy_iterator()的方式可以输出dataset的每一项。执行map和train的时候其实就是调用这个。

我们可以尝试对自己创建的dataset执行map操作,看看是否可行。

def func(x,y):
    return x+1,y-1

ds = ds.map(func) #这里的dataset就是上面的(([1,2,3],[3,2,1]))

for it in ds.as_numpy_iterator():
    print(it)

在这里插入图片描述
确实没问题,不过是否注意到它每一个是一个元组,这是由于我们创建时是用元组组合的,合理猜测如果用list组合这里就是[2,2][3,1][4,0]。

再回头看看mnist数据集是怎样组合的 {image: (28, 28, 1), label: ()},很明显是disk(),那我们只需要按字典方式操作即可。

def a(real):
    return tf.cast(real["image"],dtype=tf.float32)/255 , real["label"]

real = real.map(a)

for it in real.as_numpy_iterator(): #{image:[[[]]] , 'label':}
    print(it)
    break #只看下第一个

在这里插入图片描述
成功转成float32,而且是元组类型了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值