久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Keras入門必讀教程:手把手從安裝到解決實際問題

 520jefferson 2021-09-22
大數(shù)據(jù)DT
提供大數(shù)據(jù),、AI等領(lǐng)域干貨學習資源的「寶藏號」,跟50萬技術(shù)人共同成長,,一起玩轉(zhuǎn)大數(shù)據(jù),、Python、數(shù)據(jù)分析,、數(shù)據(jù)科學,、人工智能!還會有各種好玩又奇葩的數(shù)據(jù)解讀,,邊學習邊吃瓜,!
604篇原創(chuàng)內(nèi)容
公眾號

導讀:Keras是目前深度學習研究領(lǐng)域非常流行的框架。

作者:史丹青
來源:大數(shù)據(jù)DT(ID:hzdashuju)

圖片



01 Keras簡介與安裝

Keras是目前深度學習研究領(lǐng)域非常流行的框架,,相比于TensorFlow,,Keras是一種更高層次的深度學習API。

Keras使用Python編寫而成,,包含了大量模塊化的接口,,有很多常用模型僅需幾行代碼即可完成,大大提高了深度學習的科研效率,。它是一個高級接口,,后端可支持TensorFlow、Theano,、CNTK等多種深度學習基礎(chǔ)框架,,默認為TensorFlow,其他需要單獨設(shè)置,。

目前,,谷歌已經(jīng)將Keras庫移植到TensorFlow中,也讓Keras成了TensorFlow中的高級API模塊,。

Keras具備了三個核心特點:

  • 允許研究人員快速搭建原型設(shè)計,。
  • 支持深度學習中最流行的卷積神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò),以及它們兩者的組合,。
  • 可以在CPU與GPU上無縫運行,。

Keras的口號是“為人類服務(wù)的深度學習”,,在整體的設(shè)計上堅持對開發(fā)者友好,在API的設(shè)計上簡單可讀,,將用戶體驗放在首位,,希望研發(fā)人員可以以盡可能低的學習成本來投入深度學習的開發(fā)中,。

Keras的API設(shè)計是模塊化的,,用戶可以基于自己設(shè)想的模型對已有模塊進行組裝,其中如神經(jīng)網(wǎng)絡(luò)層,、損失函數(shù),、優(yōu)化器、激活函數(shù)等都可以作為模塊組合成新的模型,。與此同時,,Keras的擴展性非常強大,用戶可以輕松創(chuàng)建新模塊用于科學研究,。

目前最簡單的引入Keras的方法就是直接使用最新版本的TensorFlow,,可以通過以下引入方式在代碼中使用Keras。

from tensorflow import keras

此外,,Keras具有一個非?;钴S的開發(fā)者社區(qū),每天都會有大量的開源代碼貢獻者為Keras提供各種各樣的功能,。其中Keras-contrib是一個官方的Keras社區(qū)擴展版本,,包含了很多社區(qū)開發(fā)者提供的新功能,為Keras的用戶提供了更多選擇,。

Keras-contrib的新功能通過審核后都會整合到Keras核心項目中,,如果現(xiàn)在就想在項目中使用,需要單獨安裝,,同樣,,可以使用pip工具直接安裝。

$ sudo pip install git+https://www.github.com/keras-team/keras-contrib.git

隨著Karas加入TensorFlow,,為了更好地進行代碼上的整合,,Keras-contrib項目被整合進了TensorFlow Addons。

TensorFlow Addons是一個針對TensorFlow核心庫功能的補充,,集成了社區(qū)最新的一系列方法,。由于AI領(lǐng)域發(fā)展的速度快,一些最新的算法無法立刻移植到TensorFlow核心庫中,,所以會優(yōu)先在TensorFlow Addons中進行發(fā)布,。

可以使用pip的方式方便地安裝TensorFlow Addons,從而使用一些高級的API接口,。

$ pip install tensorflow-addons


02 Keras使用入門

Keras包含兩種模型類型,,第一種是序列模型,,第二種是函數(shù)式模型。其中后者屬于Keras的進階型模型結(jié)構(gòu),,適用于多入多出,、有向無環(huán)圖或具備共享層的模型,具體可參考Keras官方文檔,。本節(jié)中主要通過介紹序列模型來帶讀者學習Keras的使用方法,。

