日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

Keras深度学习框架介绍(结束)

發布時間:2023/12/31 pytorch 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Keras深度学习框架介绍(结束) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

keras是一個開源是的python深度學習庫,可以基于theano或者tenserflow,下面大體介紹下keras的幾個重要模塊。

重要的模塊

1、優化器(optimizers)

優化器是調整每個節點權重的方法,看一個代碼示例:

?

1

2

3

4

model = Sequential()

model.add(Dense(64, init='uniform', input_dim=10)) model.add(Activation('tanh'))

model.add(Activation('softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='mean_squared_error', optimizer=sgd)

可以看到優化器在模型編譯前定義,作為編譯時的兩個參數之一

代碼中的sgd是隨機梯度下降算法

lr表示學習速率

momentum表示動量項

decay是學習速率的衰減系數(每個epoch衰減一次)

Nesterov的值是False或者True,表示使不使用Nesterov momentum

以上4個參數以后具體學習了再解析

除了sgd,還可以選擇的優化器有RMSprop(適合遞歸神經網絡)、Adagrad、Adadelta、Adam、Adamax、Nadam

2、目標函數(objectives)

目標函數又稱損失函數(loss),目的是計算神經網絡的輸出與樣本標記的差的一種方法,代碼示例:

?

1

2

3

4

model = Sequential()

model.add(Dense(64, init='uniform', input_dim=10)) model.add(Activation('tanh'))

model.add(Activation('softmax'))

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True) model.compile(loss='mean_squared_error', optimizer=sgd)

mean_squared_error就是損失函數的名稱

可以選擇的損失函數有:

mean_squared_error,mean_absolute_error,squared_hinge,hinge,binary_crossentropy,categorical_crossentropy

這里binary_crossentropy 和 categorical_crossentropy也就是logloss

3、激活函數(activations)

每一個神經網絡層都需要一個激活函數,代碼示例:

?

1

2

3

4

5

6

7

8

from keras.layers.core import Activation, Dense

model.add(Dense(64))

model.add(Activation('tanh'))

或把上面兩行合并為:

model.add(Dense(64, activation='tanh'))

可以選擇的激活函數有:

linear、sigmoid、hard_sigmoid、tanh、softplus、relu、 softplus,softmax、softsign

還有一些高級激活函數,比如如PReLU,LeakyReLU等

4、參數初始化(Initializations)

這個模塊的作用是在添加layer時調用init進行這一層的權重初始化,有兩種初始化方法

4.1 通過制定初始化方法的名稱:

示例代碼:

?

1

model.add(Dense(64, init='uniform'))

可以選擇的初始化方法有:

uniform、lecun_uniform、normal、orthogonal、zero、glorot_normal、he_normal等

4.2 通過調用對象:

該對象必須包含兩個參數:shape(待初始化的變量的shape)和name(該變量的名字),該可調用對象必須返回一個(Keras)變量,例如K.variable()返回的就是這種變量,示例代碼:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

from keras import backend as K

import numpy as np

def my_init(shape, name=None):

????value = np.random.random(shape)

????return K.variable(value, name=name)

model.add(Dense(64, init=my_init))

或者

from keras import initializations

def my_init(shape, name=None):

????return initializations.normal(shape, scale=0.01, name=name)

model.add(Dense(64, init=my_init))

所以說可以通過庫中的方法設定每一層的初始化權重,

也可以自己初始化權重,自己設定的話可以精確到每個節點的權重,

那么是否可以在這兒做文章優化特征呢?我覺得可以針對不同的task深入試驗看看

5、層(layer)

keras的層主要包括:

常用層(Core)、卷積層(Convolutional)、池化層(Pooling)、局部連接層、遞歸層(Recurrent)、嵌入層( Embedding)、高級激活層、規范層、噪聲層、包裝層,當然也可以編寫自己的層

5.1對于層的操作

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

layer.get_weights() #返回該層的權重

layer.set_weights(weights)#將權重加載到該層

config = layer.get_config()#保存該層的配置

layer = layer_from_config(config)#加載一個配置到該層

#該層有一個節點時,獲得輸入張量、輸出張量、及各自的形狀:

layer.input

layer.output

layer.input_shape

layer.output_shape

#該層有多個節點時(node_index為節點序號):

layer.get_input_at(node_index)

layer.get_output_at(node_index)

layer.get_input_shape_at(node_index)

layer.get_output_shape_at(node_index)

5.2 Dense層(全連接層)

?

1

keras.layers.core.Dense(output_dim, init='glorot_uniform', activation='linear', weights=None, W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True, input_dim=None)

output_dim:輸出數據的維度

init:初始化該層權重的方法

activation:該層的激活函數

weights:numpy array的list。該list應含有一個形如(input_dim,output_dim)的權重矩陣和一個形如(output_dim,)的偏置向量

regularizer:正則項,w為權重的、b為偏執的,activity為輸出的

constraints:約束項

bias:是否包含偏執向量,是布爾值

input_dim:輸入數據的維度

5.3 dropout層

keras.layers.core.Dropout(p)

為輸入數據施加Dropout。Dropout將在訓練過程中每次更新參數時隨機斷開一定百分比(p)的輸入神經元連接,Dropout層用于防止過擬合。

參考文章:http://blog.csdn.net/stdcoutzyx/article/details/49022443理解dropout

5.4 遞歸層(Recurrent)

遞歸層包含三種模型:LSTM、GRU和SimpleRNN

5.4.1抽象層,不能直接使用

?

1

keras.layers.recurrent.Recurrent(weights=None, return_sequences=False, go_backwards=False, stateful=False, unroll=False, consume_less='cpu', input_dim=None, input_length=None)

return_sequences:True返回整個序列,false返回輸出序列的最后一個輸出

go_backwards:True,逆向處理輸入序列,默認為False

stateful:布爾值,默認為False,若為True,則一個batch中下標為i的樣本的最終狀態將會用作下一個batch同樣下標的樣本的初始狀態

5.4.2全連接RNN網絡

?

1

keras.layers.recurrent.SimpleRNN(output_dim, init='glorot_uniform', inner_init='orthogonal', activation='tanh', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

inner_init:內部單元的初始化方法

dropout_W:0~1之間的浮點數,控制輸入單元到輸入門的連接斷開比例

dropout_U:0~1之間的浮點數,控制輸入單元到遞歸連接的斷開比例

5.4.3 LSTM層

?

1

keras.layers.recurrent.LSTM(output_dim, init='glorot_uniform', inner_init='orthogonal', forget_bias_init='one', activation='tanh', inner_activation='hard_sigmoid', W_regularizer=None, U_regularizer=None, b_regularizer=None, dropout_W=0.0, dropout_U=0.0)

forget_bias_init:遺忘門偏置的初始化函數,Jozefowicz et al.建議初始化為全1元素

inner_activation:內部單元激活函數

5.5 Embedding層

?

1

keras.layers.embeddings.Embedding(input_dim, output_dim, init='uniform', input_length=None, W_regularizer=None, activity_regularizer=None, W_constraint=None, mask_zero=False, weights=None, dropout=0.0)

只能作為模型第一層

mask_zero:布爾值,確定是否將輸入中的‘0’看作是應該被忽略的‘填充’(padding)值,該參數在使用遞歸層處理變長輸入時有用。設置為True的話,模型中后續的層必須都支持masking,否則會拋出異常

5.6 model層(最重要)

model層是最主要的模塊,model層可以將上面定義了各種基本組件組合起來

model的方法:

model.summary() : 打印出模型概況

model.get_config() :返回包含模型配置信息的Python字典

model.get_weights():返回模型權重張量的列表,類型為numpy array

model.set_weights():從numpy array里將權重載入給模型

model.to_json:返回代表模型的JSON字符串,僅包含網絡結構,不包含權值。可以從JSON字符串中重構原模型:

?

1

2

3

4

from models import model_from_json

json_string = model.to_json()

model = model_from_json(json_string)

model.to_yaml:與model.to_json類似,同樣可以從產生的YAML字符串中重構模型

?

1

2

3

4

from models import model_from_yaml

yaml_string = model.to_yaml()

model = model_from_yaml(yaml_string)

model.save_weights(filepath):將模型權重保存到指定路徑,文件類型是HDF5(后綴是.h5)

model.load_weights(filepath, by_name=False):從HDF5文件中加載權重到當前模型中, 默認情況下模型的結構將保持不變。如果想將權重載入不同的模型(有些層相同)中,則設置by_name=True,只有名字匹配的層才會載入權重

keras有兩種model,分別是Sequential模型和泛型模型

5.6.1 Sequential模型

Sequential是多個網絡層的線性堆疊

可以通過向Sequential模型傳遞一個layer的list來構造該模型:

?

1

2

3

4

5

6

7

8

9

from keras.models import Sequential

from keras.layers import Dense, Activation

model = Sequential([

Dense(32, input_dim=784),

Activation('relu'),

Dense(10),

Activation('softmax'),

])

也可以通過.add()方法一個個的將layer加入模型中:

?

1

2

3

model = Sequential()

model.add(Dense(32, input_dim=784))

model.add(Activation('relu'))

還可以通過merge將兩個Sequential模型通過某種方式合并

Sequential模型的方法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

compile(self, optimizer, loss, metrics=[], sample_weight_mode=None)

fit(self, x, y, batch_size=32, nb_epoch=10, verbose=1, callbacks=[], validation_split=0.0, validation_data=None, shuffle=True, class_weight=None, sample_weight=None)

evaluate(self, x, y, batch_size=32, verbose=1, sample_weight=None)

#按batch獲得輸入數據對應的輸出,函數的返回值是預測值的numpy array

predict(self, x, batch_size=32, verbose=0)

#按batch產生輸入數據的類別預測結果,函數的返回值是類別預測結果的numpy array或numpy

predict_classes(self, x, batch_size=32, verbose=1)

#本函數按batch產生輸入數據屬于各個類別的概率,函數的返回值是類別概率的numpy array

predict_proba(self, x, batch_size=32, verbose=1)

train_on_batch(self, x, y, class_weight=None, sample_weight=None)

test_on_batch(self, x, y, sample_weight=None)

predict_on_batch(self, x)

fit_generator(self, generator, samples_per_epoch, nb_epoch, verbose=1, callbacks=[], validation_data=None, nb_val_samples=None, class_weight=None, max_q_size=10)

evaluate_generator(self, generator, val_samples, max_q_size=10)

5.6.2 泛型模型

Keras泛型模型接口是:

用戶定義多輸出模型、非循環有向模型或具有共享層的模型等復雜模型的途徑

適用于實現:全連接網絡和多輸入多輸出模型

多輸入多輸出,官方例子給出:預測一條新聞的點贊轉發數,主要輸入是新聞本身,還可以加入額外輸入,比如新聞發布日期,新聞作者等,具體的實現還是看官網文檔吧:

http://keras-cn.readthedocs.io/en/latest/getting_started/functional_API/

所以感覺這個模型可以針對特定task搞一些創新哦

泛型模型model的屬性:

model.layers:組成模型圖的各個層

model.inputs:模型的輸入張量列表

model.outputs:模型的輸出張量列表

方法:類似序列模型的方法

補充get_layer

get_layer(self, name=None, index=None)

本函數依據模型中層的下標或名字獲得層對象,泛型模型中層的下標依據自底向上,水平遍歷的順序。

name:字符串,層的名字

index: 整數,層的下標

函數的返回值是層對象

總結

以上是生活随笔為你收集整理的Keras深度学习框架介绍(结束)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。