ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

HoRain云--TensorFlow 高级 API - Keras

HoRain云--TensorFlow 高级 API - Keras Keras 是一个用 Python 编写的高级神经网络 API它能够以 TensorFlow, CNTK 或 Theano 作为后端运行。Keras 的设计理念是用户友好、模块化和易扩展。Keras 的主要特点简单易用提供直观一致的接口适合快速原型设计模块化神经网络层、损失函数、优化器等都是可插拔的模块易扩展可以轻松添加新模块来表达新的研究想法支持多后端可以无缝运行在 TensorFlow, CNTK 或 Theano 上Keras 核心概念1. 模型 (Model)Keras 的核心数据结构是模型模型是组织神经网络层的方式。Keras 提供了两种主要的模型Sequential 模型层的线性堆叠Functional API构建复杂模型的有向无环图2. 层 (Layer)层是 Keras 的基本构建块每个层接收输入数据进行某种计算后输出结果。Keras 提供了多种预定义层核心层Dense, Activation, Dropout 等卷积层Conv2D, MaxPooling2D 等循环层LSTM, GRU 等其他Embedding, BatchNormalization 等3. 激活函数 (Activation Function)激活函数决定神经元的输出常用的有ReLU (Rectified Linear Unit)SigmoidTanhSoftmax (多分类问题)Keras 基本工作流程1. 定义模型实例from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Densemodel Sequential([Dense(64, activationrelu, input_shape(784,)),Dense(64, activationrelu),Dense(10, activationsoftmax)])2. 编译模型实例model.compile(optimizeradam,losscategorical_crossentropy,metrics[accuracy])3. 训练模型实例model.fit(x_train, y_train,epochs5,batch_size32)4. 评估模型实例loss_and_metrics model.evaluate(x_test, y_test, batch_size128)5. 进行预测实例classes model.predict(x_test, batch_size128)Keras 常用层详解1. Dense 全连接层实例Dense(units,activationNone,use_biasTrue,kernel_initializerglorot_uniform,bias_initializerzeros)units正整数输出空间的维度activation激活函数use_bias是否使用偏置向量kernel_initializer权重矩阵的初始化器bias_initializer偏置向量的初始化器2. Conv2D 二维卷积层实例Conv2D(filters,kernel_size,strides(1, 1),paddingvalid,activationNone)filters卷积核的数目kernel_size卷积核的尺寸strides卷积步长padding填充方式 (valid 或 same)3. LSTM 长短期记忆网络层实例LSTM(units,activationtanh,recurrent_activationhard_sigmoid,return_sequencesFalse)units正整数输出空间的维度activation激活函数recurrent_activation循环步的激活函数return_sequences是否返回完整序列Keras 模型保存与加载1. 保存整个模型实例model.save(my_model.h5) # 保存架构、权重和训练配置2. 仅保存架构实例json_string model.to_json() # 保存为JSONyaml_string model.to_yaml() # 保存为YAML3. 仅保存权重实例model.save_weights(my_model_weights.h5)4. 加载模型实例from tensorflow.keras.models import load_modelmodel load_model(my_model.h5) # 加载完整模型Keras 回调函数回调函数是在训练过程中特定时间点被调用的函数用于模型检查点提前停止学习率调整日志记录等常用回调函数实例from tensorflow.keras.callbacks import ModelCheckpoint, EarlyStoppingcallbacks [ModelCheckpoint(filepathbest_model.h5, monitorval_loss, save_best_onlyTrue),EarlyStopping(monitorval_loss, patience3)]model.fit(x_train, y_train,epochs10,callbackscallbacks,validation_data(x_val, y_val))Keras 实践示例MNIST 手写数字识别实例from tensorflow.keras.datasets import mnistfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense, Dropout, Flattenfrom tensorflow.keras.layers import Conv2D, MaxPooling2Dfrom tensorflow.keras.utils import to_categorical# 加载数据(x_train, y_train), (x_test, y_test) mnist.load_data()# 数据预处理x_train x_train.reshape(60000, 28, 28, 1).astype(float32) / 255x_test x_test.reshape(10000, 28, 28, 1).astype(float32) / 255y_train to_categorical(y_train, 10)y_test to_categorical(y_test, 10)# 构建模型model Sequential([Conv2D(32, kernel_size(3, 3), activationrelu, input_shape(28, 28, 1)),Conv2D(64, (3, 3), activationrelu),MaxPooling2D(pool_size(2, 2)),Dropout(0.25),Flatten(),Dense(128, activationrelu),Dropout(0.5),Dense(10, activationsoftmax)])# 编译模型model.compile(losscategorical_crossentropy,optimizeradam,metrics[accuracy])# 训练模型model.fit(x_train, y_train,batch_size128,epochs12,verbose1,validation_data(x_test, y_test))# 评估模型score model.evaluate(x_test, y_test, verbose0)print(Test loss:, score[0])print(Test accuracy:, score[1])Keras 进阶技巧1. 自定义层实例from tensorflow.keras import backend as Kfrom tensorflow.keras.layers import Layerclass MyLayer(Layer):def __init__(self, output_dim, **kwargs):self.output_dim output_dimsuper(MyLayer, self).__init__(**kwargs)def build(self, input_shape):self.kernel self.add_weight(namekernel,shape(input_shape[1], self.output_dim),initializeruniform,trainableTrue)super(MyLayer, self).build(input_shape)def call(self, x):return K.dot(x, self.kernel)def compute_output_shape(self, input_shape):return (input_shape[0], self.output_dim)2. 自定义损失函数实例from tensorflow.keras import backend as Kdef custom_loss(y_true, y_pred):return K.mean(K.square(y_pred - y_true), axis-1)model.compile(optimizeradam, losscustom_loss)3. 学习率调度实例from tensorflow.keras.callbacks import LearningRateSchedulerdef scheduler(epoch, lr):if epoch 10:return lrelse:return lr * K.exp(-0.1)callback LearningRateScheduler(scheduler)model.fit(x_train, y_train, epochs15, callbacks[callback])Keras 常见问题与解决方案1. 过拟合问题增加 Dropout 层使用 L1/L2 正则化增加训练数据使用数据增强2. 训练速度慢增加批量大小使用更简单的模型尝试不同的优化器使用 GPU 加速3. 梯度消失/爆炸使用 BatchNormalization使用适当的权重初始化使用 ReLU 等非饱和激活函数使用梯度裁剪总结Keras 作为 TensorFlow 的高级 API提供了简单直观的接口来构建和训练深度学习模型。通过本文你应该已经掌握了Keras 的核心概念和基本工作流程常用层的使用方法模型的保存与加载回调函数的使用实际项目中的应用示例进阶技巧和常见问题解决方案Keras 的强大之处在于它的灵活性和易用性使得深度学习模型的开发变得更加高效。随着实践的深入你将能够构建更加复杂的神经网络模型来解决各种实际问题。
返回列表