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

一、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手写数字识别。希望能够帮助到大家~ 本人小白 写的不好多多谅解

猜你喜欢

转载自blog.csdn.net/weixin_44599230/article/details/120807642
今日推荐