【写在前面】:大家好,我是【猪葛】
一个很看好AI前景的算法工程师
在接下来的系列博客里面我会持续更新Keras的教学内容(文末有大纲)
内容主要分为两部分
第一部分是Keras的基础知识
第二部分是使用Keras搭建FasterCNN、YOLO目标检测神经网络
代码复用性高
如果你也感兴趣,欢迎关注我的动态一起学习
学习建议:
有些内容一开始学起来有点蒙,对照着“学习目标”去学习即可
一步一个脚印,走到山顶再往下看一切风景就全明了了
本篇博客学习目标:1、当朋友跟你谈论keras是什么的时候,你脑子不是一片空白;2、知道搭建神经网络的三个流程分别是:构建模型、搭配模型、训练模型。
Keras概念
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow, CNTK, 或者 Theano 作为后端运行。Keras 的开发重点是支持快速的实验。能够以最小的时延把你的想法转换为实验结果,是做好研究的关键。
如果你在以下情况下需要深度学习库,请使用 Keras:
- 允许简单而快速的原型设计(由于用户友好,高度模块化,可扩展性)。
- 同时支持卷积神经网络和循环神经网络,以及两者的组合。
- 在 CPU 和 GPU 上无缝运行。
Keras搭建神经网络总体流程
Keras 的核心数据结构是 model,一种组织网络层的方式。最简单的模型是Sequential 顺序模型 ,它由多个网络层线性堆叠。对于更复杂的结构,你应该使用 Keras 函数式 API,它允许构建任意的神经网络图。
下面先逐一拆解每个函数的意思,更加具体的解释请看下面完整代码中的注释
Sequential
模型如下所示:
from keras.models import Sequential
model = Sequential()
创建完model之后可以简单地使用 .add()
来堆叠模型:
from keras.layers import Dense
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))
在完成了模型的构建后, 可以使用.compile()
来配置学习过程:
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
如果需要,你还可以进一步地配置你的优化器。Keras 的核心原则是使事情变得相当简单,同时又允许用户在需要的时候能够进行完全的控制(终极的控制是源代码的易扩展性)。
model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
现在,你可以批量地在训练数据上进行迭代了:
# x_train 和 y_train 是 Numpy 数组 -- 就像在 Scikit-Learn API 中一样。
model.fit(x_train, y_train, epochs=5, batch_size=32)
或者,你可以手动地将批次的数据提供给模型:
model.train_on_batch(x_batch, y_batch)
只需一行代码就能评估模型性能:
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
或者对新的数据生成预测:
classes = model.predict(x_test, batch_size=128)
完整代码(建议自己运行一遍,注意看代码注释,注意看代码注释,注意看代码注释)
"""
本实例使用的是tensorflow后端的keras,
所以导入keras的方式是
import tensorflow.keras
以此类推
"""
from tensorflow.keras.models import Sequential
import tensorflow as tf
from tensorflow.keras.layers import Dense
# ***************流程一:构建模型*********************
model = Sequential() # 创建模型实例
model.add(Dense(units=64, activation='relu', input_dim=100)) # input_dim=100,表示输出的shape(None, 100)
model.add(Dense(units=10, activation='softmax')) # 全连接的神经元个数为units=10, 激活函数activation='softmax'
# ***************流程二:搭配模型***********************
model.compile(loss='categorical_crossentropy',
optimizer='sgd',
metrics=['accuracy']) # 选用模型训练使用的损失函数和优化函数和评价指标
# 或者使用实例对象,在实例化对象的过程中进行参数初始化,详情看类SGD的初始化
# model.compile(loss=keras.losses.categorical_crossentropy,
# optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))
# ****************流程三:训练模型***************************
# 自己假设训练数组
x_train, y_train = tf.random.truncated_normal(shape=(1000, 100)), tf.random.truncated_normal(shape=(1000, 1))
# x_train 和 y_train 是 Numpy 数组或者是Tensor变量都可,此处是Tensor变量, 开始训练
model.fit(x_train, y_train, epochs=5, batch_size=32)
代码运行结果
Train on 1000 samples
Epoch 1/5
1000/1000 [==============================] - 0s 391us/sample - loss: -0.3190 - accuracy: 0.1590
Epoch 2/5
1000/1000 [==============================] - 0s 48us/sample - loss: -0.3125 - accuracy: 0.1590
Epoch 3/5
1000/1000 [==============================] - 0s 50us/sample - loss: -0.3265 - accuracy: 0.1570
Epoch 4/5
1000/1000 [==============================] - 0s 50us/sample - loss: -0.3447 - accuracy: 0.1450
Epoch 5/5
1000/1000 [==============================] - 0s 64us/sample - loss: -0.3743 - accuracy: 0.1380
Process finished with exit code 0
有了这个总体框架,以后的内容不过就是在细化每一部分的知识和步骤而已,下期详细解释如何使用Sequence对象创建模型,欢迎关注收藏我的动态一起学习~,下面是系列内容目录截图: