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的优点
快速部署,易于理解
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
页面更新:2024-05-23
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号