TensorFlow2.0 Alpha版已經(jīng)發(fā)布,在2.0中最重要的API或者說到處都出現(xiàn)的API是誰,那無疑是Keras。因此用過2.0的人都會吐槽全世界都是Keras。今天我們就來說說Keras這個(gè)高級API。
作者 | 湯興旺 編輯 | 湯興旺 在TensorFlow2.0中,Keras是一個(gè)用于構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型的高階 API。因此如果你正在使用TensorFow2.0,那么使用Keras構(gòu)建深度學(xué)習(xí)模型是您的不二選擇。在Keras API中總共有如下三大塊: 在Modules中有構(gòu)建訓(xùn)練模型各種必備的組件,如激活函數(shù)activations、損失函數(shù)losses、優(yōu)化器optimizers等;在Class中有Sequential和Model兩個(gè)類,它們用來堆疊模型;在Functions中有Input()函數(shù),它用來實(shí)例化張量。 因此若您使用的深度學(xué)習(xí)框架是TensorFlow,而且是2.0版本,那么你就不可能不使用tensorflow.keras。這也就是使用過TensorFlow2.0版本的都在吐槽全世界都是Keras的原因。 通過上面的介紹,我們知道在Modules中有activations、losses、optimizers等構(gòu)建訓(xùn)練模型時(shí)各種必備的組件。下圖就是Modules中有所的模塊。 下面我們詳細(xì)說說里面最常見的幾個(gè)模塊應(yīng)該如何使用。 1. 常用的數(shù)據(jù)集(datasets) 在TensorFlow2.0中,常用的數(shù)據(jù)集需要使用tf.keras.datasets來加載,在datasets中有如下數(shù)據(jù)集。 對于上圖中的數(shù)據(jù)集我們可以像下面這樣加載 (train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data() 當(dāng)然我們平時(shí)使用的數(shù)據(jù)集肯定不在于此,這些數(shù)據(jù)集都是些最基礎(chǔ)的數(shù)據(jù)集。對于自己的數(shù)據(jù)如何讀取,請期待我們下次的分享。
2. 神經(jīng)網(wǎng)絡(luò)層(Layers) 在構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò)模型時(shí),我們需要定制各種各樣的層結(jié)構(gòu)。這時(shí)候就要用到layers了,下圖是TensorFlow2.0中部分層,它們都是Layer的子類。 那么我們?nèi)绾问褂胠ayer來構(gòu)建模型呢?方法如下:
from tensorflow.keras import layers
layers.Conv2D()
layers.MaxPool2D()
layers.Flatten()
layers.Dense() 3. 激活函數(shù)(Optimizers) 在構(gòu)建深度學(xué)習(xí)網(wǎng)絡(luò)時(shí),我們經(jīng)常需要選擇激活函數(shù)來使網(wǎng)絡(luò)的表達(dá)能力更強(qiáng)。下面將介紹TensorFlow2.0中的激活函數(shù)及它們應(yīng)該在TensorFlow2.0中該如何使用。下圖是TensorFlow2.0中部分激活函數(shù): from tensorflow.keras import layers
layers.Conv2D(...,activation='relu') layers.Dense(...,activation='softmax')
4. 優(yōu)化器(activations) 通常當(dāng)我們準(zhǔn)備好數(shù)據(jù),設(shè)計(jì)好模型后,我們就需要選擇一個(gè)合適的優(yōu)化器(Optimizers)對模型進(jìn)行優(yōu)化。下面將介紹TensorFlow2.0中的優(yōu)化器及他們應(yīng)該在TensorFlow2.0中該如何使用。下圖是TensorFlow2.0中所有的優(yōu)化器,它們都是Optimizer的子類。 optimizers = tf.keras.optimizers.Adam() optimizers = tf.keras.optimizers.SGD() ... 5. 損失函數(shù)(Losses)
我們知道當(dāng)我們設(shè)計(jì)好模型時(shí)我們需要優(yōu)化模型,所謂的優(yōu)化就是優(yōu)化網(wǎng)絡(luò)權(quán)值使損失函數(shù)值變小,但是損失函數(shù)變小是否能代表精度越高呢?那么多的損失函數(shù),我們又該如何選擇呢?接下來我們了解下在TensorFlow2.0中如何使用損失函數(shù)。下圖是TensorFlow2.0中所有的損失函數(shù),它們都是Loss的子類。 對于損失函數(shù)的使用你可以像下面這樣使用: loss = tf.keras.losses.SparseCategoricalCrossentropy()
loss = tf.keras.losses.mean_squared_error() ... 在Class中有Sequential和Model兩個(gè)類,它們分別是用來堆疊網(wǎng)絡(luò)層和把堆疊好的層實(shí)例化可以訓(xùn)練的模型。
1. Model 對于實(shí)例化Model有下面兩種方法 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) 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() 在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'])
在Functions中,有一個(gè)Input函數(shù),其用來實(shí)例化Keras張量。對于Input函數(shù),它有如下參數(shù)
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) import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers (train_images,train_labels),(test_images,test_labels)= keras.datasets.fashion_mnist.load_data() 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']) model_train=model.fit(x_train, y_train, batch_size=64, epochs=5, validation_split=0.1)
在本講中,我們簡單的了解了TensorFlow2.0中高級API Keras是如何使用的,我們可以看到Keras真的是無處不在,如果你想學(xué)好TensorFlow2.0,那么你必須掌握好Kears。 下期預(yù)告:如何讀取自己的數(shù)據(jù)集及數(shù)據(jù)的使用。 網(wǎng)絡(luò)結(jié)構(gòu)
|