深度学习的核心组件
1、层
可以将层看作深度学习的乐高积木,在 Keras 中,构建深度学习模型就是将相互兼容的多个层拼接在一起,以建立有用的数据变换流程
层兼容性(layer compatibility):每一层接受特定形状的输入张量,返回特定形状的输出张量
注意:Keras构建网络的过程中,第一层需要显示输入形状input_shape=(xxx) 后续的层不需要输入形状,因为可以从上一层中推导得出
2、模型
深度学习模型是层构成的有向无环图,一个模型就是一个网络拓扑结构,选定了一个模型就意味着定义了一个假设空间(hypothesis space),也就意味着将假设空间限定为一系列特定的张量运算,将输入数据映射为输出数据。
"温故知新"机器学习的一种定义:在预先定义好的假设空间中,利用反馈信号的指引来寻找输入数据的有用表示
3、损失函数与优化器
一般损失函数的选择:
二分类问题:二元交叉熵(binary crossentropy)损失函数;
多分类问题:分类交叉熵(categorical crossentropy)损失函数;
回归问题:均方误差(MSE,mean-squared error)损失函数;
序列学习问题:联结主义时序分类(CTC,connectionist temporal classification)损失函数
Keras开发基本流程
(1) 定义训练数据:输入张量和目标张量。
(2) 定义层组成的网络(或模型),将输入映射到目标。(构建模型)
(3) 配置学习过程:选择损失函数、优化器和需要监控的指标。(编译)
(4) 调用模型的 fit 方法在训练数据上进行迭代。(训练)
Keras示例
二分类问题
数据来源:互联网电影数据库(IMDB)的50000条严重两极分化的评论
训练集25000条,测试集25000条
from keras.datasets import imdb
from keras import models, layers
import numpy as np
##1、加载IMDB数据集
(train_data, train_labels),(test_data, test_labels) = imdb.load_data(num_words=10000)
##2、数据预处理(转换成可输入到神经网络的张量)
def vectorize_sequences(sequences, dimension=10000):
results = np.zeros((len(sequences),dimension))
for i,sequence in enumerate(sequences):
results[i,sequence] = 1
#注意这里的sequence是个列表