from tensorflow.keras import datasets, layers, optimizers, Sequential, metrics
(x, y), (x_test, y_test) = datasets.fashion_mnist.load_data()
x = tf.convert_to_tensor(x, dtype=tf.float32) / 255.
y = tf.convert_to_tensor(y, dtype=tf.int32)
x_test = tf.convert_to_tensor(x_test, dtype=tf.float32) / 255.
y_test = tf.convert_to_tensor(y_test, dtype=tf.int32)
x = tf.reshape(x, [-1, 28*28])
x_test = tf.reshape(x_test, [-1, 28*28])
db = tf.data.Dataset.from_tensor_slices((x, y))
db = db.shuffle(10000).batch(batch_size)
db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.batch(batch_size)
layers.Dense(256, activation=tf.nn.relu),
layers.Dense(128, activation=tf.nn.relu),
layers.Dense(64, activation=tf.nn.relu),
layers.Dense(32, activation=tf.nn.relu),
layers.Dense(16, activation=tf.nn.relu),
model.build(input_shape=[None, 28*28])
optimizer = optimizers.Adam(lr=1e-3)
model.compile(optimizer=optimizer,
metrics=[metrics.CategoricalAccuracy()])
model.fit(db, epochs=30, validation_data=db_test)
if __name__ == '__main__':
(x, y), (x_test, y_test) = datasets.fashion_mnist.load_data()
这行代码从TensorFlow的Fashion MNIST数据集中加载训练集(x, y)和测试集(x_test, y_test)。
x = tf.convert_to_tensor(x, dtype=tf.float32) / 255.
y = tf.convert_to_tensor(y, dtype=tf.int32)
x_test = tf.convert_to_tensor(x_test, dtype=tf.float32) / 255.
y_test = tf.convert_to_tensor(y_test, dtype=tf.int32)
这里将加载的数据转换为张量格式,并对输入图像进行预处理。x和x_test被转换为float32类型,并且通过除以255进行归一化,使像素值在0到1之间。而y和y_test则被转换为int32类型。
x = tf.reshape(x, [-1, 28*28])
x_test = tf.reshape(x_test, [-1, 28*28])
这两行代码将图像数据进行reshape操作,将每张图像从28x28的二维数组转换为长度为784的一维向量。-1表示根据原始数据的维度自动计算。
这行代码定义了批量训练的批次大小,即每次送入模型训练的样本数量。
db = tf.data.Dataset.from_tensor_slices((x, y))
db = db.shuffle(10000).batch(batch_size)
这里使用tf.data.Dataset.from_tensor_slices()将训练数据(x, y)转换为数据集对象db。然后使用.shuffle(10000)对数据集进行混洗操作,打乱样本的顺序。最后使用.batch(batch_size)方法将数据集划分为批次,每个批次的样本数量为batch_size。
db_test = tf.data.Dataset.from_tensor_slices((x_test, y_test))
db_test = db_test.batch(batch_size)
这里使用tf.data.Dataset.from_tensor_slices()将测试数据(x_test, y_test)转换为数据集对象db_test。同样地,使用.batch(batch_size)方法将数据集划分为批次,每个批次的样本数量为batch_size。
layers.Dense(256, activation=tf.nn.relu),
layers.Dense(128, activation=tf.nn.relu),
layers.Dense(64, activation=tf.nn.relu),
layers.Dense(32, activation=tf.nn.relu),
layers.Dense(16, activation=tf.nn.relu),
model.build(input_shape=[None, 28*28])
optimizer = optimizers.Adam(lr=1e-3)
这里定义了一个Sequential模型,并通过layers.Dense添加了一系列全连接层。每个全连接层都有不同的输出大小和激活函数。最后一个全连接层没有指定激活函数,因为这是一个多类别分类问题,概率可以通过softmax函数计算。使用model.build()指定了模型的输入形状为(None, 28*28),其中None表示可以接受任意批次大小。
model.compile(optimizer=optimizer,
metrics=[metrics.CategoricalAccuracy()])
这行代码编译模型。使用指定的优化器optimizer、损失函数tf.losses.MSE和评估指标metrics.CategoricalAccuracy()来配置模型。
model.fit(db, epochs=30, validation_data=db_test)
这里定义了一个main()函数,并在其中使用.fit()方法对模型进行训练。训练数据集为db,训练30个epoch,并且使用验证数据集db_test进行模型的验证。
if __name__ == '__main__':
这里使用if __name__ == '__main__':判断当前脚本是否直接运行,如果是,则调用main()函数开始执行代码。