python数据分析人工智能机器学习软件测试Python专家之路程序员

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

2019-01-03  本文已影响16人  python测试开发

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

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

image

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

image

另一个后端引擎是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

多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
上一篇 下一篇

猜你喜欢

热点阅读