TensorFlow2代码解读(4)

import tensorflow as tf
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)

# 将28x28的图像转换成长度为784的向量
x = tf.reshape(x, [-1, 28*28])
x_test = tf.reshape(x_test, [-1, 28*28])

batch_size = 128

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)


model = Sequential([
    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),
    layers.Dense(10)
])
model.build(input_shape=[None, 28*28])
optimizer = optimizers.Adam(lr=1e-3)

model.compile(optimizer=optimizer,
              loss=tf.losses.MSE,
              metrics=[metrics.CategoricalAccuracy()])

def main():
    model.fit(db, epochs=30, validation_data=db_test)

if __name__ == '__main__':
    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表示根据原始数据的维度自动计算。
batch_size = 128

这行代码定义了批量训练的批次大小,即每次送入模型训练的样本数量。
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。
model = Sequential([
    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),
    layers.Dense(10)
])
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,
              loss=tf.losses.MSE,
              metrics=[metrics.CategoricalAccuracy()])

这行代码编译模型。使用指定的优化器optimizer、损失函数tf.losses.MSE和评估指标metrics.CategoricalAccuracy()来配置模型。
def main():
    model.fit(db, epochs=30, validation_data=db_test)

这里定义了一个main()函数,并在其中使用.fit()方法对模型进行训练。训练数据集为db,训练30个epoch,并且使用验证数据集db_test进行模型的验证。
if __name__ == '__main__':
    main()

这里使用if __name__ == '__main__':判断当前脚本是否直接运行,如果是,则调用main()函数开始执行代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值