-
概述
- Keras 是一个高级神经网络 API,它用 Python 语言编写,能够在 TensorFlow、Theano 或者 CNTK 等深度学习框架之上运行。它的设计理念是简单、快速地构建和实验深度学习模型。Keras 提供了易于使用的接口,使得用户可以专注于模型架构的设计和训练,而不必深入了解底层复杂的计算细节。
-
核心组件
-
模型(Model)
- Sequential 模型:这是最常用的模型类型,用于构建简单的层堆叠式神经网络。例如,构建一个简单的多层感知机(MLP)用于图像分类任务:
pythonfrom keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(128, activation='relu', input_shape=(784,))) model.add(Dense(10, activation='softmax'))
- 这里创建了一个 Sequential 模型,首先添加了一个具有 128 个神经元、激活函数为 ReLU 的全连接层(Dense 层),输入形状为 784(假设是将 28×28 的图像数据展平后的长度),然后添加了一个具有 10 个神经元、激活函数为 softmax 的全连接层用于分类。
- 函数式 API 模型:对于更复杂的模型架构,如具有多个输入或输出、共享层等情况,使用函数式 API 来构建模型。例如,构建一个简单的多输入模型:
pythonfrom keras.layers import Input, Dense from keras.models import Model input_1 = Input(shape=(32,)) input_2 = Input(shape=(64,)) x = Dense(16, activation='relu')(input_1) y = Dense(16, activation='relu')(input_2) output = Dense(1, activation='sigmoid')(x + y) model = Model(inputs=[input_1, input_2], outputs=output)
- 这里定义了两个输入层,分别对两个输入进行处理后相加,再通过一个输出层得到最终输出,然后构建了一个具有两个输入和一个输出的模型。
-
层(Layer)
- Keras 有多种类型的层,如全连接层(Dense)、卷积层(Conv2D 等)、池化层(MaxPooling2D 等)、循环层(LSTM、GRU 等)。
- 全连接层(Dense):用于构建多层感知机等模型。例如,
Dense(64, activation='relu')
表示一个有 64 个神经元、激活函数为 ReLU 的全连接层。神经元之间全连接,即每个神经元与上一层和下一层的所有神经元都有连接。 - 卷积层(Conv2D):在处理图像等具有网格结构的数据时非常有用。例如,
Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))
表示一个卷积层,有 32 个卷积核,每个卷积核的大小为 3×3,激活函数为 ReLU,输入形状为 28×28×1(假设是单通道的灰度图像)。卷积层通过卷积核在输入数据上滑动进行卷积操作,提取图像中的局部特征。 - 池化层(MaxPooling2D):用于对数据进行下采样,减少数据量的同时保留重要信息。例如,
MaxPooling2D((2, 2))
表示一个池化层,它会在 2×2 的区域内取最大值,将输入数据的尺寸在高度和宽度方向上都缩小一半。
-
优化器(Optimizer)
- Keras 提供了多种优化器,如随机梯度下降(SGD)、Adagrad、Adadelta、RMSProp 和 Adam 等。优化器用于更新模型的权重,以最小化损失函数。例如,在编译模型时可以选择优化器:
pythonmodel.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
- 这里选择了 Adam 优化器,损失函数为分类交叉熵(categorical_crossentropy),评估指标为准确率(accuracy)。不同的优化器有不同的特点,Adam 优化器在很多情况下具有较好的收敛速度和性能。
-
损失函数(Loss Function)
- 损失函数用于衡量模型预测结果与真实值之间的差异程度。常见的损失函数有均方误差(MSE)用于回归任务,分类交叉熵(Cross - Entropy)用于分类任务。例如,对于回归任务:
pythonmodel.compile(optimizer='adam', loss='mse', metrics=['mae'])
- 这里使用均方误差作为损失函数,平均绝对误差(MAE)作为评估指标。对于分类任务,分类交叉熵能够有效地衡量模型预测概率分布与真实标签概率分布之间的差异。
-
评估指标(Metrics)
- 评估指标用于衡量模型的性能。除了前面提到的准确率(accuracy)和平均绝对误差(MAE),还有如召回率(Recall)、精确率(Precision)、F1 - score 等用于分类任务的指标,以及决定系数(R - squared)等用于回归任务的指标。例如,在多分类任务中可以使用以下评估指标:
pythonfrom keras.metrics import Precision, Recall, F1Score model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=[Precision(), Recall(), F1Score()])
- 这里编译模型时加入了精确率、召回率和 F1 - score 作为评估指标,这些指标可以从不同角度评估模型在分类任务中的性能。
-
模型(Model)
-
工作流程
- 数据准备:首先需要准备好训练数据和测试数据,通常要将数据进行预处理,如归一化、划分数据集等操作。例如,对于图像数据,可能需要将像素值归一化到 [0, 1] 区间。
- 模型构建:根据任务需求,使用 Sequential 模型或者函数式 API 构建模型,选择合适的层、激活函数等组件。
- 模型编译:选择优化器、损失函数和评估指标来编译模型。这一步设置了模型训练的规则。
- 模型训练:使用训练数据对模型进行训练,通常通过调用
model.fit()
函数。例如,model.fit(x_train, y_train, epochs=10, batch_size=32)
表示使用训练数据x_train
和y_train
对模型进行 10 个轮次(epochs)的训练,每次训练使用 32 个样本(batch_size)。 - 模型评估:使用测试数据对训练好的模型进行评估,通过调用
model.evaluate()
函数,它会返回损失值和评估指标的值,用于判断模型的性能好坏。 - 模型预测:使用训练好的模型对新的数据进行预测,通过调用
model.predict()
函数。例如,y_pred = model.predict(x_test)
会返回模型对测试数据x_test
的预测结果。