寫在前面:

Keras建立神經網路比較輕便簡單,直接看第二部分程式碼示例就能明白。更高階複雜的功能,參見官網。 Keras常用函式涉及到的引數完全講解可參見。此外,Keras中loss函式有多種選擇,這些損失函式類別及其數學定義,以及其他關於Keras的知識點,參見我的Keras補充附錄帖子

一、Keras使用講解

Keras 是與TensorFlow一起使用的更高級別的作為後端的 API。新增層就像新增一行程式碼一樣簡單。在模型架構之後,使用一行程式碼,你可以編譯和擬合模型。之後,它可以用於預測。變數宣告、佔位符甚至會話都由 API 管理。

使用流程

1。定義模型的型別。Keras 提供了兩種型別的模型:序列和模型類 API。Keras 提供各種型別的神經網路層:

from

keras。model

import

Sequential

from

keras。layers

import

Dense

model

=

Sequential

()

2。在

model.add() 的幫助下將層新增到模型中

。依照 Keras 文件描述,

Keras 提供全連線層的選項(針對密集連線的神經網路)(難道還有不用Dense的網路?)

Dense( units, activation=None, use_bias=True,

kernel_initializer=‘glorot_uniform’, bias_initializer=‘zeros’,

kernel_regularizer=None, bias_regulrizer=None,

kernel_constraint=None, bias_constraint=None,

activity_regularizer=None

注意,密集層實現的操作:output=activation(dot(input,kernel)+bias),其中 activation 是元素啟用函式,是作為啟用引數傳遞的,kernel 是由該層建立的權重矩陣,bias 是由該層建立的偏置向量(僅在 use_bias 為 True 時適用)。activity_regularizer不知道指什麼,可參見官網,不常用。

3。

可以使用它來新增儘可能多的層,每個隱藏層都由前一層提供輸入。只需要為第一層指定輸入維度

# 這將新增全連線神經層,第一層輸入的X_in維度為13列,輸出為32列。

# 注意不是指該層神經元有32個,這是錯誤的解讀

model。add(Dense(32,input_dim=13,activation=‘relu’))

model。add(Dense(10,activation=‘sigmoid’))

4。 一旦模型被定義,需要選擇一個損失函式和最佳化器。

Keras 提供了多種損失函式(mean_squared_error、mean_absolute_error、mean_absolute_percentage_error、categorical_crossentropy 和最佳化器(sgd、RMSprop、Adagrad、Adadelta、Adam 等)

。損失函式和最佳化器確定後,可以使用 compile(self,optimizer,loss,metrics=None,sample_weight_mode=None)來配置學習過程:

model

compile

optimizer

=

‘rmsprop’

loss

=

‘categorical_crossentripy’

metrics

=

‘accuracy’

])

# 一般只用輸入最佳化器和損失函式即可,不用別的引數

5。

使用 fit 方法訓練模型

model。fit(data,labels,epochs=10,batch_size=32) #還可以輸入validation引數

6。 使用

predict 方法 predict(self,x,batch_size=32,verbose=0) 的幫助下進行預測

model。predict(test_data,batch_size=10)

batch_size和verbose引數非必須引數,通常不給這兩引數

verbose:是否日誌顯示,

0

為不在標準輸出流輸出日誌資訊,

1

為輸出進度條記錄,

2

為每個epoch輸出一行記錄

TensorFlow筆記1——17.Keras使用流程+Keras示例之多層感知機函式逼近

補充:Keras 提供選項來添加捲積層、池化層、迴圈層,甚至是區域性連線層。每種方法的詳細描述在 Keras 的官方文件中可以找到

https://

keras。io/models/sequent

ial/

二、Keras示例:多層感知機函式逼近

# 對於函式逼近,這裡的損失函式是 MSE。輸入應該歸一化,隱藏層是 ReLU,輸出層最好是 Sigmoid

# 上一個程式碼例子,使用Contrib。layers來構建神經網路層,相比於手動建立神經層,

# 其避免了分別為每層宣告權重和偏置,因而更加輕便。

# 此例使用Keras的API,使得工作進一步簡化。

# sklearn,可用來獲取資料集,預處理資料,並將其分成訓練集和測試集;

# pandas,可以用來分析資料集;

import

tensorflow

as

tf

from

sklearn

import

datasets

from

sklearn。model_selection

import

train_test_split

from

sklearn。preprocessing

import

MinMaxScaler

import

pandas

as

pd

import

seaborn

as

sns

import

numpy

as

np

from

keras。models

import

Sequential

from

keras。layers

import

Dense

Activation

from

sklearn。metrics

import

r2_score

mean_squared_error

# 載入資料集並建立 Pandas 資料幀來分析資料:

boston

=

datasets

load_boston

()

df

=

pd

DataFrame

boston

data

columns

=

boston

feature_names

df

‘target’

=

boston

target

# 繪出該資料幀

# print(df)

# split train and test data

X_train

X_test

Y_train

Y_test

=

train_test_split

df

[[

‘RM’

‘LSTAT’

‘PTRATIO’

]],

df

[[

‘target’

]],

test_size

=

0。3

random_state

=

0

# normalize data

X_train

=

MinMaxScaler

()

fit_transform

X_train

X_test

=

MinMaxScaler

()

fit_transform

X_test

Y_train

=

MinMaxScaler

()

fit_transform

Y_train

Y_test

=

MinMaxScaler

()

fit_transform

Y_test

# network parameters

m

=

len

X_train

n

=

3

n_hidden

=

20

# 並非hidden neurons,而是隱藏層的輸出的分類結果數為20。可以改成別的

n_classes

=

1

# 不是分類問題,所以最後一層輸出層輸出的分類結果只有一個類

# hyper para

batch_size

=

20

learning_rate

=

0。01

max_epoch

=

100

# 下面是本例子 Keras 相關語句作為後端的程式碼:

# ————————————————————————————————————————————————————————————

# 使用Keras建立一個單隱藏層的多層感知機模型

model

=

Sequential

()

model

add

Dense

n_hidden

input_dim

=

n

activation

=

‘relu’

))

# 和contrib。layers。fully_connected用法類似,需要輸入引數input,output和activation。

# 但是對layers。fully_connected,input是X_in,函式會自動捕捉其列數;對keras。Dense,input只是X_in的列數維度

model

add

Dense

1

activation

=

‘sigmoid’

))

# 對於第二層及後面的層,output不需要指定,會自動從上一層獲得

model

summary

()

# summarize the model

# 編譯該模型

model

compile

loss

=

‘mean_squared_error’

optimizer

=

‘adam’

# 應用該模型。在TF中,fit是個很有apply意味的詞

model

fit

X_train

Y_train

validation_data

=

X_test

Y_test

),

epochs

=

max_epoch

batch_size

=

batch_size

verbose

=

0

# 預測值,計算MSE和R2

Y_test_pred

=

model

predict

X_test

Y_train_pred

=

model

predict

X_train

R2

=

r2_score

Y_test

Y_test_pred

# R2決定係數(判斷擬合優度)

RMSE

=

mean_squared_error

Y_test

Y_test_pred

print

‘performance metrics R2:

{0:f}

, RMSE:

{1:f}

format

R2

RMSE

))

參考:

https://www。

cnblogs。com/q735613050/

p/8227446。html

https://

keras-cn。readthedocs。io

/en/latest/models/model/