郑州建设网站推广公司,在线照片处理编辑器,搜索引擎优化的主要策略,国外极简网站Keras是一个易于使用且功能强大的神经网络建模库#xff0c;它是基于Python语言开发的。Keras提供了高级API#xff0c;使得用户能够轻松地定义和训练神经网络模型#xff0c;无论是用于分类、回归还是其他任务。 Keras的主要特点如下#xff1a; 简单易用#xff1a;Kera…Keras是一个易于使用且功能强大的神经网络建模库它是基于Python语言开发的。Keras提供了高级API使得用户能够轻松地定义和训练神经网络模型无论是用于分类、回归还是其他任务。 Keras的主要特点如下 简单易用Keras的设计理念是用户友好性它提供了简洁一致的API使得模型的构建、训练、评估以及部署变得非常简单。不需要编写大量底层代码可以快速实现模型。 多后端支持Keras支持多个深度学习后端包括TensorFlow、Theano和CNTK。用户可以根据自己的需要选择合适的后端进行模型开发。而TensorFlow的2.0版本中已经将Keras纳入其中成为其官方高层API。 多种建模方式Keras提供了不同的建模方式包括序列模型Sequential Model、函数模型Functional Model和子类模型Subclassing Model。用户可以根据需要选择适合的建模方式从简单的线性模型到复杂的非线性模型都可以构建。 大量预定义层和模型Keras提供了丰富的预定义层例如全连接层、卷积层、池化层等和模型例如VGG、ResNet等用户可以直接使用这些层和模型加快模型开发的速度。 支持自定义层和损失函数Keras支持用户自定义层和损失函数用户可以根据自己的需求自定义特定的层或损失函数并与其他预定义层和损失函数进行组合。
如果之前有参考过我的博文的话应该会有所了解我基本上90%的项目都是基于kerasTensorflow构建的而基于PyTorch的相关项目开发实践会偏少一下因为最初入坑深度学习的时候就是接触的Tensorflow现在是想要系统性地梳理对比学习一下。
本文就以最为熟悉的keras来入手系统性地总结回顾一下keras搭建模型的主流方式。Keras提供了三种主要的建模方式序列模型、函数模型和子类模型。下面对每种方式进行详细介绍。
1. 序列模型Sequential Model 序列模型是Keras中最简单的一种建模方式它通过将层Layer按顺序堆叠来构建神经网络模型。每个层之间只有一个输入和一个输出。这种方式适用于简单的线性堆叠模型或者只有单一输入/输出的模型。 序列模型的建模步骤如下 - 导入Sequential类和需要使用的层例如Dense、Conv2D、MaxPooling2D等。 - 使用Sequential类创建一个模型实例。 - 通过调用模型实例的add方法逐步添加层到模型中。 - 使用compile方法配置模型的优化器、损失函数和评估指标。 - 使用fit方法对模型进行训练。 - 使用evaluate方法对模型进行评估。
如果说是搭建比较基础的模型没有什么残差连接、多分支结构等特殊网络链路的话这种方式一定会是首选非常的简单易懂直至现在我依旧觉得keras的可读性非常高对于学习和理解来说是非常友好的这里以Mnist数据集为例给出来实例实现
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) mnist.load_data()# 数据预处理
x_train x_train.reshape(-1, 784).astype(float32) / 255.0
x_test x_test.reshape(-1, 784).astype(float32) / 255.0
y_train tf.keras.utils.to_categorical(y_train)
y_test tf.keras.utils.to_categorical(y_test)# -----------------------------
# 使用序列模型建立模型
model Sequential([Dense(64, activationrelu, input_shape(784,)),Dense(10, activationsoftmax)
])# 编译模型
model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy])# 训练模型
model.fit(x_train, y_train, epochs5, batch_size32, validation_data(x_test, y_test))# 模型评估
test_loss, test_acc model.evaluate(x_test, y_test)
print(Test Accuracy:, test_acc) 2. 函数模型Functional Model 函数模型是一种更为灵活的建模方式它允许构建具有多个输入和多个输出的模型以及包含层共享和跳跃连接的复杂模型。通过在层之间创建显式的数据流图可以构建非线性的模型结构。 函数模型的建模步骤如下 - 导入Model类和需要使用的层例如Input、Conv2D、MaxPooling2D等。 - 创建模型的输入张量Input并将其传递给需要连接该输入的层。 - 通过将每个层的输出连接到下一个层的输入来构建模型。 - 使用Model类指定模型的输入和输出创建一个模型实例。 - 使用compile方法配置模型的优化器、损失函数和评估指标。 - 使用fit方法对模型进行训练。 - 使用evaluate方法对模型进行评估。
这种方式我平时使用的频次也是很高的简单一句话总结就是序列模型能完成的函数模型都能完成函数模型能完成的序列模型未必能完成如果只是想要学习掌握一种主流方式的话可以直接选择函数模型像经典的残差网络、多分支网络结构等等都是基于函数模型进行搭建的。这里同样以Mnist数据集为例给出代码实例
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) mnist.load_data()# 数据预处理
x_train x_train.reshape(-1, 784).astype(float32) / 255.0
x_test x_test.reshape(-1, 784).astype(float32) / 255.0
y_train tf.keras.utils.to_categorical(y_train)
y_test tf.keras.utils.to_categorical(y_test)# 使用函数式模型建立模型
inputs tf.keras.Input(shape(784,))
x Dense(64, activationrelu)(inputs)
outputs Dense(10, activationsoftmax)(x)model tf.keras.Model(inputsinputs, outputsoutputs)model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy])
model.fit(x_train, y_train, epochs5, batch_size32, validation_data(x_test, y_test))test_loss, test_acc model.evaluate(x_test, y_test)
print(Test Accuracy:, test_acc) 3. 子类模型Subclassing Model 子类模型是使用Python的继承机制构建模型的一种方式它提供了最大的灵活性可以按照需要自定义前向传播逻辑和反向传播逻辑。通过编写一个继承自Model类的子类可以完全自定义模型的构建过程。 子类模型的建模步骤如下 - 导入Model类和需要使用的层例如Dense、Conv2D、MaxPooling2D等。 - 创建一个继承自Model类的子类定义类的__init__方法其中实例化模型层和变量。 - 在子类中定义call方法实现模型的前向传播逻辑。 - 创建模型的实例。 - 使用compile方法配置模型的优化器、损失函数和评估指标。 - 使用fit方法对模型进行训练。 - 使用evaluate方法对模型进行评估。
这种方式的使用频度主要也是这种方式实现起来也是相对更加复杂一点的而且对于模型的保存还有问题所以对于我自己来说这种子类模型的构建方式本身使用频度不高这里同样以Mnist数据集为例给出代码实例
import tensorflow as tf
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) mnist.load_data()# 数据预处理
x_train x_train.reshape(-1, 784).astype(float32) / 255.0
x_test x_test.reshape(-1, 784).astype(float32) / 255.0
y_train tf.keras.utils.to_categorical(y_train)
y_test tf.keras.utils.to_categorical(y_test)# 使用子类模型建立模型
class MyModel(tf.keras.Model):def __init__(self):super(MyModel, self).__init__()self.dense1 Dense(64, activationrelu)self.dense2 Dense(10, activationsoftmax)def call(self, inputs):x self.dense1(inputs)outputs self.dense2(x)return outputsmodel MyModel()model.compile(optimizeradam, losscategorical_crossentropy, metrics[accuracy])
model.fit(x_train, y_train, epochs5, batch_size32, validation_data(x_test, y_test))test_loss, test_acc model.evaluate(x_test, y_test)
print(Test Accuracy:, test_acc)