📜  TensorFlow-Keras(1)

📅  最后修改于: 2023-12-03 15:05:32.501000             🧑  作者: Mango

TensorFlow-Keras: 介绍和入门指南

TensorFlow-Keras 是由 Google 开发的深度学习框架 TensorFlow 的高级 API,它可以使深度学习模型的构建和训练变得更加快速、简单和灵活。Keras 被设计为易于使用且可扩展的框架,允许用户以模块化、可重用的方式生成复杂的神经网络模型。

安装

通过 pip 安装 TensorFlow 和 Keras:

pip install tensorflow
pip install keras
快速入门

下面是 TensorFlow-Keras 实现图像分类的一个简单示例:

from tensorflow import keras

# 加载数据集
(x_train, y_train), (x_test, y_test) = keras.datasets.fashion_mnist.load_data()

# 预处理数据
x_train = x_train.astype("float32") / 255.0
x_test = x_test.astype("float32") / 255.0

# 定义模型
model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation="relu"),
    keras.layers.Dense(10),
])

# 编译模型
model.compile(
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    optimizer=keras.optimizers.Adam(lr=0.001),
    metrics=["accuracy"],
)

# 训练模型
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))

# 评估模型
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print("\nTest accuracy:", test_acc)

这段代码演示了如何通过 Keras 的 Sequential API 来创建一个多层感知机(MLP),它由图像数据的扁平化层、密集层和输出层组成。我们使用了标准的 Fashion MNIST 数据集来评估模型的准确性。

构建模型

我们可以使用 Keras 的 Sequential API 来构建深度学习模型。Sequential API 是一种线性堆叠模型的简单方式,它允许我们按照线性顺序将不同的层组合在一起。下面是一个 Sequential 模型的例子:

from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(64, activation="relu"),
    keras.layers.Dense(10),
])

上面代码定义了一个包含两个 Dense 层(也就是全连接层)的模型。第一个层有 64 个神经元,使用 ReLU 激活函数,第二个层输出 10 个神经元(对应 10 类分类问题),默认使用线性激活函数。前面的层的输出必须与后面层的输入相匹配。

编译模型

在我们训练模型之前,我们需要使用 compile 方法来配置模型的训练过程。compile 可以指定模型的损失函数、优化器和评估指标。例如:

model.compile(
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    optimizer=keras.optimizers.Adam(learning_rate=0.001),
    metrics=["accuracy"],
)

上面代码使用了 SparseCategoricalCrossentropy 作为损失函数,Adam 作为优化器,accuracy 作为评估指标。loss 参数可以是一个字符串,也可以是一个由 tf.keras.losses 模块所定义的损失函数对象。

训练模型

一旦我们定义了一个模型并编译好它,我们就可以使用 fit 方法来训练它。在训练过程中,我们会传递训练数据、验证数据、批大小、训练轮数等参数。例如:

history = model.fit(
    x_train, y_train, 
    epochs=10, 
    batch_size=32, 
    validation_data=(x_test, y_test),
)

上面代码训练了模型 10 个轮次,同时使用了 32 个样本组成的小批量(mini-batch)数据,验证数据用来检查模型在未见过的数据集上的表现。fit 方法将返回一个包含训练指标和验证指标的 history 对象。

评估模型

我们可以使用 evaluate 方法来评估模型。evaluate 方法返回的损失和指标会在模型被训练完成后自动计算。例如:

test_loss, test_acc = model.evaluate(x_test, y_test)
print('Test accuracy:', test_acc)

我们可以使用 predict 方法来使用训练好的模型进行预测并生成输出。例如:

predictions = model.predict(x_test)

这会在测试数据集上生成预测结果,其中每个预测结果都是一个长度为 10 的向量,表示样本属于 10 个可能的分类之一的概率(softmax 函数的输出结果)。

可视化结果

使用 Matplotlib 可以可视化训练和验证指标。例如:

import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label='val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend(loc='lower right')
plt.show()

这会显示出训练和验证准确率随时间的变化情况。如果训练指标和验证指标之间存在较大的差异,则可能表明模型出现了过拟合的情况。

总结

在本文中,我们简要介绍了如何使用 TensorFlow-Keras 构建、编译、训练和评估深度学习模型。虽然上面给出的是非常简单的示例,但是 TensorFlow-Keras 在处理更复杂的任务时同样非常强大,例如图像分类自然语言处理图像生成增强学习等。如果您是一位新手,可以从基础知识开始学习 TensorFlow 和 Keras;如果您已经具有一些经验,可以尝试解决更高级、更挑战的问题。