深度学习API——Keras入门初体验

欢迎点赞,敬请关注!

详见https://keras.io/zh/。
Keras

Keras简介

Keras 是一个用 Python 编写的高级神经网络 API,它能够以 TensorFlow,CNTK或者 Theano 作为后端运行。
Keras 的开发目的是支持快速的实验。能够以最短的耗时,将你的想法转换为实验结果。

keras深度学习库优点:

  1. 允许简单而快速的原型设计(用户友好、高度模块化、可扩展性)。
  2. 同时支持卷积神经网络和循环神经网络,以及两者的组合。
  3. 在 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导数
Sigmoid函数的优点:

  1. 求导容易。
  2. Sigmoid函数的输出映射在(0,1)之间,单调连续输出范围有限,优化稳定可以用作输出层

Sigmoid函数的缺点:

  1. 由于其软饱和性,容易造成梯度消失问题。
  2. 其输出没有以0为中心。

Relu激活函数

Relu函数
Relu函数
Relu导数
Relu导数
Relu函数的优点:

  1. 在SGD(随机梯度下降算法)中收敛速度够快。
  2. 不会出现像Sigmoid那样梯度消失问题。
  3. 提供了网络稀疏表达能力。
  4. 在 无监督训练中也有良好的表现。

Relu函数的缺点:

  1. 不以0为中心。
  2. 前向传导(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"。

欢迎点赞,敬请关注!
返回顶部

原创文章 43 获赞 14 访问量 2847

猜你喜欢

转载自blog.csdn.net/weixin_45221012/article/details/105599955