通往深度学习之路 2___Keras
一、Keras简介
Keras 是由François Chollet 开发的,Keras是一个高级神经网络 API,最初是独立开发的,现在已经集成为 TensorFlow 的一部分。它的设计理念是易用性和模块化,使得用户能够快速构建和实验复杂的神经网络。Keras 以其简洁的接口和友好的开发体验著称,非常适合初学者快速上手,同时也是许多研究人员和开发人员的首选工具。
Keras 的主要特点是:
- 简单易用:用少量代码就能实现复杂的神经网络。
- 模块化:神经网络的每个部分(层、激活函数、损失函数、优化器等)都可以独立组合。
- 跨平台:Keras 可以运行在多个深度学习框架之上,如 TensorFlow、Theano 等。
二、Keras的核心概念
1. 模型(Model)
在 Keras 中,所有的神经网络都以模型 的形式存在。Keras 提供了两种构建模型的方式:
- 序列模型(Sequential Model):适合简单的、按顺序堆叠层的网络。
- 函数式 API(Functional API):适合构建复杂的网络结构,如多输入、多输出或有分支的网络。
2. 序列模型(Sequential Model)
Keras 的 Sequential
模型用于构建简单的神经网络,它按顺序将各个层连接在一起。
示例:构建一个简单的序列模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 创建一个顺序模型
model = Sequential()
# 添加一层全连接层,输入维度为10,输出为50
model.add(Dense(50, input_dim=10, activation='relu'))
# 添加第二个全连接层,输出为1
model.add(Dense(1, activation='sigmoid'))
# 查看模型结构
model.summary()
在上述代码中,我们构建了一个简单的两层全连接神经网络,并使用了 ReLU
和 sigmoid
作为激活函数。model.summary()
可以打印出模型的结构。
3. 函数式 API(Functional API)
函数式 API 允许你构建更复杂的神经网络,如具有分支的模型或多输入多输出模型。
示例:使用函数式 API 构建模型
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, Dense
# 定义输入层
input_layer = Input(shape=(10,))
# 定义隐藏层
hidden_layer = Dense(50, activation='relu')(input_layer)
# 定义输出层
output_layer = Dense(1, activation='sigmoid')(hidden_layer)
# 创建模型
model = Model(inputs=input_layer, outputs=output_layer)
# 查看模型结构
model.summary()
通过函数式 API,我们可以*地定义输入、输出层以及网络的结构,适用于需要自定义复杂架构的情况。
三、Keras中的常用层(Layers)
1. Dense(全连接层)
Dense
层是 Keras 中的全连接层,它的每个神经元与上一层的每个神经元完全连接。
示例:添加一个 Dense 层
model.add(Dense(64, activation='relu'))
Dense(64)
表示该层有 64 个神经元,activation='relu'
指定了使用 ReLU 作为激活函数。
2. 卷积层(Conv2D)
Conv2D
是卷积神经网络中常用的卷积层,主要用于处理图像数据。
示例:添加一个卷积层
from tensorflow.keras.layers import Conv2D
model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
Conv2D(32)
表示使用 32 个卷积核,kernel_size=(3, 3)
表示卷积核的大小是 3x3。
3. 池化层(MaxPooling2D)
MaxPooling2D
是最大池化层,用于降低特征图的尺寸,减少计算量。
示例:添加一个池化层
from tensorflow.keras.layers import MaxPooling2D
model.add(MaxPooling2D(pool_size=(2, 2)))
pool_size=(2, 2)
表示将输入特征图的尺寸缩小一半。
4. Dropout(丢弃层)
Dropout
层用于防止模型过拟合。在训练过程中,它会随机丢弃一部分神经元。
示例:添加一个 Dropout 层
from tensorflow.keras.layers import Dropout
model.add(Dropout(0.5))
Dropout(0.5)
表示在每次训练时随机丢弃 50% 的神经元。
四、编译与训练模型
1. 编译模型
在训练模型之前,需要对其进行编译,指定优化器、损失函数和评估指标。
示例:编译模型
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
-
optimizer='adam'
指定使用 Adam 优化器。 -
loss='binary_crossentropy'
指定使用二分类交叉熵作为损失函数。 -
metrics=['accuracy']
指定使用准确率作为评估指标。
2. 训练模型
使用 fit()
函数进行模型训练,传入训练数据和目标值。
示例:训练模型
# 生成一些随机数据作为训练集
import numpy as np
x_train = np.random.rand(100, 10) # 100个样本,每个样本有10个特征
y_train = np.random.randint(2, size=(100, 1)) # 100个目标值
# 开始训练模型
model.fit(x_train, y_train, epochs=10, batch_size=32)
-
epochs=10
表示模型将在训练集上训练 10 个完整的周期。 -
batch_size=32
表示每次训练用 32 个样本。
3. 评估模型
训练结束后,你可以使用 evaluate()
函数在测试集上评估模型的性能。
示例:评估模型
x_test = np.random.rand(20, 10) # 生成一些随机测试数据
y_test = np.random.randint(2, size=(20, 1))
# 评估模型
loss, accuracy = model.evaluate(x_test, y_test)
print(f"Loss: {loss}, Accuracy: {accuracy}")
4. 预测
你可以使用训练好的模型对新数据进行预测,调用 predict()
函数即可。
示例:预测新数据
x_new = np.random.rand(5, 10) # 生成5条新的数据
predictions = model.predict(x_new)
print(predictions)
五、保存与加载模型
训练好的模型可以保存为文件,之后可以重新加载进行推理或继续训练。
1. 保存模型
model.save('my_model.h5')
这将模型保存为 H5
格式文件。
2. 加载模型
from tensorflow.keras.models import load_model
# 加载模型
loaded_model = load_model('my_model.h5')
六、Keras的常用工具
1. 回调函数(Callbacks)
Keras 提供了丰富的回调函数,用于在训练过程中执行某些操作,如保存模型、调整学习率等。
示例:使用 EarlyStopping 回调函数
from tensorflow.keras.callbacks import EarlyStopping
# 提前停止,当验证集的损失不再下降时停止训练
early_stopping = EarlyStopping(monitor='val_loss', patience=3)
model.fit(x_train, y_train, epochs=50, validation_data=(x_test, y_test), callbacks=[early_stopping])
2. 数据预处理
Keras 提供了强大的数据预处理工具,特别是在图像处理任务中常用的 ImageDataGenerator
。
示例:图像增强
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 定义一个图像数据增强器
datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True
)
# 生成增强后的图像
datagen.fit(x_train)
七、Keras的应用场景
Keras 被广泛应用于以下领域:
- 计算机视觉:图像分类、目标检测、图像生成等。
- 自然语言处理:文本分类、情感分析、机器翻译等。
- 时间序列预测:股市预测、天气预报等。
- 强化学习:策略优化、游戏 AI 等。
八、总结
Keras 以其简洁的 API、模块化的设计和与 TensorFlow 的无缝集成,成为了深度学习领域的重要工具。它不仅适合初学者快速上手【它就跟库一样,调用这个库,无论这个模型多复杂只要一句代码就可以了,而无需与底层打交道,弊端也显而易见】,也为高级用户提供了灵活的功能来构建复杂的神经网络。通过 Keras,用户可以方便地设计、训练、评估和部署深度学习模型。
九、为啥Keras一个API,却可以搭建平台呢?
Keras 作为一个高层 API,它的主要功能是提供一个统一的接口,让开发者可以方便地构建神经网络模型。其背后的强大之处在于它与底层框架的集成,尤其是自从 Keras 成为 TensorFlow 的官方 API 后,它与 TensorFlow 紧密集成,使得它具备了搭建完整深度学习平台的能力。你通过 Keras 定义模型、损失函数、优化器等,Keras 会将这些调用映射到底层 TensorFlow 操作上,从而完成训练和推理。这意味着,Keras 在前端负责模型的定义和用户交互,而后端的计算任务完全由 TensorFlow 处理。
上一篇: 为工单进度表实现 RelationGraph - js 技能提升-2.
下一篇: 什么是插座?