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手写数字识别。希望能够帮助到大家~ 本人小白 写的不好多多谅解
标签:tensor,示例,elem,Dataset,tensorflow2.0,tf,dataset,data 来源: https://blog.csdn.net/weixin_44599230/article/details/120807642