Keras學習筆記(二)Keras模型的建立

2021-09-14 04:12:48 字數 2831 閱讀 4971

在keras中設定了兩類深度學習模型,區別在於不同的拓撲結構:

序列模型(sequential類)

通用模型(model類)

一、序列模型

方法一:一次性定義層

from keras.models import sequential 

from keras.layers import dense,activation

layers = [dense(32,input_shape = (784,)),

activation('relu'),

dense(10);

activation('softmax')]

model = sequential(layers)

注意:到底使用input_shape還是input_dim?

下面兩種等價

model.add(dense(32, input_shape=(784,)))
model.add(dense(32, input_dim=784))

方法二:逐行新增層

from keras.models import sequential

from keras.layers import dense,activation

model = sequential()

model.add(dense(32,input_shape=(784,)))

model.add(activation('relu'))

model.add(dense(10))

model.add(activation('softmax'))

注意:以下兩段**等價

model.add(dense(64,input_shape=(784,)))

model.add(activation('tanh'))

model.add(dense(64,input_shape=(784,),activation = 'tanh'))
二、通用模型

通用模型可以用來設計非常複雜、任意拓撲結構都的神經網路,例如有向無環網路、共享網路等。類似於序列模型,通用模型通過函式化得應用介面來定義模型。在定義的時候,從輸入的多維矩陣開始,然後定義各層要素,最後定義輸出層。將輸入層和輸出層作為引數納入通用模型中就可以定義乙個模型物件,並進行編譯和擬合。

下面的例子來自於《keras手冊》,用乙個全連線神經網路擬合乙個手寫阿拉伯數字的分類模型。輸入的資料為28x28的影象。

載入相關模組

定義輸入層

定義各連線層,包括相應的啟用函式

定義輸出層

定義模型物件

編譯和擬合

一、載入相關模組

from keras.layers ipmort input, dense

from keras.models import model

二、定義輸入層

主要是為了定義輸入的多維矩陣的尺寸。在這裡因為每乙個影象都被拉平為784個畫素點的向量,因此這個多維矩陣的尺寸就是(784,)的向量

input = input(shape = (784,))
三、定義各連線層,包括相應的啟用函式

假設從輸入層開始,定義兩個隱含層,都有64個神經元,都使用relu啟用函式。

x = dense(64,activation='relu')(input)

x = dense(64,activation='relu')(x)

第乙個隱藏層使用輸入層作為引數,而第二個隱藏層使用第乙個隱藏層作為引數,體現了函式式程式設計的優點

四、定義輸出層

使用最近的隱藏層作為引數

y = dense(10, activation='softmax')(x)
五、定義模型物件

model = model(inputs = input, outputs = y);
六、編譯和擬合

model.compile(optimazer='rmsprop', loss='categorical_crossentropy',

metrics=['accuracy'])

model.fit(data,labels)

序列模型vs通用模型(如何定義各層結構)

序列模型

通用模型

1先定義序列模型物件

先定義從輸入層到輸出層各層要素,包括尺寸結構

2通過add方法新增各層資訊

通過不停地封裝含有各層網路結構的函式作為引數來定義網路結構的

3各層只能依次線性新增

因為採用了函式封裝的概念,可以在原有的網路結構上應用新的結構來快速生成新的模型,因此靈活度搞很多,特別是在具有多種型別的輸入資料的情況下。

步驟

1.構造多層卷積神經網路使用序列模型來對影象編碼

3.使用lstm對編碼建模,同時對自然語言進行從文字到向量的轉換

4.合併兩個網路

5.將合併的網路作為引數輸入到下乙個全連線層進行計算

6.輸出可能的回答

結論:雖然大部分工作可以用序列模型來應對,但是函式式介面的通用模型為分析師提供了更強大的工具

參考文獻

書籍《keras快速上手:基於python的深度學習實戰》

書籍《深度學習 基於keras的python實戰》

書籍《keras手冊》

Keras學習筆記

手冊 keras中文文件 1.張量 一階張量是向量,二階張量是矩陣。2.batch batch gradient descent,遍歷全部資料集算一次損失函式,然後算函式對各個引數的梯度,更新梯度。太慢。stochastic gradient descent,每看乙個資料就算一下損失函式,然後求梯度...

keras學習筆記1 Keras模組概述

keras主要包括14個模組,本文主要對models layers initializations activations objectives optimizers preprocessing metrics共計8個模組分別展開介紹,並通過乙個簡單的bp神經網路說明各個模組的作用。1.model ...

keras深度學習(二)

上一次,我學到了感知機,多層感知機,啟用函式等 寫出了第乙個keras 例項 import keras.models import sequential model sequential model.add dense 12,input dim 8,kernel initializer random...