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列