TensorFlow2.0笔记-mnist实战

import tensorflow as tf

(x, y), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# tensorflow中的Keras.datasets中提供了常用的经典数据集比如手写数字数据集mnist,加载后默认保存到C:\Users\Administrator\.keras
# 通过load_data会返回相应格式的数据,返回两个元组tuple,即(x, y), (x_test, y_test),数据都用numpy.array容器承载
print('x:', x.shape, 'y:', y.shape, 'x_test:', x_test.shape, 'y_test:', y_test.shape)

train_data = tf.data.Dataset.from_tensor_slices((x, y))  # 切片
print(train_data)

train_data = train_data.shuffle(10000)   # 随机打散
train_data = train_data.batch(128)   # 批量训练
# 其中128为batch size参数,即一次并行计算128个样本的数据。一般根据用户的GPU显存资源来设置,当显存不足时,可以适量减少batch size来减少算法的显存使用量。


# 自定义数据预处理
def preprocess(a, b):
    # 调用此函数时会自动传入 x,y 对象,shape 为[b, 28, 28], [b]
    a = tf.cast(a, dtype=tf.float32)  # 数据类型转换
    a = a/255                         # 归一化
    a = tf.reshape(a, [-1, 28*28])    # 打平
    b = tf.cast(b, dtype=tf.int32)
    b = tf.one_hot(b, depth=10)       # 独热编码
    return a, b


preprocess(x, y)
train_data = train_data.repeat(20)  # 数据迭代20个epoch


1.

import tensorflow as tf
(x, y), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
# tensorflow中的Keras.datasets中提供了常用的经典数据集比如手写数字数据集mnist,加载后默认保存到C:\Users\Administrator\.keras
# 通过load_data会返回相应格式的数据,返回两个元组tuple,即(x, y), (x_test, y_test),数据都用numpy.array容器承载
print('x:', x.shape, 'y:', y.shape, 'x_test:', x_test.shape, 'y_test:', y_test.shape)

output:

数据集中x y分别为shape为(60000, 28, 28) 和 (60000,)的张量

2.

train_data = tf.data.Dataset.from_tensor_slices((x, y))
print(train_data)
train_data = train_data.shuffle(10000)

output:

tf.data.Datasets.from_tensor_slices()函数的用法:

将输入张量的第一维度进行切割

例如  tf.data.Dataset.from_tensor_slices([3,5,8,9]) ,把3 5 8 9分别切开成单独的

切开之后train的shape变成了(),之前[3, 5, 8, 9]的shape为(4,),说明切开之后由列表变成了一个一个的标量

如果把一个3x2的矩阵切割,矩阵是二维,第一维是行,那么会变成3个1x2的部分

train_data = tf.data.Dataset.from_tensor_slices((x, y))中,我的理解是对x和y都进行切割,切割后按着对应顺序组成一个一个的元组,一共有60000个这样的元组。这样的话就把数据集中每个图片和每个标签对应了起来
train_data = train_data.shuffle(10000)的用法看CSDN收藏夹,随机打散,作用是打乱数据集

3.

# 自定义数据预处理
def preprocess(a, b):
    # 调用此函数时会自动传入 x,y 对象,shape 为[b, 28, 28], [b]
    a = tf.cast(a, dtype=tf.float32)  # 数据类型转换
    a = a/255                         # 归一化
    a = tf.reshape(a, [-1, 28*28])    # 打平
    b = tf.cast(b, dtype=tf.int32)
    b = tf.one_hot(b, depth=10)       # 独热编码
    return a, b
tf.reshape(x, [- 1 , 28 * 28 ]) 将[60000, 28, 28]的张量打平成[60000, 28*28]的形状,60000行,28x28列

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值