学习笔记||tensorflow-tf.data模块

轻松读取和处理数据,处理速度很快。创建数据集tf.data.Dataset表示一系列元素。

import tensorflow as tf

#建立dataset
#使用from_tensor_slices将输入的数据切片,使其变成dataset中的组件
dataset = tf.data.Dataset.from_tensor_slices([1, 2, 3, 4, 5, 6, 7])

#对其进行迭代
for ele in dataset:
    print(ele)

#输出结果中可以看到dataset将每一个切片转换为Tensor数据类型

#也可以将其转化为numpy数据类型
for ele in dataset:
    print(ele.numpy()) #TSF2.0专用

#建立二维列表
dataset = tf.data.Dataset.from_tensor_slices([[1,2],[3,4],[5,6]])
dataset
#运行结果显示每个组件都是长度为2的向量

#使用字典创建dataset
dataset_dic = tf.data.Dataset.from_tensor_slices({'a':[1,2,3,4],
                                                  'b':[6,7,8,9],
                                                  'c':[12,13,14,15]
                                                 })
dataset_dic #形状是列表
for ele in dataset_dic:
    print(ele)

使用np.array来创建dataset

import numpy as np

#使用np.array来创建dataset
dataset = tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6,7]))

for ele in dataset:
    print(ele)

for ele in dataset:
    print(ele.numpy())

#取出一些数据
for ele in dataset.take(4): #取出前四个
    print(ele.numpy())

next(iter(dataset.take(1)))

使dataset中的数据发生一些变化:乱序%重复

#dataset的变化

#乱序
dataset = dataset.shuffle(7) #一般使用shuffle所有的数据进行乱序

#重复
dataset = dataset.repeat(count=3) #参数默认为None,无限重复

for ele in dataset:
    print(ele.numpy())

        在神经网络训练中,对于图片最好按批次进行训练,因为内存可能不够大。dataset提供了一个batch方法,可以将训练数据分批次输入。

dataset = dataset.shuffle(7)
dataset = dataset.repeat(count=3) 
dataset = dataset.batch(3) 
for ele in dataset:
    print(ele.numpy())

dataset还可以应用函数对数据进行乱序

dataset = tf.data.Dataset.from_tensor_slices(np.array([1,2,3,4,5,6,7]))
#将每一个数据都变成平方
dataset = dataset.map(tf.square) #tf.square是平方函数
for ele in dataset:
    print(ele.numpy())

tf.data输入模块实例 

import tensorflow as tf

#导入数据集
(train_images, train_labels),(test_images,test_labels) = tf.keras.datasets.fashion_mnist.load_data()

#数据归一化
train_images = train_images / 255
test_images = test_images /255

#创建训练数据集ds_train
ds_train_img = tf.data.Dataset.from_tensor_slices(train_images)
ds_train_lab = tf.data.Dataset.from_tensor_slices(train_labels)
ds_train = tf.data.Dataset.zip((ds_train_img,ds_train_lab))
ds_train = ds_train.shuffle(10000).repeat().batch(64)

#创建测试数据集ds_test
ds_test_img = tf.data.Dataset.from_tensor_slices(test_images)
ds_test_lab = tf.data.Dataset.from_tensor_slices(test_labels)
ds_test = tf.data.Dataset.zip((ds_test_img,ds_test_lab))
#test数据集不必要shuffle,会默认repeat,batch还是有必要的
ds_test = ds_test.batch(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=['accuracy'])

#需要告诉程序一个epoch是迭代多少步,结果得是整除
steps_per_epochs = train_images.shape[0]//64 #shape的第一个维度是它的大小

#模型编译
model.fit(ds_train,epochs=5,
          steps_per_epoch=steps_per_epochs,
          validation_data=ds_test,
          validation_steps=10000//64)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值