博客
关于我
Keras基本用法
阅读量:697 次
发布时间:2019-03-17

本文共 6328 字,大约阅读时间需要 21 分钟。

Keras入门与进阶

Keras是TensorFlow的高级封装,支持多种深度学习框架,作为TensorFlow的核心组件之一,已成为TensorFlow官方推荐使用的高层API之一。本文将从基础到高级API,探讨如何高效地使用Keras进行深度学习模型构建与训练。

一、Keras基础用法

Keras的核心API与TensorFlow Learn类似,便于定义和训练模型,主要包括数据处理、模型构建和训练三个方面。安装Keras的方法为:

pip install keras

1.1 MNIST示例

以下代码展示了LeNet-5模型的实现:

import kerasfrom keras.datasets import mnistfrom keras.models import Sequentialfrom keras.layers import Dense, Flatten, Conv2D, MaxPooling2Dimport keras.backend as Knum_classes = 10img_rows, img_cols = 28, 28(trainX, trainY), (testX, testY) = mnist.load_data()# 确定图像通道格式if K.image_data_format() == 'channels_first':    trainX = trainX.reshape(trainX.shape[0], 1, img_rows, img_cols)    testX = testX.reshape(testX.shape[0], 1, img_rows, img_cols)    input_shape = (1, img_rows, img_cols)else:    trainX = trainX.reshape(trainX.shape[0], img_rows, img_cols, 1)    testX = testX.reshape(testX.shape[0], img_rows, img_cols, 1)    input_shape = (img_rows, img_cols, 1)# 转换为浮点类型并归一化trainX = trainX.astype('float32')testX = testX.astype('float32')trainX /= 255.0testX /= 255.0# 类别转换trainY = keras.utils.to_categorical(trainY, num_classes)testY = keras.utils.to_categorical(testY, num_classes)# 构建模型model = Sequential()model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(64, (5,5), activation='relu'))model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Flatten())model.add(Dense(500, activation='relu'))model.add(Dense(num_classes, activation='softmax'))# 编译模型model.compile(loss=keras.losses.categorical_crossentropy,              optimizer=keras.optimizers.SGD(),              metrics=['accuracy'])# 训练模型model.fit(trainX, trainY, batch_size=128, epochs=20, validation_data=(testX, testY))score = model.evaluate(testX, testY)print('Test loss:', score[0])print('Test accuracy:', score[1])

1.2 循环神经网络示例

以下代码展示了如何使用循环神经网络进行情感分析:

from keras.preprocessing import sequencefrom keras.models import Sequentialfrom keras.layers import Dense, Embedding, LSTMfrom keras.datasets import imdbmax_features = 20000maxlen = 80batch_size = 32(trainX, trainY), (testX, testY) = imdb.load_data(num_words=max_features)# Uniform sequence paddingtrainX = sequence.pad_sequences(trainX, maxlen=maxlen)testX = sequence.pad_sequences(testX, maxlen=maxlen)# 模型构建model = Sequential()model.add.Embedding(max_features, 128))model.add(LSTM(128, dropout=0.2))model.add(Dense(1, activation='sigmoid'))# 编译与训练model.compile(loss='binary_crossentropy',              optimizer='adam',              metrics=['accuracy'])model.fit(trainX, trainY, batch_size=batch_size, epochs=15,          validation_data=(testX, testY))# 评估score = model.evaluate(testX, testY, batch_size=batch_size)print('Test loss:', score[0])print('Test accuracy:', score[1])

二、高级Keras用法

2.1 返回值模型定义

与传统的Sequential模型不同,Keras支持返回值方式定义模型:

from keras.datasets import mnistfrom keras.layers import Input, Densefrom keras.models import Model# 定义输入inputs = Input(shape=(784,))# 传统Sequential方式x = Dense(500, activation='relu')(inputs)predictions = Dense(10, activation='softmax')(x)model = Model(inputs=inputs, outputs=predictions)# 高级方式x = Dense(500, activation='relu')(Input(shape=(784,)))  # 返回向量output = Dense(10, activation='softmax')(x)model = Model(inputs=Input(shape=(784,)), outputs=output)

2.2 Inception模型

以下代码展示了如何实现Inception结构:

from keras.layers import Conv2D, MaxPooling2D, Inputfrom keras.models import Modelinput_shape = (256, 256, 3)# 定义三个分支tower_1 = Conv2D(64, (1,1), padding='same', activation='relu')(input_shape)tower_1 = Conv2D(64, (3,3), padding='same', activation='relu')(tower_1)tower_2 = Conv2D(64, (1,1), padding='same', activation='relu')(input_shape)tower_2 = Conv2D(64, (5,5), padding='same', activation='relu')(tower_2)tower_3 = MaxPooling2D((3,3), strides=(1,1), padding='same')(input_shape)tower_3 = Conv2D(64, (1,1), padding='same', activation='relu')(tower_3)# 拼接输出outputs = keras.layers.Concatenate(axis=1)([tower_1, tower_2, tower_3])model = Model(inputs=Input(shape=input_shape), outputs=outputs)

