tensorflow2.0 tf.data 简单示例 以及实现mnist手写数字识别

本文详细讲解了如何使用tf.data处理数据,包括from_tensor_slices、shuffle、repeat、batch等方法,并通过实例演示了如何将这些技术应用于MNIST手写数字分类任务,助力读者理解数据集操作和模型训练流程。
摘要由CSDN通过智能技术生成

一、tf.data 简单示例

1.引入库

代码如下(示例):

import tensorflow as tf
import numpy as np

2.tf.data.Dataset.from_tensor_slices

代码如下(示例):

dataset=tf.data.Dataset.from_tensor_slices([[1,2],[3,4],[5,6]])
for elem in dataset:
    print(elem)

请添加图片描述

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
for elem in dataset:
    print(elem)

请添加图片描述

3.tf.data.Dataset.from_tensor_slices封装字典数据

dataset_dict=tf.data.Dataset.from_tensor_slices({
    'a':[1,2,3,4],
    'b':[6,7,8,9],
    'c':[8,9,10,11]
})
for elem in dataset_dict:
    print(elem)

请添加图片描述
打印出4个字典,因为原数据字典的值的列表有四个元素,打印出的四个字典的键还是原字典的键,值只有一个,循环取列表中的数,即
a:1 b:6 c:8
a:2 b:7 c:9
a:3 b:8 c:10
a:4 b:9 c:11

4.take方法

take方法传入一个参数,代表取前几个元素

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
for elem in dataset.take(4):
    print(elem)

请添加图片描述
取出前四个元素

5.shuffle方法

对数据进行打乱,参数buffer_size代表对多少个数据打乱

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
dataset=dataset.shuffle(buffer_size=6)
for elem in dataset:
    print(elem)

请添加图片描述

6.repeat方法

传入参数count,即循环遍历几次,如果不指定参数count,则一直循环直到满足终止条件

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
dataset=dataset.repeat(count=3)
for elem in dataset:
    print(elem)

请添加图片描述
每6个是一轮,count=3打印三轮,则打印出18个元素

7.batch方法

传入参数batch_size,代表每次取几个元素

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
dataset=dataset.batch(batch_size=3)
for elem in dataset:
    print(elem)

请添加图片描述
每次取三个元素,取两次就能取完

8.三种方法一起使用

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
dataset=dataset.shuffle(buffer_size=6)
dataset=dataset.repeat(count=3)
dataset=dataset.batch(batch_size=3)
for elem in dataset:
    print(elem)

请添加图片描述
batch_size=3,所以一轮只用打印两次,count=3,打印3轮,则打印了六次

9.map方法

对所有数据进行某种运算

dataset=tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6]))
dataset=dataset.map(tf.square)#对所有数据平方运算
for elem in dataset:
    print(elem)

请添加图片描述

二、mnist手写数字分类实现

import tensorflow as tf
(train_image,train_label),(test_image,test_label)=tf.keras.datasets.mnist.load_data()

train_image=train_image/255
test_image=test_image/255#把数据转化为0-1之间

#tf.data封装数据
ds_train_image=tf.data.Dataset.from_tensor_slices(train_image)
ds_test_image=tf.data.Dataset.from_tensor_slices(test_image)
ds_train_label=tf.data.Dataset.from_tensor_slices(train_label)
ds_test_label=tf.data.Dataset.from_tensor_slices(test_label)

#数据和标签合并
ds_train=tf.data.Dataset.zip((ds_train_image,ds_train_label))
ds_test=tf.data.Dataset.zip((ds_test_image,ds_test_label))

ds_train=ds_train.shuffle(buffer_size=10000).repeat().batch(batch_size=64)
ds_test=ds_test.batch(batch_size=64)

#构建模型
model=tf.keras.Sequential([
    tf.keras.layers.Flatten(input_shape=(28,28)),
    tf.keras.layers.Dense(128,activation='relu'),
    tf.keras.layers.Dense(10,activation='softmax')
])

model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['acc'])

steps_per_epoch=train_image.shape[0]/64#每个epoch需要迭代多少个batch  用样本总数除以batch_size大小
validation_steps=test_image.shape[0]/64

model.fit(ds_train,
          epochs=5,
          steps_per_epoch=steps_per_epoch,
          validation_data=ds_test,
         validation_steps=validation_steps)

总结

以上就是今天要讲的内容,本文仅仅简单介绍了tf.data的使用,例举了几个简单的例子,以及实现mnist手写数字识别。希望能够帮助到大家~ 本人小白 写的不好多多谅解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TensorFlow 2.是一个流行的深度学习框架,可以用于许多不同的任务,包括手写数字识别手写数字识别是一个经典的机器学习问题,它涉及将手写数字图像分类为数字到9中的一个。 在TensorFlow 2.中,可以使用Keras API来构建和训练模型。以下是一个简单手写数字识别模型的示例代码: ```python import tensorflow as tf from tensorflow import keras # 加载MNIST数据集 mnist = keras.datasets.mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() # 将图像数据归一化到到1之间 train_images = train_images / 255. test_images = test_images / 255. # 定义模型 model = keras.Sequential([ keras.layers.Flatten(input_shape=(28, 28)), keras.layers.Dense(128, activation='relu'), keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=5) # 评估模型 test_loss, test_acc = model.evaluate(test_images, test_labels) print('Test accuracy:', test_acc) ``` 在这个例子中,我们首先加载MNIST数据集,然后将图像数据归一化到到1之间。接下来,我们定义一个简单的神经网络模型,该模型包括一个输入层、一个隐藏层和一个输出层。我们使用ReLU激活函数和softmax激活函数来激活隐藏层和输出层。最后,我们编译模型并训练它,使用Adam优化器和稀疏分类交叉熵损失函数。在训练完成后,我们评估模型的性能,输出测试准确率。 这只是一个简单的例子,你可以根据需要调整模型的结构和超参数来获得更好的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44599230

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值