【深度学习】入门之keras

速查手册

keras

30s理解基本概念

符号计算

Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还 是TensorFlow,都是一个“符号主义”的库。

符号主义的计算首先定义各种 变量,然后建立一个“计算图”,计算图规定了各个变量之间的计算关系。建立好的计算图需要编译已确 定其内部细节,然而,此时的计算图还是一个“空壳子”,里面没有任何实际的数据,只有当你把需要运 算的输入放进去后,才能在整个模型中形成数据流,从而形成输出值。

Keras的模型搭建形式就是这种方法,在你搭建Keras模型完毕后,你的模型就是一个空壳子,只有实 际生成可调用的函数后(K.function),输入数据,才会形成真正的数据流。

张量tensor

张量可以看作是向量、矩阵的自然推广

  • 规模最小的张量是0阶张量,即标量,也就是一个数。

  • 当我们把一些数有序的排列起来,就形成了1阶张量,也就是一个向量

  • 如果我们继续把一组向量有序的排列起来,就形成了2阶张量,也就是一个矩阵

  • 把矩阵摞起来,就是3阶张量,我们可以称为一个立方体,具有3个颜色通道的彩色图片就是一个这样 的立方体

‘th’与’tf’

'th’模式,即Theano模式

'tf’模式,即TensorFlow模式

这两种模式在如何表示一组彩色图片的问题上发生了分歧

Keras默认的数据组织可通过K.image_dim_ordering()函数返回,请在网络的训练和测试中保持维度顺序一 致

batch

深度学习的优化算法一般为梯度下降,每次的参数更新有两种方式

  • 批梯度下降(Batch gradient descent),遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度,计算开销过大
  • 随机梯度下降(stochastic gradient descent),每看一个数据就算一下损失函数,然后求梯度更新参数,收敛性能不好
  • 小批的梯度 下降(mini-batch gradient decent)采取折中的方法,把数据分为若干个批,按批来更新参数,一个批中的一组数据共同决定了本次梯度的方向

30s入门keras

Sequential模型

Keras的核心数据结构是“模型”,Keras中主要的模型是Sequential。

Sequential 是多个网络层的线性堆叠。

from keras.models import Sequential

model = Sequential()

堆叠网络层

将一些网络层通过.add()堆叠起来,就构成了一个模型:

from keras.layers import Dense, Activation

model.add(Dense(output_dim=64, input_dim=100))
model.add(Activation("relu"))
model.add(Dense(output_dim=10))
model.add(Activation("softmax"))

也可通过向 Sequential 模型传递一个layer的list来构造该模型:

from keras.models import Sequential

model = Sequential([
Dense(64, input_dim=100),
Activation('relu'),
Dense(10),
Activation('softmax'),
])

编译模型

编译模型时必须指明损失函数loss和优化器optimizer

model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

也可定制模型

from keras.optimizers import SGD

model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))

迭代训练

batch_size即为mini-batch中的每批中的数据量

model.fit(X_train, Y_train, nb_epoch=5, batch_size=32)

评估模型

loss_and_metrics = model.evaluate(X_test, Y_test, batch_size=32)

预测

classes = model.predict_classes(X_test, batch_size=32)
proba = model.predict_proba(X_test, batch_size=32)

一些细节

指定输入shape

下面的三个指定输入数据shape的方法是严格等价的:

model.add(Dense(32, input_shape=(784,)))
model.add(Dense(32, batch_input_shape=(None, 784)))
model.add(Dense(32, input_dim=784))

同理

model.add(LSTM(32, input_shape=(10, 64)))
model.add(LSTM(32, batch_input_shape=(None, 10, 64)))
model.add(LSTM(32, input_length=10, input_dim=64))

Merge层

多个 Sequential 可经由一个Merge层合并到一个输出。Merge层的输出是一个可以被添加到新 Sequential 的层对象

Merge层支持一些预定义的合并模式,包括:

  • sum (defualt):逐元素相加 concat :张量串联,可以通过提供
  • concat_axis 的关键字参数指定按照哪个轴进行串联
  • mul :逐元素相乘
  • ave :张量平均
  • dot :张量相乘,可以通过 dot_axis 关键字参数来指定要消去的轴
  • cos :计算2D张量(即矩阵)中各个向量的余弦距离
  • 提供关键字参数 mode:mode=lambda x: x[0] - x[1]
from keras.layers import Merge
left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))
right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))
merged = Merge([left_branch, right_branch], mode='concat')
final_model = Sequential()
final_model.add(merged)
final_model.add(Dense(10, activation='softmax'))

编译

  • 优化器optimizer:该参数可指定为已预定义的优化器名,如 rmsprop 、 adagrad ,或一 个 Optimizer 类的对象
  • 损失函数loss:该参数为模型试图最小化的目标函数,它可为预定义的损失函数名, 如 categorical_crossentropy 、 mse ,也可以为一个损失函数
  • 指标列表metrics:对分类问题,我们一般将该列表设置为 metrics=[‘accuracy’] 。指标可以是一个预 定义指标的名字,也可以是一个用户定制的函数.指标函数应该返回单个张量,或一个完成 metric_name - > metric_value 映射的字典
model.compile(optimizer='rmsprop',
loss='mse')

训练

Keras以Numpy数组作为输入数据和标签的数据类型

# generate dummy data
import numpy as np
data = np.random.random((1000, 784))
labels = np.random.randint(2, size=(1000, 1))

# train the model, iterating on the data in batches
# of 32 samples
model.fit(data, labels, nb_epoch=10, batch_size=32)
# generate dummy data
import numpy as np
from keras.utils.np_utils import to_categorical
data_1 = np.random.random((1000, 784))
data_2 = np.random.random((1000, 784))

# these are integers between 0 and 9
labels = np.random.randint(10, size=(1000, 1))

# we convert the labels to a binary matrix of size (1000, 10)
# for use with categorical_crossentropy
labels = to_categorical(labels, 10)

# train the model
# note that we are passing a list of Numpy arrays as training data
# since the model has 2 inputs
model.fit([data_1, data_2], labels, nb_epoch=10, batch_size=32)

查看模型

  • model.summary():打印出模型概况
  • model.get_config():返回包含模型配置信息的Python字典
  • model.get_weights():返回模型权重张量的列表

保存模型

不推荐使用pickle来保存Keras模型!

可以利用h5py库,将Keras模型和权重保存在一个HDF5文件中

该文件将包含:

  • 模型的结构,以便重构该模型
  • 模型的权重
  • 训练配置(损失函数,优化器等)
  • 优化器的状态,以便于从上次训练中断的地方开始
from keras.models import load_model
model.save('my_model.h5') # creates a HDF5 file 'my_model.h5'
del model # deletes the existing model

# returns a compiled model
# identical to the previous one
model = load_model('my_model.h5')

只保存模型结构,而不包含其权重或配置信息:

# save as JSON
json_string = model.to_json()

# save as YAML
yaml_string = model.to_yaml()
# model reconstruction from JSON:
from keras.models import model_from_json
model = model_from_json(json_string)

# model reconstruction from YAML
model = model_from_yaml(yaml_string)

使用预训练模型

通过 keras.applications 载入模型

from keras.applications.vgg16 impoprt VGG16
from keras.applications.vgg19 impoprt VGG19
from keras.applications.resnet50 impoprt ResNet50
from keras.applications.inception_v3 impoprt InceptionV3

model = VGG16(weights='imagenet', include_top=True)
官方文档: https://keras.io/zh/#30-keras
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可可卷

不要看到我~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值