2.3 多输入多输出模型

以下代码展示了如何定义带多输入多输出的模型:

from keras.layers import Input, Densefrom keras.models import Model# 定义两个输入和两个输出input1 = Input(shape=(784,), name="input1")input2 = Input(shape=(10,), name="input2")x = Dense(1, activation='relu')(input1)output1 = Dense(10, activation='softmax', name="output1")(x)concat_input = keras.layers.Concatenate([x, input2])output2 = Dense(10, activation='softmax', name="output2")(concat_input)model = Model(inputs=[input1, input2], outputs=[output1, output2])

2.4 Tensorflow分布式训练

以下代码展示了如何结合TensorFlow API实现分布式训练:

import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data mnist_data = input_data.read_data_sets('/path/to/MNIST_data', one_hot=True)# 定义输入x = tf.placeholder(tf.float32, shape=(None, 784))y_ = tf.placeholder(tf.float32, shape=(None, 10))# 定义网络结构net = tf.keras.layers.Dense(500, activation='relu')(x)y = tf.keras.layers.Dense(10, activation='softmax')(net)# 定义损失函数与优化器loss = tf.reduce_mean(tf.keras.losses.categorical_crossentropy(y_, y))train_step = tf.train.GradientDescentOptimizer(0.5).minimize(loss)# 定义准确率指标acc_value = tf.reduce_mean(tf.keras.metrics.categorical_accuracy(y_, y))with tf.Session() as sess:    tf.global_variables_initializer().run()    for i in range(10000):        xs, ys = mnist_data.train.next_batch(100)        _, loss_value = sess.run([train_step, loss], feed_dict={x: xs, y_: ys})        if i % 1000 == 0:            print("After %d training steps, loss on training batch is %g." % (i, loss_value))    print('Test accuracy:', acc_value.eval(feed_dict={x: mnist_data.test.images, y_: mnist_data.test.labels}))

三、Keras的主要模块、类与函数

3.1 模块

  • Built-in activation functions: 内置激活函数
  • Keras Applications: 预训练模型
  • Keras backend API: 后端API
  • Callbacks: 训练过程中的备用功能
  • Constraints: 权重约束
  • Keras datasets: 内置数据集
  • Estimator API: 预训练模型
  • TensorFlow.experimental namespace: 实验性功能
  • Initializers: 权重初始化
  • Layers API: 层级API
  • Loss functions: 内置损失函数
  • Metrics: 智能衡量标准
  • Mixed precision namespace: 混合精度
  • Model related API: 模型功能扩展
  • Optimizer classes: 优化器
  • Data preprocessing tools: 数据处理工具
  • Regularizers: 正则化工具
  • Utilities: 辅助功能

3.2 类

  • Model: 将层组合成一个模型对象
  • Sequential: 传统的线性神经网络

3.3 函数

  • Input(): 创建Keras张量
  • Concatenate(): 张量拼接
  • SessionManager: 会话管理器
  • _shape: 形状工具
  • Graph:" 图表工具
  • variable: 变量工具
  • layer: 层级工具
  • ** Berger Richardson Loss:** 计算损失

通过以上内容,可以看出Keras不仅在模型构建上非常灵活,还在性能优化、扩展性以及与TensorFlow的集成方面表现出色,为深度学习提供了强大的工具。通过合理使用Keras的高级功能,可以实现复杂的网络架构和高效的训练策略,从而充分发挥深度学习的潜力。

转载地址:http://lgmhz.baihongyu.com/

你可能感兴趣的文章
OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
查看>>
OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
查看>>
OpenCV与AI深度学习 | 实用技巧 | 使用OpenCV进行模糊检测
查看>>
OpenCV与AI深度学习 | 实践教程|旋转目标检测模型-TensorRT 部署(C++)
查看>>
OpenCV与AI深度学习 | 工业缺陷检测中数据标注需要注意的几个事项
查看>>
OpenCV与AI深度学习 | 干货 | 深度学习模型训练和部署的基本步骤
查看>>
OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 + 源码)
查看>>
OpenCV与AI深度学习 | 水下检测+扩散模型:或成明年CVPR最大惊喜!
查看>>
OpenCV与AI深度学习 | 深度学习检测小目标常用方法
查看>>
OpenCV与AI深度学习 | 超越YOLOv10/11、RT-DETRv2/3!中科大D-FINE重新定义边界框回归任务
查看>>
OpenCV与AI深度学习 | 高效开源的OCR工具:Surya-OCR介绍与使用
查看>>
OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)
查看>>
Opencv中KNN背景分割器
查看>>
OpenCV中基于已知相机方向的透视变形
查看>>
OpenCV中的监督学习
查看>>
opencv中读写视频
查看>>
OpenCV中遇到Microsoft C++ 异常 cv::Exception
查看>>
opencv之cv2.findContours和drawContours(python)
查看>>
opencv之namedWindow,imshow出现两个窗口
查看>>