keras初識 乙個簡單的深度學習小案例

2022-09-09 08:54:12 字數 3769 閱讀 5057

keras是乙個高效、易用的深度學習框架,它對theanotensorflow進行了高階封裝,使得我們能僅用幾行**就能實現乙個深度學習模型。本篇筆記意在簡單了解下keras在搭建深度學習模型時的流程。主要章節如下:

完成上述內容需要以下環境:python2/3scipynumpykears安裝。

首先第一步是定義我們後面需要用的函式(模型)和類別。將採用numpy來載入資料,採用keras定義乙個二分類模型。樣例**:

from numpy import loadtxt

from keras.models import sequential

from keras.layers import dense

本教程中,我們將採用如下資料集:皮馬印第安人糖尿病資料集。該資料集描述了皮馬印第安人的患病記錄以及他們在五年內是否患了糖尿病的記錄。

因此,這是個二分類問題。資料中每個變數都是數值型變數,不需要怎麼預處理就能比較符合神經網路對資料輸入的要求,因此適合作為第乙個案例。資料裡獲取鏈結如下:

dataset = loadtxt('pima-indians-diabets.csv', delimiter=',)

x = dataset[:, 0:8]

y = dataset[:, 8]

keras中模型被定義為一系列的層。我們可以構造乙個sequential模型,然後根據自己的需求新增一系列的層,來構造我們的神經網路結構。

首先要確保輸入資料的維度正確,通過指定input_dim引數為8,代表輸入變數為8個維度。本案例中,我們使用乙個三層神經網路結構。最後一層的全連線層可採用dense類,通過指定神經元個數作為第乙個引數,採用activation引數指定啟用函式。神經網路前兩層採用relu記過函式,最後一層(輸出層)採用sigmoid函式,其中sigmoid函式進行0-1分類的閾值取0.5。具體如下:

model = sequential()

model.add(dense(12, input_dim=8, activation='relu'))

model.add(dense(8, activation='relu'))

model.add(dense(1, activation='sigmoid'))

注意,模型的輸入維度被定義為第乙個dense層的引數,這表示,第乙個dense層做了兩件事:定義輸入和第乙個隱層。

模型編譯使用了高效的數值庫(後端),後端會自動選擇表示網路的最佳方式,以便於在硬體上做訓練和**。

編譯模型時,需指定一些網路訓練過程中的附加屬性。模型的訓練意味這找到最佳的權重,來將我們的輸入對映到資料集的輸出。因此,必須指定一組用於評估權重的損失函式,優化器是用於搜尋並輸出訓練過程中不同網路的不同權重以及評估指標。

本案例中,將使用交叉熵函式作為損失函式,即keras中的binary_crossentropy。採用效率較高的隨機梯度下降演算法adam作為優化器optimizer。這是當前乙個比較流行的梯度下降演算法,因為它能夠進行自適應的調節來獲取更好的結果。最有,本問題為乙個分類問題,因此,我們可以用準確度作為評估分類結果的指標。樣例**:

model.compile(loss='binary_crossentropy', optimizer='adma', metrics=['accuracy'])
通過呼叫fit()函式,來載入並訓練模型。訓練過程可分為不同的epochs,而每個epochs又被拆分為不同的batches。

model.fit(x, y, epochs=150, batch_size=10)
完成訓練後,可以利用同樣的資料對模型效能進行評估。這樣得到的是乙個較為理想的結果,但是在其他新資料上表現可能較差;一般會將資料集劃分為訓練集和測試集兩部分。

你可以用於訓練的資料,採用evaluate()函式對模型進行評估。它會收集輸出結果、損失以及你指定的評估指標值等資訊。該函式將返回乙個長度為2的列表,分別代表loss以及accuracy。樣例**:

_, accuracy = model.evaluate(x, y)

print("accuracy: %.2f" % (accuracy * 100))

# first neural network with keras tutorial

from numpy import loadtxt

from keras.models import sequential

from keras.layers import dense

# load the dataset

dataset = loadtxt('pima-indians-diabetes.csv', delimiter=',')

# split into input (x) and output (y) variables

x = dataset[:,0:8]

y = dataset[:,8]

# define the keras model

model = sequential()

model.add(dense(12, input_dim=8, activation='relu'))

model.add(dense(8, activation='relu'))

model.add(dense(1, activation='sigmoid'))

# compile the keras model

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

# fit the keras model on the dataset

model.fit(x, y, epochs=150, batch_size=10)

# evaluate the keras model

_, accuracy = model.evaluate(x, y)

print('accuracy: %.2f' % (accuracy*100))

模型的**只需要呼叫predict()函式即可。我們的輸出層採用的是sigmoid函式,因此**值是乙個在0-1之間的概率值,我們需要一定的轉化,將其轉化為乙個二分類的結果。樣例**:

predictions = model.predict(x)

rounded = [round(x[0]) for x in predictions]

也可以採用predict_classes()函式來直接對類別進行**

predictions = model.predict_classes(x)
到此,我們完成了乙個利用python和keras模型的訓練與**過程,總結一下模型訓練與構造過程的六個步驟:

資料載入

模型定義

模型編譯

模型訓練

模型評估

模型**

初識python,編寫乙個簡單的python程式

在ubuntu下安裝好了最新的python3.9,開啟學習python之旅。在命令列輸入python進入互動模式 互動模式下,你每輸入一行 python直譯器就將這一行 轉換成機器碼來執行。例如 互動模式輸入100 200,然後回車 直接會顯示執行結果300 但是這樣的 是沒有儲存的,如果下次我們還...

乙個最簡單的深度學習tensorflow1 0框架

乙個很有趣的個人部落格,不信你來撩 fangzengye.com session的作用 類似main,起到執行這條 的作用 匯入第三方庫 import numpy as np import tensorflow as tf初始化係數coefficient coefficients np.array ...

乙個簡單的密碼學例項

乙個簡單的密碼學例項 分享乙個密碼學例項 假設我們的主角是alice和bob,他們準備一同出去吃飯,但就去哪家餐廳並沒有達成共識。此時通常的解決方法是猜拳 投硬幣之類的手段來決定選擇誰的方案。通常這種方式也算公平 合理,就像足球場上的擲幣一樣 概率是一半一半 而此時我們需要的是一種協議,這個協議可以...