【TensorFlow2.0】以后我们再也离不开Keras了?
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 tftf.keras.Model(inputs=inputs, outputs=outputs)
(2).繼承Model類
import tensorflow as tfclass MyModel(tf.keras.Model):
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(
具體方法如下:
x = Input(shape=(32,))
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。
下期預告:如何讀取自己的數據集及數據的使用。
最近直播
今日看圖猜技術
網絡結構
更多精彩內容請關注知乎專欄《有三AI學院》
轉載文章請后臺聯系
侵權必究
往期精選
【TensorFlow2.0】TensorFlow2.0專欄上線,你來嗎?
【AI初識境】從3次人工智能潮起潮落說起
【AI初識境】從頭理解神經網絡-內行與外行的分水嶺
【AI初識境】近20年深度學習在圖像領域的重要進展節點
【AI初識境】激活函數:從人工設計到自動搜索
【AI初識境】什么是深度學習成功的開始?參數初始化
【AI初識境】深度學習模型中的Normalization,你懂了多少?
【AI初識境】為了圍剿SGD大家這些年想過的那十幾招
【AI初識境】被Hinton,DeepMind和斯坦福嫌棄的池化,到底是什么?
【AI初識境】如何增加深度學習模型的泛化能力
【AI初識境】深度學習模型評估,從圖像分類到生成模型
【AI初識境】深度學習中常用的損失函數有哪些?
【AI初識境】給深度學習新手做項目的10個建議
【AI不惑境】數據壓榨有多狠,人工智能就有多成功
【AI不惑境】網絡深度對深度學習模型性能有什么影響?
【AI不惑境】網絡的寬度如何影響深度學習模型的性能?
【AI不惑境】學習率和batchsize如何影響模型的性能?
【完結】深度學習CV算法工程師從入門到初級面試有多遠,大概是25篇文章的距離
【完結】優秀的深度學習從業者都有哪些優秀的習慣
【完結】給新手的12大深度學習開源框架快速入門項目
【完結】總結12大CNN主流模型架構設計思想
創業第一天,有三AI扔出了深度學習的150多篇文章和10多個專欄
言有三新書預售,不貴,有料
這個春天,有三最后一月的學習“季劃”招生
有三AI VIP會員發售,你的私人AI顧問已上線
有三AI知識星球官宣,BAT等大咖等你來撩
有三AI小程序上線,把你的代碼show給世界
揭秘7大AI學習板塊,這個星球推薦你擁有
總結
以上是生活随笔為你收集整理的【TensorFlow2.0】以后我们再也离不开Keras了?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【AI不惑境】学习率和batchsize
- 下一篇: 有三AI一周年了,说说我们的初衷,生态和