深度学习入门-框架keras-1简介

坑边闲话

深度学习看了不少的入门资料和学习方法,始终不得其解,感觉非常的混乱,同样的东西可以用多种方式训练,就算是同一个模型,各种的优化器各种的语法甚至各种看不懂的写法都让我很蛋疼。
最后实在没法选学习方向了,于是去TensorFlow官网看教程,看了几个教程,发现用了很多的keras这个东西,感觉这个框架挺好用的,简单方便,以至于感觉非常的弱智。。。
建议在了解原理之后再使用,否则你根本不能理解自己代码怎么运行的。
我也难以理解TensorFlow官网上宣传的是别人的框架。
总的来说:keras应用型很强,TensorFlow更偏向于学术研究。

简介

来源:https://keras.io/
Keras是一个高级神经网络API,用Python编写,能够在TensorFlow,CNTK或Theano之上运行。它的开发重点是实现快速实验。能够以最小的延迟从想法到结果是进行良好研究的关键。

如果您需要深度学习库,请使用Keras:

  • 允许简单快速的原型设计(通过用户友好性,模块化和可扩展性)。
  • 支持卷积网络和循环网络,以及两者的组合。(这里很重要)
  • 在CPU和GPU上无缝运行。

指导原则

  • 用户友好。Keras是专为人类而非机器设计的API。它将用户体验放在前端和中心位置。Keras遵循减少认知负荷的最佳实践:它提供一致且简单的API,最大限度地减少了常见用例所需的用户操作数量,并且可以根据用户错误提供清晰且可操作的反馈。

  • 模块化。模型被理解为独立的,完全可配置模块的序列或图形,可以通过尽可能少的限制将其插入到一起。特别是,神经层,成本函数,优化器,初始化方案,激活函数,正则化方案都是独立的模块,您可以将它们组合在一起以创建新模型。

  • 易扩展性。新模块很容易添加(作为新类和函数),现有模块提供了充足的示例。为了能够轻松创建新模块,可以实现完全表现力,使Keras适合高级研究。

  • 使用Python。没有声明格式的单独模型配置文件。模型在Python代码中描述,它紧凑,易于调试,并且易于扩展。

框架解析

Keras的核心数据结构是一种模型,一种组织层的方法。最简单的模型类型是Sequential模型,即线性层叠。对于更复杂的体系结构,您应该使用Keras功能API,它允许构建任意图层图。

创建模型:

from keras.models import Sequential
model = Sequential()

堆叠模型结构:.add()

from keras.layers import Dense

model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax'))

配置学习过程:

# 配置一:
# loss:损失函数
# optimizer:优化器
# metrics:指标(accuracy:精度,精确性)
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
# 配置二:
# 更灵活的配置
model.compile(loss=keras.losses.categorical_crossentropy,             optimizer=keras.optimizers.SGD(lr=0.01, momentum=0.9, nesterov=True))

训练数据:

# 自动提供数据,训练次数,每次提供数据
# x_train and y_train are Numpy arrays --just like in the 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)

安装方案

pip3 install keras
安装之前需要先配置好TensorFlow环境
使用方法(免安装,TensorFlow有提供其二进制代码):
from tensorflow.keras import keras
或(建议第二种)
import tensorflow.keras

顺序模型指南

开始 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'),
])
方法二:
model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))

指定图层输入形状

模型需要知道它应该期望的输入形状。
Sequential模型中的第一层(只有第一层,因为后面的层可以进行自动形状推断)需要接收有关其输入形状的信息。有几种可能的方法可以做到这一点:

  • input_shape参数传递给第一层。这是一个形状元组(整数或None条目的元组,其中None表示可以预期任何正整数)。在input_shape不包括批次维度
  • 一些2D层,例如Dense,通过参数支持其输入形状的规范input_dim,并且一些3D时间层支持参数input_dim和input_length。
  • 如果您需要为输入指定固定的批处理大小(这对于有状态的循环网络很有用),则可以将batch_size参数传递给图层。如果你同时通过batch_size=32和input_shape=(6, 8)一个层,它就会想到每批次的投入有一批形状(32, 6, 8)。
model = Sequential()
model.add(Dense(32, input_shape=(784,)))
# 与上一个相同
model = Sequential()
model.add(Dense(32, input_dim=784))

配置学习过程

在训练模型之前,您需要配置学习过程,该过程通过该compile方法完成。它收到三个参数:

优化器(optimizer)。这可以是现有优化器(例如rmsprop或adagrad)的字符串标识符,也可以是Optimizer类的实例。
损失函数(loss)。这是模型试图最小化的目标。它可以是现有损失函数的字符串标识符(例如categorical_crossentropy或mse),也可以是目标函数。
指标(mmetrics)。对于任何分类问题,您需要将其设置为metrics=[‘accuracy’]。度量可以是现有度量的字符串标识符或自定义度量函数。

# For a multi-class classification problem
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# For a binary classification problem
model.compile(optimizer='rmsprop',
              loss='binary_crossentropy',
              metrics=['accuracy'])

# For a mean squared error regression problem
model.compile(optimizer='rmsprop',
              loss='mse')

# For custom metrics
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])

训练

Keras模型在Numpy输入数据和标签矩阵上进行训练。对于训练模型,通常使用该fit功能。

# Train the model, iterating on the data in batches of 32 samples
model.fit(data, labels, epochs=10, batch_size=32)

优化器、损失函数和训练在下一节讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值