人工智能机器学习工具Keras快速入门教程1线性回归

Keras是用Python编写的开源神经网络库,运行在Theano或Tensorflow之上。 它设计为模块化,快速且易于使用。 它由Google工程师FrançoisChollet开发。

Keras不处理低级计算,它使用其他库来执行它,称为"后端"。因此Keras提供高级API,能够在TensorFlow,CNTK或Theano之上运行。

Keras高级API处理我们制作模型,定义层或设置多个输入输出模型。Keras还使用损失和优化函数编译我们的模型,使用拟合函数训练。 Keras不处理低级API,例如制作计算图,张量或其他变量。

什么是后端?

后端是Keras中的术语,它可以在其他库(如Tensorflow或Theano)的帮助下执行所有低级计算,如张量积,卷积等。 因此,“后端引擎”将执行模型的计算和开发。 Tensorflow是默认的“后端引擎”,但我们可以在配置中更改。

Theano,Tensorflow和CNTK后端

Theano是由加拿大魁北克省蒙特利尔大学的MILA小组开发的Python开源项目。它广泛使用,可以使用Numpy或Scipy进行多维数组数学运算。 Theano可以使用GPU进行更快的计算,它还可以自动构建用于计算梯度的符号图。 Theano声称它可以识别数值不稳定的表达式并使用更稳定的算法计算。

Tensorflow是深度学习框架中的后起之秀。 由Google的Brain团队开发,它是最受欢迎的深度学习工具。

另一个后端引擎是Microsoft Cognitive Toolkit或CNTK。 它是由Microsoft Team开发,可以在多GPU或多机上运行,​​用于大规模训练深度学习模型。 在某些情况下,据报道CNTK比其他框架更快。

后端比较

Jeong-Yoon Lee's benchmark:Theano比其他后端慢了50倍 ,但准确性彼此接近。

Jasmeet Bhatia:Theano比Tensorflow慢一些。 但总体准确性几乎相同。

在Theano,Tensorflow和CTK之间,TensorFlow比Theano更好。 使用TensorFlow,计算时间更短,CNN优于其他计算时间。

Keras vs Tensorflow

参数 Keras Tensorflow
类型 高级API 低级API
复杂 会Python即可 Tensorflow函数的语法
目的 使用标准图层快速部署模型 允许您制作任意计算图形或模型图层
工具 使用其他API调试工具,如TFDBG Tensorboard可视化工具
社区 大型活跃社区 大型活跃社区和广泛共享的资源

参考资料

Keras的优点

快速部署,易于理解

Keras可以非常快速地建立网络模型,可以几行制作一个简单的网络模型,Keras可以帮助你。

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

model = Sequential()
model.add(Dense(64, activation='relu', input_dim=50)) #input shape of 50
model.add(Dense(28, activation='relu')) #input shape of 50
model.add(Dense(10, activation='softmax'))

大型社区支持

有很多AI社区使用Keras进行深度学习框架。 他们中的许多人向公众发布他们的代码以及教程。

有多个后端

您可以选择Tensorflow,CNTK和Theano作为Keras的后端。 您可以根据需要为不同的项目选择不同的后端。 每个后端都有自己独特的优势。

跨平台且易于模型部署

通过各种支持的设备和平台,您可以在任何设备上部署Keras

  • iOS与CoreML
  • Android版采用Tensorflow Android,
  • 支持.js的Web浏览器
  • 云引擎
  • 树莓派

多GPU支持

Keras内置了对数据并行性的支持,因此它可以处理大量数据并加快训练所需的时间。

Keras的缺点

无法处理低级API

Keras只处理在其他框架或后端引擎(如Tensorflow,Theano或CNTK)上运行的高级API。 因此,如果您制作自己的抽象层,那么它并不是非常有用,因为Keras已经预先配置了层。

安装Keras

安装 pip install --upgrade tensorflow, 启用GPU支持使用pip install --upgrade tensorflow-gpu。

然后pip install keras

验证安装

$python
Python 3.6.5 |Anaconda, Inc.| (default, Apr 29 2018, 16:14:56) 
[GCC 7.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import tensorflow
>>> import keras
Using TensorFlow backend.
>>> 

如果要修改后端,可以配置:~/.keras/keras.json。比如

{
    "floatx": "float32",
    "epsilon": 1e-07,
    "backend": "tensorflow",
    "image_data_format": "channels_last"
}

Keras深度学习基础

Keras的主要结构是模型,它定义了网络的完整图形。 您可以向现有模型添加更多图层,以构建项目所需的自定义模型。

以下是如何在深度学习中创建顺序模型和一些常用层

1.顺序模型

from keras.models import Sequential
from keras.layers import Dense, Activation,Conv2D,MaxPooling2D,Flatten,Dropout

model = Sequential()

2.卷积层

这是卷积层作为输入层的示例,输入形状为320x320x3,具有48个大小为3x3的滤波器,并使用ReLU作为激活函数。

input_shape=(320,320,3) #this is the input shape of an image 320x320x3
model.add(Conv2D(48, (3, 3), activation='relu', input_shape= input_shape))
model.add(Conv2D(48, (3, 3), activation='relu')) # 另一种形式

3. MaxPooling Layer

要对输入表示进行下采样,请使用MaxPool2d并指定内核大小

model.add(MaxPooling2D(pool_size=(2, 2)))

4.密度层

只需指定输出大小即可添加完全连接的图层

model.add(Dense(256, activation='relu'))  

5.Dropout层

model.add(Dropout(0.5))

编译,训练和评估

定义模型需要训练它们。 首先需要使用loss函数和优化器函数编译网络。 这将允许网络改变权重并最小化损失。

model.compile(loss='mean_squared_error', optimizer='adam')

训练时使用fit将训练和验证数据提供给模型,可批量训练网络并设置epoch。

model.fit(X_train, X_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))

