以手写数字MNIST数据集为例,用tf.data模块进行输入操作。

前置知识:

tf.data模块怎么用?创建Dataset以及基本操作(dataset.shuffle、dataset.batch、dataset.repeat)

什么是MNIST 数据集?

MNIST 数据集是美国国家标准与技术研究所(National Institute of Standards and Technology,简称NIST)制作的一个非常简单的数据集。那么该数据集是什么内容呢?其实就是一些手写的阿拉伯数字(0到9十个数字)。

数据集

代码实战

初步使用:

import tensorflow as tf

# 加载mnist数据集
(train_images, train_labels),(test_images, test_labels) = tf.keras.datasets.mnist.load_data()

# 图片归一化处理
train_images = train_images/255
test_images = test_images/255

# 使用from_tensor_slices进行处理,转化为Tensor类型
ds_train_imgs = tf.data.Dataset.from_tensor_slices(train_images)
ds_train_labels = tf.data.Dataset.from_tensor_slices(train_labels)

#把图片和标签用zip捆绑起来(元组形式)
ds_train = tf.data.Dataset.zip((ds_train_imgs, ds_train_labels)) 

ds_train = ds_train.shuffle(1000).repeat().batch(64)  # 对1000个配对元组进行乱序

# 神经网络模型的建立
model = tf.keras.Sequential([
        tf.keras.layers.Flatten(input_shape=(28,28)),     # 输入层,把图像扁平成28*28的向量
        tf.keras.layers.Dense(128, activation='relu'),    # 添加隐藏层
        tf.keras.layers.Dense(10, activation='softmax')   # 输出十个概率值,softmax概率分布
                            ])

# 编译
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',   #输入数据的类别标签采用序号编码
              metrics = ['accuracy']
)

steps_per_epochs = train_images.shape[0]//64 # 由于上面的repeat是无限循环,需要知道每一次训练的步长
# 用//除以是为了结果为整数

# 进行训练
model.fit(ds_train, epochs = 5, steps_per_epoch = steps_per_epochs) 

训练结果:

训练结果

那么,如何把测试数据也加进来呢?当然是可以的。

import tensorflow as tf

(train_images, train_labels),(test_images, test_labels) = tf.keras.datasets.mnist.load_data()

# 图片归一化处理
train_images = train_images/255
test_images = test_images/255

# 使用from_tensor_slices进行处理,转化为Tensor类型
ds_train_imgs = tf.data.Dataset.from_tensor_slices(train_images)
ds_train_labels = tf.data.Dataset.from_tensor_slices(train_labels)

# 把训练数据添加进来,直接以元组的形式
ds_test = tf.data.Dataset.from_tensor_slices((test_images, test_labels))

ds_train = tf.data.Dataset.zip((ds_train_imgs, ds_train_labels)) #把图片和标签捆绑起来(元组形式)

ds_train = ds_train.shuffle(1000).repeat().batch(64)  # 对1000个配对元组进行乱序
ds_test = ds_test.batch(64)                         # 对测试的数据也进行切分

# 神经网络模型的建立
model = tf.keras.Sequential([
        tf.keras.layers.Flatten(input_shape=(28,28)),     # 输入层,把图像扁平成28*28的向量
        tf.keras.layers.Dense(128, activation='relu'),    # 添加隐藏层
        tf.keras.layers.Dense(10, activation='softmax')   # 输出十个概率值,softmax概率分布
                            ])

# 编译
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',   #输入数据的类别标签采用序号编码
              metrics = ['accuracy']
)

steps_per_epochs = train_images.shape[0]//64 # 由于上面的repeat是无限循环,需要知道每一次训练的步长
# 用//除以是为了结果为整数

# 进行训练
model.fit(ds_train, 
          epochs = 5, 
          steps_per_epoch = steps_per_epochs, 
          validation_data=ds_test,
          validation_steps=10000//64) 

带上测试数据

tf.data.Dataset.zip()

通过将给定的数据集压缩在一起创建一个“数据集”。

tf.data里的zip函数示例


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/tfdata2.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 09 月 14 日
如果觉得我的文章对你有用,请随意赞赏