欢迎点赞,敬请关注!
深度学习的接口——keras入门体验
详见https://keras.io/zh/。
Keras简介
Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow,CNTK或者 Theano 作为后端运行。
Keras 的开发目的是支持快速的实验。能够以最短的耗时,将你的想法转换为实验结果。
keras深度学习库优点:
- 允许简单而快速的原型设计(用户友好、高度模块化、可扩展性)。
- 同时支持卷积神经网络和循环神经网络,以及两者的组合。
- 在 CPU 和 GPU 上无缝运行。
相关知识点
keras.models.Sequential()
Sequential模型可以构建非常复杂的神经网络,包括全连接神经网络(Dense)、卷积神经网络(CNN)、循环神经网络(RNN)等等。
Sequential的核心操作是添加图层(Layers),从而构建出深度神经网络。
keras.optimizers.Adam()
Adam为自适应学习率优化器之一。
代码片段:
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)
参数意义:
- lr:float >= 0。【学习率】
- beta_1:float,0 < beta < 1,一般接近1。【一阶矩估计的指数衰减率】
- beta_2:float,0 < beta < 1,一般接近1。【二阶矩估计的指数衰减率】
- epsilon:float >= 0。如果None,默认为K.epsilon()。该参数是非常小的数,其为了防止在实现中除以零。【模糊因子】
- decay:float >= 0。【每次更新时学习率衰减值】
keras.losses.categorical_crossentropy()
多分类交叉熵损失函数
当使用 categorical_crossentropy 为损失时,你的目标值应该是分类格式 (如果你有 10 个类,每个样本的目标值应该是一个 10 维的向量,这个向量除了表示类别的那个索引为 1,其他均为 0)。【onehot编码】
keras.utils.to_categorical()
为了将“整数目标值”转换为“分类目标值”,你可以使用 Keras.to_categorical()。
扫描二维码关注公众号,回复:
11157691 查看本文章
keras.layers.Activation()
Sigmoid激活函数
(softmax为其多分类问题)
sigmoid函数
sigmoid导数
Sigmoid函数的优点:
- 求导容易。
- Sigmoid函数的输出映射在(0,1)之间,单调连续输出范围有限,优化稳定可以用作输出层。
Sigmoid函数的缺点:
- 由于其软饱和性,容易造成梯度消失问题。
- 其输出没有以0为中心。
Relu激活函数
Relu函数
Relu导数
Relu函数的优点:
- 在SGD(随机梯度下降算法)中收敛速度够快。
- 不会出现像Sigmoid那样梯度消失问题。
- 提供了网络稀疏表达能力。
- 在 无监督训练中也有良好的表现。
Relu函数的缺点:
- 不以0为中心。
- 前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。神经元死亡是不可逆的。
代码示例
导入相关库
import keras
from keras.models import Sequential
from keras.layers import Convolution2D, Dense, Flatten, Activation, MaxPooling2D
from keras.optimizers import Adam
from keras.losses import categorical_crossentropy
from keras.models import load_model
导入数据
from keras.datasets import mnist # 手写体识别
(x_train, y_train), (x_test, y_test) = mnist.load_data() # 注意数据格式
x_train = x_train.reshape(60000, 28, 28, 1)
x_test = x_test.reshape(10000, 28, 28, 1)
y_test = keras.utils.to_categorical(y_test, 10) # 将整型的类别标签转为onehot编码
y_train = keras.utils.to_categorical(y_train, 10)
print("y test is :::::", y_test)
设计模型
model = Sequential()
# 一层卷积+池化
model.add(Convolution2D(10, (5, 5), input_shape=(28, 28, 1))) # 10个卷积5 × 5卷积盒,注意输入格式
model.add(MaxPooling2D(2, 2)) # 池化
model.add(Activation('relu')) # 激活
# 二层卷积+池化+扁平化处理
model.add(Convolution2D(8, (5, 5)))
model.add(MaxPooling2D(2, 2))
model.add(Activation('relu'))
model.add(Flatten())
# 全连接层
model.add(Dense(30))
model.add(Activation('relu'))
model.add(Dense(10))
model.add(Activation('softmax'))
训练模型
adam = Adam(lr=0.001) # 学习率
# 编译模型
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=100, epochs=1)
# 保存模型
model.save("keras_test.h5")
使用模型
# 加载模型并进行预测
model = load_model("keras_test.h5")
print(model.summary()) # 打印参数数量
print("加载模型进行预测:", model.predict(x_test))
总结
Keras是一个非常方便的深度学习神经网络API,模型保存格式"xx.h5"。
欢迎点赞,敬请关注!
返回顶部