深度学习第一课 TensorFlow2.0开发首选API - Keras

发布时间:2023年12月18日

????????Keras是一个非常非常非常方便的深度学习框架,它以TensorFlow或Theano为后端。它可以快速地搭建深度网络,灵活地选取训练参数来进行网路训练。特点显著:灵活+高效!!!

目录

Keras优势介绍

易用性

灵活性与高效性

社区和生态系统

TensorFlow2.0的高级API

Keras特性

直观的API设计

构建一个简单的神经网络

模块化和可组合性

自定义网络层

扩展性

使用预训练模型

高级功能

自定义回调

Keras后端?

TensorFlow作为后端

检查和设置后端

Keras数据类型?

图像数据处理

使用Keras预处理图像数据

文本数据处理

使用Keras预处理文本数据

序列数据处理

处理序列数据

Keras模型

序贯模型(Sequential Model)

创建序贯模型

函数式API

使用函数式API

模型训练与评估

编译和训练模型

模型保存和恢复

保存和加载模型

总结


Keras优势介绍

????????Keras是一个高层神经网络API,以用户友好、模块化和可扩展为其核心特点。作为TensorFlow2.0的官方高级API,Keras让深度学习的开发变得更加直观和便捷。

易用性

  • 直观的API:Keras设计简洁,API直观易懂,使得构建标准网络(如卷积神经网络、循环神经网络)变得非常简单。
  • 快速原型制作:Keras支持快速的原型设计和实验,使研究者能够尽快看到实验结果。

灵活性与高效性

  • 灵活的网络构建:Keras支持多种类型的神经网络层,用户可以轻松定制和组合来构建复杂的网络结构。
  • 高效的数据处理:Keras集成了高效的数据预处理工具,支持批量数据处理和数据增强,提高了模型训练的效率。

社区和生态系统

  • 强大的社区支持:作为流行的开源项目,Keras拥有活跃的社区,丰富的教程和文档资源,易于新手学习和使用。
  • 广泛的生态系统:Keras集成了大量预训练模型和扩展工具,使得用户可以轻松应对各种深度学习任务。

TensorFlow2.0的高级API

  • 与TensorFlow的深度集成:在TensorFlow 2.0中,Keras被作为核心API深度集成,提供了更好的性能和更紧密的集成体验。
  • 更好的性能:与TensorFlow的紧密集成使得Keras在训练和推理时能够充分利用TensorFlow的性能优化,特别是在GPU和TPU上的运行。

Keras特性

直观的API设计

Keras的API设计注重用户体验,使得初学者和研究人员都能快速上手。

构建一个简单的神经网络

我们使用了Sequential模型来快速构建一个多层神经网络。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential([
    Dense(64, activation='relu', input_shape=(784,)),
    Dense(64, activation='relu'),
    Dense(10, activation='softmax')
])

模块化和可组合性

Keras中的网络层是可插拔的,可以灵活组合不同的层来构建各种复杂的网络结构。

自定义网络层

from tensorflow.keras.layers import Lambda
from tensorflow.keras import backend as K

# 自定义一个Keras层,实现一个简单的线性转换:output = input * 2
def double_layer(input):
    return Lambda(lambda x: x * 2)(input)

# 使用自定义层
model.add(double_layer)

扩展性

Keras提供了众多的预训练模型,这些模型可以直接用于迁移学习,加快开发进程。

使用预训练模型

from tensorflow.keras.applications import VGG16

# 加载预训练的VGG16模型
model = VGG16(weights='imagenet', include_top=False)

高级功能

Keras支持自定义回调函数,这使得在训练过程中可以灵活地进行日志记录、模型保存、参数调整等操作。

自定义回调

from tensorflow.keras.callbacks import EarlyStopping

# 使用早停法来防止过拟合
early_stopping = EarlyStopping(monitor='val_loss', patience=2)
model.fit(x_train, y_train, validation_data=(x_val, y_val), callbacks=[early_stopping])

Keras后端?

????????Keras是一个模型级别的库,提供了高级的神经网络抽象,而实际的数学运算则由“后端”处理。Keras可以使用多种后端引擎,最常用的是TensorFlow,还包括Theano和CNTK。

TensorFlow作为后端

TensorFlow作为默认后端,与Keras的集成尤为紧密,特别是在TensorFlow 2.0及以上版本中。

检查和设置后端

from tensorflow.keras import backend as K

# 打印当前后端
print("Current backend:", K.backend())

# 注意: Keras的后端一旦设置,就不能在运行时更改

Keras数据类型?

????????Keras提供了强大的工具来处理各种类型的数据,包括图像、文本和序列数据。理解如何有效地使用Keras进行数据处理和预处理对于构建高效的深度学习模型至关重要。

图像数据处理

图像是深度学习中常见的数据类型之一。Keras提供了一系列工具来处理图像数据。

使用Keras预处理图像数据

ImageDataGenerator用于图像的数据增强,帮助提高模型的泛化能力。

from tensorflow.keras.preprocessing.image import ImageDataGenerator

# 实例化一个图像数据生成器,并设置数据增强参数
data_gen = ImageDataGenerator(
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)

# 应用数据生成器到训练数据
train_data = data_gen.flow_from_directory('path/to/train_data', target_size=(256, 256))

文本数据处理

处理文本数据是NLP(自然语言处理)中的一个重要部分。Keras提供了文本预处理的功能。

使用Keras预处理文本数据

from tensorflow.keras.preprocessing.text import Tokenizer

# 创建一个tokenizer实例
tokenizer = Tokenizer(num_words=1000)
tokenizer.fit_on_texts(train_texts)

# 将文本转换为序列
sequences = tokenizer.texts_to_sequences(train_texts)

# 将序列填充到相同的长度
from tensorflow.keras.preprocessing.sequence import pad_sequences
data = pad_sequences(sequences, maxlen=100)

序列数据处理

对于处理时间序列数据或相关问题,Keras提供了多种处理方法。

处理序列数据

from tensorflow.keras.preprocessing.sequence import pad_sequences

# 假设sequences是已经编码的序列数据
padded_sequences = pad_sequences(sequences, padding='post')

Keras模型

????????Keras提供了灵活的方式来构建、训练和评估深度学习模型。了解这些功能及其使用方法对于创建高效的深度学习模型至关重要。

序贯模型(Sequential Model)

序贯模型是构建神经网络的最简单方式之一。它允许你通过简单地堆叠层来创建模型。

创建序贯模型

如何使用Keras的Sequential模型来构建一个简单的多层感知器。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten

model = Sequential([
    Flatten(input_shape=(28, 28)),  # 将输入展平
    Dense(128, activation='relu'),  # 全连接层
    Dense(10, activation='softmax') # 输出层
])

函数式API

对于更复杂的模型,如具有多输入或多输出的模型,Keras的函数式API提供了更大的灵活性。

使用函数式API

from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense, Concatenate

# 定义模型输入
input_a = Input(shape=(32,))
input_b = Input(shape=(32,))

# 创建多个层
dense_1 = Dense(32, activation='relu')(input_a)
dense_2 = Dense(32, activation='relu')(input_b)
concatenated = Concatenate()([dense_1, dense_2])

output = Dense(1, activation='sigmoid')(concatenated)

# 创建模型
model = Model(inputs=[input_a, input_b], outputs=output)

模型训练与评估

Keras使模型的编译、训练和评估变得非常简单。

编译和训练模型

编译模型,指定优化器、损失函数和评估指标,然后训练模型并在测试数据上进行评估。

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(train_data, train_labels, epochs=10)
model.evaluate(test_data, test_labels)

模型保存和恢复

Keras提供了保存和加载模型的功能,这对于模型的部署和迁移学习非常有用。

保存和加载模型

# 保存模型
model.save('my_model.h5')

# 加载模型
from tensorflow.keras.models import load_model
loaded_model = load_model('my_model.h5')

总结

????????Keras作为一个高效、灵活且用户友好的深度学习框架,在快速原型设计、研究项目和产业应用中都展示了其强大能力。无论你是刚开始接触深度学习,还是希望在现有基础上进一步提高,Keras都是一个值得深入学习和探索的工具。

----------------------------

欢迎评论交流、觉得不错点赞支持一下吧~

文章来源:https://blog.csdn.net/qq_52213943/article/details/126374954
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。