Keras学习笔记----快速开始keras的顺序模型

前言

学习深度学习已经很长时间了,学习了很多模型,也学习了很多理论知识。最近,想学习一下Keras。我自己也看了几个用keras写的代码。感觉简洁、清晰。因此,想学习一下keras。就个人想法。在学习的时候,想做一些笔记。一是方便自己以后看,二是记录一下个人学习历程,三是如果有幸帮助有人能看到我的博客,对你有所帮助,我也是很荣幸的。我的学习资料来源于Keras中文文档,链接:https://keras.io/zh/ 。如果有兴趣的,可以直接访问官网学习,一定比我写的好。

一、Keras的介绍

Keras是一个用Python编写的高级神经网络API,它能够以TensorFlow,CNTK,或者Theano作为后端运行。Keras的开发重点是支持快速的实验。能够以最小的时延把想法转化成实验结果,是做好研究的关键。Keras可以让你简单而快速的设计模型,同时支持卷积神经网络和循环神经网络,可以在GPU和CPU上无缝运行。

Keras的指导原则:

  • 用户友好:keras是为人类设计的,把用户体验放在首要和中心位置。提供简单的API,将常见用例所需的用户操作数量降到最低,并且在用户错误时提供清晰和可操作的反馈。
  • 模块化:模型由独立的、完全可配置的模块构成的序列或图。这些模块可以以尽可能少的限制组装在一起。特别是神经网络层/损失函数、优化器、初始化方法、激活函数、正则化方法,都可以结合起来构建新模型的模块。
  • 易扩展性:可以轻松的构建新模块。
  • 基于Python实现:Keras没有特定格式的单独配置文件。定义在python代码中,易于调试,易于扩展。

二、使用Keras Sequential 顺序模型

1. 多个网络层的线性堆叠

方法一:将网络层实例的列表传递给Sequential的构造器,来创建一个Sequential模型

from keras.models import Sequential
from keras.layers import Dense, Activation

model = Sequential([
        Dense(32, input_shape=(784,)), # 全连接层
        Activation('relu'),  # 激活
        Dense(10),
        Activation('softmax'),
    ])

方法二:使用.add()方法将各层添加到模型

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

2. 指定输入数据的尺寸

模型需要知道期望的输入的尺寸,因此,在顺序模型的第一层,而且是只有第一层需要接受关于其输入尺寸的信息。其他层可以自动推断尺寸。

  • 传递一个input_shape参数给第一层。表示尺寸的一个元组,一个整数或None的元组,None表示可能为任何正整数。在input_shape中不包含任何数据的batch大小。如果想指定一个batch大小,可以传递一个batch_size参数。
  • 某些2D层,通过参数input_dim指定输入尺寸。某些3D时序层支持input_dim和input_length参数
# 下面两种是等价的
model = Sequential()
model.add(Dense(32, input_shape(784,)))

model = Sequential()
model.add(Dense(32, input_dim=784))

3. 模型编译

训练模型之前,要配置学习过程,也就是定义损失函数等信息。通过compile方法完成。接受三个参数:

  • 优化器optimizer:可以是现有优化器的字符串标识符,如rmsprop
  • 损失函数loss:模型最小化的目标函数,如categerical_crossentropy,也可以是一个目标函数
  • 评估标准metrics:对于任何分类问题,希望是准确率,可以自定义评估函数。
# 多分类问题
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

# 二分类问题
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

# 均方误差回归问题
model.compile(optimizer='rmsprop', loss='mse')

# 自定义评估标准函数
import keras.backend as K
def mean_pred(y_true, y_pred):
    return K.mean(y_pred)

model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy', mean_pred])

4. 模型训练

Keras在输入数据和标签的Numpy矩阵上进行训练。为了训练模型,通常会使用fit函数。

# 具有两个类的单输入模型
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

# 生成数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# 训练模型
model.fit(data, labels, epochs=10, batch_size=32)
# 具有十个类的单输入模型
model = Sequential()
model.add(Dense(32, activation='relu', input_dim=100))
model.add(Dense(10, activation='softmax'))
model.compile(optimizer='rmsprop',
             loss='categorical_crossentropy',
             metrics=['accuracy'])

# 生成数据
import numpy as np
data = np.random.random((1000, 100))
labels = np.random.randint(2, size=(1000, 1))

# 将标签转换为分类的one-hot编码
one_hot_labels = keras.utils.to_categorical(labels, num_classes=10)

# 训练
model.fit(data, one_hot_labels, epochs=10, batch_size=32)

学完了基本的实现方法,我们下面实现两个简单的例子。keras实现多分类与二分类

猜你喜欢

转载自blog.csdn.net/gyt15663668337/article/details/89311519