TensorFlow2.0 Alpha版已經發布,在2.0中最重要的API或者說到處都出現的API是誰,那無疑是Keras。因此用過2.0的人都會吐槽全世界都是Keras。今天我們就來說說Keras這個高級API。
作者 | 湯興旺
編輯 | 言有三
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。