最后用测试数据评估模型。

score = model.evaluate(x_test, y_test, batch_size=32)

让我们尝试使用简单的线性回归

图片.png

代码: https://github.com/china-testing/python-api-tesing/blob/master/practices/keras/linear.py

训练数据后,输出应如下所示

Figure_1.png

执行结果:

$ python3 linear.py 
Using TensorFlow backend.
2019-01-03 16:35:47.051990: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2019-01-03 16:35:47.052993: I tensorflow/core/common_runtime/process_util.cc:69] Creating new thread pool with default inter op setting: 2. Tune using inter_op_parallelism_threads for best performance.
Linear regression model is initialized with weights w: 0.33, b: 0.00
Epoch 1/30
200/200 [==============================] - 0s 704us/step - loss: 1.0424 - mean_squared_error: 1.0424
Epoch 2/30
200/200 [==============================] - 0s 330us/step - loss: 0.1406 - mean_squared_error: 0.1406
Epoch 3/30
200/200 [==============================] - 0s 334us/step - loss: 0.1359 - mean_squared_error: 0.1359
Epoch 4/30
200/200 [==============================] - 0s 333us/step - loss: 0.1316 - mean_squared_error: 0.1316
Epoch 5/30
200/200 [==============================] - 0s 335us/step - loss: 0.1276 - mean_squared_error: 0.1276
Epoch 6/30
200/200 [==============================] - 0s 334us/step - loss: 0.1240 - mean_squared_error: 0.1240
Epoch 7/30
200/200 [==============================] - 0s 333us/step - loss: 0.1206 - mean_squared_error: 0.1206
Epoch 8/30
200/200 [==============================] - 0s 335us/step - loss: 0.1175 - mean_squared_error: 0.1175
Epoch 9/30
200/200 [==============================] - 0s 335us/step - loss: 0.1146 - mean_squared_error: 0.1146
Epoch 10/30
200/200 [==============================] - 0s 332us/step - loss: 0.1120 - mean_squared_error: 0.1120
Epoch 11/30
200/200 [==============================] - 0s 333us/step - loss: 0.1096 - mean_squared_error: 0.1096
Epoch 12/30
200/200 [==============================] - 0s 334us/step - loss: 0.1074 - mean_squared_error: 0.1074
Epoch 13/30
200/200 [==============================] - 0s 333us/step - loss: 0.1053 - mean_squared_error: 0.1053
Epoch 14/30
200/200 [==============================] - 0s 334us/step - loss: 0.1034 - mean_squared_error: 0.1034
Epoch 15/30
200/200 [==============================] - 0s 335us/step - loss: 0.1017 - mean_squared_error: 0.1017
Epoch 16/30
200/200 [==============================] - 0s 334us/step - loss: 0.1001 - mean_squared_error: 0.1001
Epoch 17/30
200/200 [==============================] - 0s 334us/step - loss: 0.0987 - mean_squared_error: 0.0987
Epoch 18/30
200/200 [==============================] - 0s 334us/step - loss: 0.0973 - mean_squared_error: 0.0973
Epoch 19/30
200/200 [==============================] - 0s 333us/step - loss: 0.0961 - mean_squared_error: 0.0961
Epoch 20/30
200/200 [==============================] - 0s 334us/step - loss: 0.0949 - mean_squared_error: 0.0949  
Epoch 21/30
200/200 [==============================] - 0s 333us/step - loss: 0.0939 - mean_squared_error: 0.0939  
Epoch 22/30
200/200 [==============================] - 0s 334us/step - loss: 0.0929 - mean_squared_error: 0.0929  
Epoch 23/30
200/200 [==============================] - 0s 332us/step - loss: 0.0920 - mean_squared_error: 0.0920
Epoch 24/30
200/200 [==============================] - 0s 334us/step - loss: 0.0912 - mean_squared_error: 0.0912
Epoch 25/30
200/200 [==============================] - 0s 333us/step - loss: 0.0905 - mean_squared_error: 0.0905
Epoch 26/30
200/200 [==============================] - 0s 332us/step - loss: 0.0898 - mean_squared_error: 0.0898
Epoch 27/30
200/200 [==============================] - 0s 333us/step - loss: 0.0891 - mean_squared_error: 0.0891
Epoch 28/30
200/200 [==============================] - 0s 333us/step - loss: 0.0885 - mean_squared_error: 0.0885
Epoch 29/30
200/200 [==============================] - 0s 333us/step - loss: 0.0880 - mean_squared_error: 0.0880
Epoch 30/30
200/200 [==============================] - 0s 335us/step - loss: 0.0875 - mean_squared_error: 0.0875
Linear regression model is trained to have weight w: 3.64, b: 0.69
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352