[Deep-Learning-with-Python]神经网络入手学习[上]

神经网络入手[上]

  • [x] 神经网络的核心部分
  • [x] Keras介绍
  • [ ] 使用Keras解决简单问题:分类和回归

神经网络剖析

神经网络的训练与下列对象相关:

  • 网络层Layers,网络层结合形成神经网络模型;
  • 输入数据以及对应标签;
  • 损失函数,定义用来学习的反馈信号;
  • 优化方法,定义学习过程。
    关系图:


    image

    网络层堆叠形成网络模型,网络模型由输入数据得到预测值。损失函数比较预测值与实际值,得到损失函数值:用来评估预测结果的好坏;优化方法用损失值来更新网络模型的权重系数。

网络层:神经网络模型的构建模块

网络层是神经网络的基本数据结构。一个网络层把一个或多个数据输入张量进行数据处理过程得到一个或多个输出张量。一些网络层是无状态的(没有网络参数),但大多数网络层是有状态的---网络层的权重系数,这些通过随机梯度下降算法学到的权重张量,形成了网络层的知识
不同的网络进行的数据处理各不相同,因此需要的数据格式及数据类型也有所差异。比如:2D张量,形状为(samples,features)存储简单的向量信息,通常是全连接层(FC 或 Dense)的输入格式要求;LSTM网络层通常处理3D张量,形状为(samples,timesteps,featuers)的序列数据;2D卷积层通常处理存储在4D张量中的图片数据。

可以把网络层看做深度学习的乐高积木块,通过积木块我们可以搭建不同的网络模型。在Keras框架中通过把相互兼容的网络层堆叠形成数据处理过程,而网络层的兼容性是指该网络层接收特定形状的输入张量同时返回特东形状的输出张量
例如:

from keras import layers
layer = layers.Dense(32, input_shape=(784, ))

定义的网络层只接收2D张量,第一维度为784,;同时网络层输出的第一维度为32。
在Keras中,不必担心网络的兼容性,因为添加到网络模型中的网络层是动态构建地,匹配接下来连接的网络层。比如:

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(32, input_shape=(784, )))
model.add(layers.Dense(32))

第二个Dense层不必定义接收张量的形状,keras能自动定义。

网络模型:网络层堆叠而成

一个神经网络模型是网络层的非循环连接而成。最常见的是网络层的线性连接堆叠,讲一个输入张量转换为一个输出张量。
也存在不同的网络拓扑结构,如:

  • 二分支网络模型;
  • 多分支网络模型;
  • Inception块.

网络模型的拓扑结构定义了一个假设空间。通过选择网络模型的拓扑结构,限制了假设空间能进行的张量操作,通过这些张量操作有输出张量得到对应的输出张量;之后寻找这些张量操作中涉及到的权重系数张量。
网络模型结构的选择与其说是一门科学不如说是一门艺术,尽管存在一些可以依赖的经验和原理,但只有不断尝试才能使你成为一个优秀的神经网络缔造者。

损失函数和优化算法:配置学习过程的关键

网络模型结构定义完成之后,仍然需要定义两件事:

  • 损失函数:训练过程中最小化的函数值,一种评估网络模型的表现;
  • 优化算法:决定基于损失函数如何更新权重系数;有常见的SGD,以及变种SGD算法。

多输出神经网络模型可能有多个损失函数(一个输出一个损失函数)。但是梯度下降过程必然是基于一个损失函数标量值;所以,对于有多个损失函数的网络模型来说,所有的损失函数值必须整合(平均化处理)成一个标量值

特定问题需要选择特定的损失函数。对于常见的问题,如:分类、回归、序列预测,有对应的指导-选择正确的损失函数。具体:二分类问题使用对数损失binary crossentropy,多分类问题采用分类交叉熵categorical crossentropy,回归问题使用均方误差,序列学习问题采用Connectionist temporal classification(CTC)损失函数等等。只有在面对真正要解决的科学问题时,才能决定要使用的损失函数类型以及定义。

Keras 介绍

Keras是一个Python语言的深度学习框架,提供了快速搞笑的深度学习网络模型定义和训练方法。Keras设计初衷是为了方便科学家能进行快速实验。Keras特征:

  • 相同代码同时支持CPU、GPU运行;
  • 用户友好API--网络模型定义、训练方便;
  • 内置卷积神经网络、循环神经网络等等;
  • 支持任意的网络架构:多输入、多输出网络模型,网络层共享,模型共享等等。
    Keras支持所有的Python版本,从2.7到3.6(mid-2017).Keras 有200000个用户,从学术科学家和工程师到新手以及大公司的毕业生,还有兴趣爱好者。Google、Netflix、Uber、CERN、Yelp,Square以及上百个创业公司都猜使用Keras框架应用在相应的业务上。Keras也是Kaggle上流行的网络框架。

Keras,TensorFlow,Theano 和 CNTK

Keras 是一个模型级别的工具库,提供构建神经网络模型的高级API。Keras并不进行底层的操作比如张量操作和导数计算;相应地,Keras以来与特定的张量库进行这些操作,作为Keras的背后引擎。目前,Keras支持3个背后引擎:TensorFlow、Theano和CNTK。将来,有望支持更多的深度学习框架成为Keras的背后计算引擎。


image

Keras开发

Keras工作流大致如下:

  1. 定义训练数据:输入张量和目标张量;
  2. 定义网络层(或网络模型):由输入张量处理得到输出张量;
  3. 配置训练过程--选择损失函数、优化算法以及监测指标;
  4. 通过调用模型的fit()方法在训练数据上迭代训练。

模型定义有两种方法:使用Sequential类(使用于网络层的线性堆叠,目前最常见);以及函数式API(支持任意网络架构,更灵活)。
方法一:Sequential类

from keras import models
from keras import layers

model = models.Sequential()
model.add(layers.Dense(32, activation='relu', input_shape=(784,)))
model.add(layers.Dense(10, activation='softmax'))

方法二: 函数式API

input_tensor = layers.Input(shape=(784,))
x = layers.Dense(32, activation='relu')(input_tensor)
output_tensor = layers.Dense(10, activation='softmax')(x)

model = models.Model(inputs=input_tensor, outputs=output_tensor)

一旦模型架构定义完成,不必区分到底网络模型是怎么定义的,之后的处理步骤没有差别。
学习过程在编译过程中配置:定义优化算法、损失函数和监测指标。比如:

from keras import optimizers

model.compile(optimizer=optimizer.RMSProp(lr=0.001),loss='mse',metrics=['accuracy'])

最后,通过fit()方法将numpy数组形式的输入数据(以及对应标签)输入到网络模型中进行模型的学习过程。

model.fit(input_tensor, target_tensor, batch_size=128, epochs=10)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,688评论 1 330
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,559评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,749评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,581评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,741评论 3 271
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,684评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,122评论 2 292
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,847评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,441评论 0 228
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,939评论 2 232
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,333评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,783评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,275评论 3 220
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,830评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,444评论 0 180
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,553评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,618评论 2 249

推荐阅读更多精彩内容