1 Keras概述
在TensorFlow2.0中,Keras是一个用于构建和训练深度学习模型的高阶 API。因此如果你正在使用TensorFow2.0,那么使用Keras构建深度学习模型是您的不二选择。在Keras API中总共有如下三大块:
在Modules中有构建训练模型各种必备的组件,如激活函数activations、损失函数losses、优化器optimizers等;在Class中有Sequential和Model两个类,它们用来堆叠模型;在Functions中有Input()函数,它用来实例化张量。
因此若您使用的深度学习框架是TensorFlow,而且是2.0版本,那么你就不可能不使用tensorflow.keras。这也就是使用过TensorFlow2.0版本的都在吐槽全世界都是Keras的原因。
2 Modules
通过上面的介绍,我们知道在Modules中有activations、losses、optimizers等构建训练模型时各种必备的组件。下图就是Modules中有所的模块。
下面我们详细说说里面最常见的几个模块应该如何使用。
1. 常用的数据集(datasets)
在TensorFlow2.0中,常用的数据集需要使用tf.keras.datasets来加载,在datasets中有如下数据集。
对于上图中的数据集我们可以像下面这样加载
(train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data()
当然我们平时使用的数据集肯定不在于此,这些数据集都是些最基础的数据集。对于自己的数据如何读取,请期待我们下次的分享。
2. 神经网络层(Layers)
在构建深度学习网络模型时,我们需要定制各种各样的层结构。这时候就要用到layers了,下图是TensorFlow2.0中部分层,它们都是Layer的子类。
那么我们如何使用layer来构建模型呢?方法如下:
from tensorflow.keras import layers
layers.Conv2D()
layers.MaxPool2D()
layers.Flatten()
layers.Dense()
3. 激活函数(Optimizers)
在构建深度学习网络时,我们经常需要选择激活函数来使网络的表达能力更强。下面将介绍TensorFlow2.0中的激活函数及它们应该在TensorFlow2.0中该如何使用。下图是TensorFlow2.0中部分激活函数:
from tensorflow.keras import layers
layers.Conv2D(...,activation='relu')
layers.Dense(...,activation='softmax')
4. 优化器(activations)
通常当我们准备好数据,设计好模型后,我们就需要选择一个合适的优化器(Optimizers)对模型进行优化。下面将介绍TensorFlow2.0中的优化器及他们应该在TensorFlow2.0中该如何使用。下图是TensorFlow2.0中所有的优化器,它们都是Optimizer的子类。
对于优化器的使用你可以像下面这样使用:
optimizers = tf.keras.optimizers.Adam()
optimizers = tf.keras.optimizers.SGD()
...
5. 损失函数(Losses)
我们知道当我们设计好模型时我们需要优化模型,所谓的优化就是优化网络权值使损失函数值变小,但是损失函数变小是否能代表精度越高呢?那么多的损失函数,我们又该如何选择呢?接下来我们了解下在TensorFlow2.0中如何使用损失函数。下图是TensorFlow2.0中所有的损失函数,它们都是Loss的子类。
对于损失函数的使用你可以像下面这样使用:
loss = tf.keras.losses.SparseCategoricalCrossentropy()
loss = tf.keras.losses.mean_squared_error()
...
3 Class
在Class中有Sequential和Model两个类,它们分别是用来堆叠网络层和把堆叠好的层实例化可以训练的模型。
1. Model
对于实例化Model有下面两种方法
(1).使用keras.Model API
import tensorflow as tf inputs = tf.keras.Input(shape=(3,)) x=tf.keras.layers.Dense(4,activation=tf.nn.relu(inputs) outputs=tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x) model=tf.keras.Model(inputs=inputs, outputs=outputs)
(2).继承Model类
import tensorflow as tf class MyModel(tf.keras.Model): def __init__(self): super(MyModel, self).__init__() self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu) self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax) def call(self, inputs): x = self.dense1(inputs) return self.dense2(x) model = MyModel()
2. Sequential
在TensorFlow2.0中,我们可以使用Sequential模型。具体方式如下:
model = keras.Sequential()
model = model.add(layers.Conv2D(input_shape=(x_train.shape[1], x_train.shape[2],x_train.shape[3]),filters=32,kernel_size=(3,3), strides=(1,1), padding='valid',activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2,2)))
model.add(layers.Flatten())model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=keras.optimizers.Adam(),loss=keras.losses.SparseCategoricalCrossentropy(),metrics=['accuracy'])
4 Functions
在Functions中,有一个Input函数,其用来实例化Keras张量。对于Input函数,它有如下参数
tf.keras.Input( shape=None, batch_size=None, name=None, dtype=None, sparse=False, tensor=None, **kwargs )
具体方法如下:
x = Input(shape=(32,)) y = Dense(16, activation='softmax')(x) model = Model(x, y)
5 简单的图像分类模型实例
#1导入相应的API
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
#2加载数据
(train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data()
#3构建网络
model = keras.Sequential()
model = model.add(layers.Conv2D(input_shape=(x_train.shape[1], x_train.shape[2],x_train.shape[3]),filters=32,kernel_size=(3,3), strides=(1,1), padding='valid',activation='relu'))
model.add(layers.MaxPool2D(pool_size=(2,2)))
model.add(layers.Flatten())model.add(layers.Dense(32,activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer=keras.optimizers.Adam(),loss=keras.losses.SparseCategoricalCrossentropy(),metrics=['accuracy'])
#4模型显示
model.summary()
#5模型训练
model_train=model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.1)
总结
在本讲中,我们简单的了解了TensorFlow2.0中高级API Keras是如何使用的,我们可以看到Keras真的是无处不在,如果你想学好TensorFlow2.0,那么你必须掌握好Kears。