所謂序列模型是指多個網(wǎng)絡(luò)層線性堆疊的模型,結(jié)構(gòu)如下列代碼所示,,該序列模型包含了一個784×32的全連接層,、ReLU激活函數(shù)、32×10的全連接層以及softmax激活函數(shù),。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation

model = Sequential([
Dense(32, input_shape=(784,)),
Activation('relu'),
Dense(10),
Activation('softmax'),
])

也可以使用add() 方法進行序列模型中網(wǎng)絡(luò)層的添加,。

model = Sequential()
model.add(Dense(32,input_dim=784))
model.add(Activation('relu'))

下面我們來看一個用Keras實現(xiàn)的神經(jīng)網(wǎng)絡(luò)二分類示例,網(wǎng)絡(luò)結(jié)構(gòu)非常簡單,,由兩個全連接層構(gòu)成,。示例中包含了網(wǎng)絡(luò)模型的搭建、模型的編譯以及訓練,,讀者可以在自己的設(shè)備上嘗試運行此代碼以熟悉Keras的使用,。

import numpy as np
from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense
data = np.random.random((1000,100))
labels = np.random.randint(2,size=(1000,1))
model = Sequential()
model.add(Dense(32,activation='relu', input_dim=100))
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])
model.fit(data,labels,epochs=10,batch_size=32)
predictions = model.predict(data)

下面我們根據(jù)Keras官網(wǎng)的示例來嘗試搭建一個類似VGG網(wǎng)絡(luò)的卷積神經(jīng)網(wǎng)絡(luò)模型。首先引入需要使用的模塊,,其中包括Keras庫中的全連接層,、卷積層等。

import numpy as np
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras.optimizers import SGD

為了實現(xiàn)模型,,我們需要先準備一些訓練和測試數(shù)據(jù),,這里使用隨機方法進行數(shù)據(jù)的準備。

x_train = np.random.random((100, 100, 100, 3))
y_train = keras.utils.to_categorical(np.random.randint(10, size=(100, 1)),
num_classes=10)
x_test = np.random.random((20, 100, 100, 3))
y_test = keras.utils.to_categorical(np.random.randint(10, size=(20, 1)),
num_classes=10)

整體上可以按照VGG的結(jié)構(gòu)來搭建整個網(wǎng)絡(luò),,包括疊加卷積層,、池化層、Dropout層,、Max Pooling層,、全連接網(wǎng)絡(luò)層等。

model = Sequential()

model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(100, 100, 3)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

最后我們進行模型的優(yōu)化設(shè)置以及對模型進行編譯,,并可以在訓練數(shù)據(jù)上進行學習,。

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd)
model.fit(x_train, y_train, batch_size=32, epochs=10)
score = model.evaluate(x_test, y_test, batch_size=32)

同樣地,我們也可以使用Keras 的序列模型實現(xiàn)基于LSTM 的循環(huán)神經(jīng)網(wǎng)絡(luò)模型,。

from tensorflow.keras.models import Sequential 
from tensorflow.keras.layers import Dense,Embedding,LSTM

model = Sequential()
model.add(Embedding(20000,128))
model.add(LSTM(128,dropout=0.2,recurrent_dropout=0.2))
model.add(Dense(1,activation='sigmoid'))

下面則是對于該循環(huán)神經(jīng)網(wǎng)絡(luò)模型的編譯與訓練,,同時最終評估了訓練模型的效果。

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=
['accuracy'])
model.fit(x_train, y_train, batch_size=32, epochs=15, verbose=1, validation_data=
(x_test,y_test))
score = model.evaluate(x_test, y_test, batch_size=32)

最終我們可以將模型保存到本地的model文件夾路徑下。

model.save('./model')

當在業(yè)務(wù)中需要使用對應模型時,,只需要使用加載模型的方法從model 路徑中進行模型的加載即可,。

from tensorflow.keras.models import load_model
my_model = load_model('./model')

通過這幾個示例我們會發(fā)現(xiàn),使用Keras 來實現(xiàn)那些復雜的深度學習網(wǎng)絡(luò)像是搭建積木一樣,,把一些非常復雜的工作簡單化了,。在下一節(jié)中,會通過一個簡明的案例帶領(lǐng)大家了解如何使用Keras解決實際的應用問題,。


03 Keras實例:文本情感分析

本小節(jié)中我們通過學習Keras官方的一個實例來熟悉一下Keras的使用方法,。

參考鏈接:
https://github.com/keras-team/keras/blob/master/examples/imdb_lstm.py

