博客
关于我
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/

你可能感兴趣的文章
NodeJS 导入导出模块的方法( 代码演示 )
查看>>
nodejs 开发websocket 笔记
查看>>
nodejs 的 Buffer 详解
查看>>
NodeJS 的环境变量: 开发环境vs生产环境
查看>>
nodejs 读取xlsx文件内容
查看>>
nodejs 运行CMD命令
查看>>
Nodejs+Express+Mysql实现简单用户管理增删改查
查看>>
nodejs+nginx获取真实ip
查看>>
nodejs-mime类型
查看>>
NodeJs——(11)控制权转移next
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
NodeJS、NPM安装配置步骤(windows版本)
查看>>
nodejs下的express安装
查看>>
nodejs与javascript中的aes加密
查看>>
nodejs中Express 路由统一设置缓存的小技巧
查看>>
nodejs中express的使用
查看>>
Nodejs中搭建一个静态Web服务器,通过读取文件获取响应类型
查看>>
Nodejs中的fs模块的使用
查看>>
NodeJS使用淘宝npm镜像站的各种姿势
查看>>
NodeJs入门知识
查看>>