Keras例項教程 1

2021-08-30 17:29:59 字數 3513 閱讀 1787

總的來說,使用keras構建神經網路的基本工作流程主要可以分為4個部分。而且這個用法和思路我個人感覺,很像是在使用scikit-learn中的機器學習方法

model definition → model compilation → training → evaluation and prediction 

下面我們就通過乙個非常簡單的例子來一步一步地演示如果在keras中構建乙個簡單的用於回歸的神經網路。這個例子基本上跟文章【tensorflow簡明入門寶典 】中最後給出的那個求解線性回歸的例子要做的事情是一致的。

首先,我們人為地造一組由 y = 0.5x + 2 加上一些雜訊而生成的資料,資料量一共有200個,其中前160作為train set,後40作為test set。

import numpy as np

import matplotlib.pyplot as plt

x = np.linspace(-2, 6, 200)

np.random.shuffle(x)

y = 0.5 * x + 2 + 0.15 * np.random.randn(200,) 

# plot data

plt.scatter(x, y)

plt.show()

x_train, y_train = x[:160], y[:160]     # train first 160 data points

x_test, y_test = x[160:], y[160:]       # test remaining 40 data points

可以用matplotlib中提供的方法來繪製一下資料的分布情況:

接下來,我們要執行構建模型的第一步,即model definition。這一步的作用就是定義nn中的層次結構。為此要引入兩個重要的類,sequential和dense。

from keras.models import sequential

from keras.layers import dense

其中sequential是keras中構建nn最常用的一種model(也是最簡單的一種),乙個sequential的model 就是 a linear stack of layers,也就是說,你只要按順序(使用add()方法)一層一層地順序地新增神經網路層就可以了。而dense表示全連線層,此時它需要接收兩個引數,即輸入的節點數及輸出的節點數,特別地,在一層一層地構建nn時,keras還可以根據上一層的輸出來推斷下一次的輸入,所以有些全連線層引數可以省略。

在這個簡單的例子中,我們的全連線層只有一層,而且輸入的節點數和輸出的節點數都為1,所以有:

model = sequential()

model.add(dense(output_dim = 1, input_dim = 1))

接下來執行構建模型的第一步,即model compilation。這一步是要指定模型中的loss function(在這例子中使用的是最小二乘誤差『mse』),優化器以及metrics等內容。優化器你可以使用系統提供的預設優化器,例如你可以像下面這樣用'sgd'表示隨機梯度下降。

model.compile(loss='mse', optimizer='sgd')

你可以可以像下面這樣自定義優化器中的引數:

from keras.optimizers import sgd

model.compile(loss='mse', optimizer=sgd(lr=0.01, momentum=0.9, nesterov=true))

然後來執行training的部分。在這一步你可以有兩個選擇。第一種直接使用fit,這個簡直和scikit-learn中的感覺像極了!你只要在fit方法的引數列表中指定訓練資料(特徵向量和label)、訓練的次數和用來做梯度下降的batch size就可以了。

model.fit(x_train, y_train, epochs=100, batch_size=64)

另外乙個選擇是你也可以採用下面的語法來feed batches to your model manually:

model.train_on_batch(x_batch, y_batch)

例如在本例中你可以把訓練部分寫成下面這種形式,其中每20步,我們會輸出一次cost。

print('training -----------')

for step in range(100):

cost = model.train_on_batch(x_train, y_train)

if step % 20 == 0:

print('train cost: ', cost)

我的程式輸出結果如下(注意由於存在各種隨機性,每次的輸出未必完全一致):

training -----------

train cost:  0.0290748

train cost:  0.0276375

train cost:  0.026696

train cost:  0.0260792

train cost:  0.0256752

最後,終於可以進入evaluation and prediction的部分了。對於之前預留的測試集來說,你可以使用:

cost = model.evaluate(x_test, y_test, batch_size=40)

具體來說針對我們現在這個例子則有:

print('\ntesting ------------')

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=40)

print('test cost:', cost)

w, b = model.layers[0].get_weights()

print('weights=', w, '\nbiases=', b)

我的程式輸出結果如下:

testing ------------

40/40 [******************************] - 0s

test cost: 0.0254213

weights= [[ 0.50829154]] 

biases= [ 1.9707619]

對一些新的資料來進行**,那麼你可以使用predict,而且它的使用也與scikit-learn中的用法及其相似,最終我們**test set中每個的點,並繪製**的模型。

y_pred = model.predict(x_test)

plt.scatter(x_test, y_test)

plt.plot(x_test, y_pred)

plt.show()

輸出之圖形如下:

最後,我個人認為是入門keras的乙個非常好的talk。另外,本文的jupyter notebook檔案,你可以從下面的鏈結中獲取到。

(需要自備梯子)

awk例項教程

1.awk語法規則 awk 2.顯示最近登入的5個帳號 last n 5 awk root root root dmtsai root awk工作流程是這樣的 讀入有 n 換行符分割的一條記錄,然後將記錄按指定的域分隔符劃分域,填充域,0則表示所有域,1表示第乙個域,n表示第n個域。預設域分隔符是 ...

CSS reflow例項教程

frame主要的動作有三個 構造frame,以建立物件樹 dom樹 reflow,以確定物件位置,或者www.cppcns.com是呼叫mozilla的layout 這裡是指原始碼的實現 繪製,以便物件能顯示在螢幕上 總的來說,reflow就是載入內容樹 在html中就是dom樹 和建立或更新fra...

php小偷例項教程

以 http mtv.8391.com 為例,偷取mtv名稱 歌手 路徑 1 對原 進行 分析 檢視其原檔案,判斷出呼叫mtv路徑的檔案 利用 檢視程式,取得 http mtv.8391.com yxwen.asp?id 3488頁面 3488為隨機,只是了解頁面 2 對要偷取的頁面進行 分析 ht...