情感分析是自然語言處理領(lǐng)域的研究熱點,也是一項非常實用的技術(shù),,可以利用這項技術(shù)來分析用戶在互聯(lián)網(wǎng)上的觀點和態(tài)度,,同時也可以分析企業(yè)或商品在互聯(lián)網(wǎng)上的口碑,。

在深度學習中,,循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)是處理像文本這樣的序列模型的最好方式,但傳統(tǒng)的RNN存在的問題是,,當序列變長后,,RNN無法記住之前的重要信息,并且會存在梯度消失的問題,。為了解決上述問題,,研究者提出了一種長短期記憶網(wǎng)絡(luò)(LSTM),這也是目前業(yè)內(nèi)處理文本序列非常流行的一種模型(見圖2-14),。

圖片

▲圖2-14 LSTM網(wǎng)絡(luò)結(jié)構(gòu)示意圖

Keras官方已經(jīng)為大家準備好了LSTM模型的API,,并且提供了IMDB電影評論數(shù)據(jù)集,其中包含了評論內(nèi)容和打分,。下面讓我們來看如何使用Keras來解決情感分析的問題,。首先引入所有需要的模塊。

from __future__ import print_function
from tensorflow.keras.preprocessing import sequence
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Embedding, LSTM
from tensorflow.keras.datasets import imdb

準備好數(shù)據(jù),,選擇最常用的20000個詞作為特征數(shù)據(jù),,并將數(shù)據(jù)分為訓練集和測試集。對于文本數(shù)據(jù),,這里需要進行長度統(tǒng)一,,設(shè)置最大長度為80個詞,如果超過則截斷,,不足則補零,。

max_features = 20000
maxlen = 80
batch_size = 32

(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features)
x_train = sequence.pad_sequences(x_train, maxlen=maxlen)
x_test = sequence.pad_sequences(x_test, maxlen=maxlen)

數(shù)據(jù)處理完成后就可以搭建模型了。首先使用嵌入層作為模型的第一層,,將輸入的20000維的文字向量轉(zhuǎn)換為128維的稠密向量,。接著就是利用LSTM模型進行文本序列的深度學習訓練。最終使用全連接層加上Sigmoid激活函數(shù)作為最終的判斷輸出。搭建完畢后還需要為模型設(shè)置編譯的損失函數(shù)和優(yōu)化器,。

model = Sequential()
model.add(Embedding(max_features, 128))
model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))
model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',optimizer='adam',
metrics=['accuracy'])

然后就可以訓練和評估情感分析的模型了,。在Keras幫助下,通過簡單的幾步就可以完成基于深度學習的文本情感分析的任務(wù),。

model.fit(x_train, y_train,
batch_size=batch_size,
epochs=15,
validation_data=(x_test, y_test))
score, acc = model.evaluate(x_test, y_test,
batch_size=batch_size)
print('Test score:', score)
print('Test accuracy:', acc)

在使用Keras框架訓練完模型以后,,可以通過Keras的save方法將模型保存下來。為了能夠更好地讓機器學習投入真實世界的應用中去,,我們可以為模型封裝一個外部的應用程序,。在互聯(lián)網(wǎng)時代,使用網(wǎng)絡(luò)接入AI模型是對于用戶來說成本最低的方式,。

為此我們可以搭建一個基于Web的AI應用程序,,將模型投入生產(chǎn)環(huán)境中為互聯(lián)網(wǎng)用戶提供即時的網(wǎng)頁服務(wù)。

在Python中常用的Web編程框架是Flask,,它是一個非常流行的Python服務(wù)端程序框架,,相比于在Python領(lǐng)域非常流行的Django,它的特點在于更為精簡,,去除了一些封裝好的服務(wù),,只保留了最基本的服務(wù)器程序,而其余的擴展可以通過用戶自己添加第三方包實現(xiàn),。 

關(guān)于作者:史丹青,,語憶科技聯(lián)合創(chuàng)始人兼技術(shù)負責人,畢業(yè)于同濟大學電子信息工程系,。擁有多年時間的AI領(lǐng)域創(chuàng)業(yè)與實戰(zhàn)經(jīng)驗,,具備深度學習、自然語言處理以及數(shù)據(jù)可視化等相關(guān)知識與技能,。是AI技術(shù)的愛好者,,并擁抱一切新興科技,始終堅信技術(shù)分享和開源精神的力量,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多