使用Kreas搭建神經(jīng)網(wǎng)絡(luò)相對來說輕松一些,總結(jié)一下Keras的基本用法袄简,為后續(xù)學(xué)習(xí)tensorflow打好基礎(chǔ)。
Keras中文文檔https://keras-cn.readthedocs.io/en/latest/
Sequential模型(順序模型)
#導(dǎo)入順序模型
from keras.models import Sequential
model = Sequential()
#dense層(標準一維全連接層)第一層需要指定輸入形狀,以對接輸入數(shù)據(jù)的形狀刮萌,比如以(16,)對接(*,16)形狀的數(shù)據(jù)
from keras.layers import Dense, Activation
model.add(Dense(units=64, input_dim=100))#第一層,64個神經(jīng)元,輸入維度10
model.add(Activation("relu"))
model.add(Dense(units=10))
model.add(Activation("softmax"))
#以準確度作為度量標準
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
#學(xué)習(xí)率0.9熏纯,動量法同诫,使用Nesterov梯度下降
from keras.optimizers import SGD
model.compile(loss='categorical_crossentropy', optimizer=SGD(lr=0.01, momentum=0.9, nesterov=True))
#model.fit訓(xùn)練網(wǎng)絡(luò),epochs訓(xùn)練輪數(shù)樟澜,size訓(xùn)練batch大小
model.fit(x_train, y_train, epochs=5, batch_size=32)
loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)
#使用模型進行預(yù)測
classes = model.predict(x_test, batch_size=128)
簡單的keras神經(jīng)網(wǎng)絡(luò)搭建完成误窖。
dense層介紹
keras.layers.Dense(units,
activation=None,
use_bias=True,
kernel_initializer='glorot_uniform',
bias_initializer='zeros',
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None)
units:該層有幾個神經(jīng)元
activation:該層使用的激活函數(shù)
use_bias:是否添加偏置項
kernel_initializer:權(quán)重初始化方法
bias_initializer:偏置值初始化方法
kernel_regularizer:權(quán)重規(guī)范化函數(shù)
bias_regularizer:偏置值規(guī)范化方法
activity_regularizer:輸出的規(guī)范化方法
kernel_constraint:權(quán)重變化限制函數(shù)
bias_constraint:偏置值變化限制函數(shù)
Keras中啟用tensorboard
# 編譯模型 評價函數(shù)和損失函數(shù)相似,不過評價函數(shù)的結(jié)果不會用于訓(xùn)練過程中
model.compile(optimizer='Adam', loss='categorical_crossentropy',
metrics=['accuracy'])
# TensorBoard調(diào)用查看一下訓(xùn)練情況
# tb_cb = TensorBoard(log_dir='logs')
tb_cb = TensorBoard(log_dir='logs',histogram_freq=1,
write_graph=True,
write_images=True)
# 開始模型訓(xùn)練
model.fit(x=x_train, y=y_train, batch_size=batch_size, epochs=epochs,
verbose=1, validation_data=(x_valid, y_valid), shuffle=True,
callbacks=[tb_cb])
然后秩贰,在anaconda promot中定位到程序所在文件夾霹俺,輸入
tensorboard --logdir=logs/
之后會顯示一個網(wǎng)址,復(fù)制進入微軟自帶瀏覽器即可打開tensorboard(雖然我看不懂==)
Conv1D層
keras.layers.convolutional.Conv1D(filters, kernel_size, strides=1, padding='valid', dilation_rate=1,
activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros',
kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
bias_constraint=None)
一維卷積層(即時域卷積)毒费,用以在一維輸入信號上進行鄰域濾波丙唧。當使用該層作為首層時,需要提供關(guān)鍵字參數(shù)input_shape觅玻。例如(10,128)代表一個長為10的序列想际,序列中每個信號為128向量。而(None, 128)代表變長的128維向量序列溪厘。
該層生成將輸入信號與卷積核按照單一的空域(或時域)方向進行卷積胡本。如果use_bias=True,則還會加上一個偏置項畸悬,若activation不為None侧甫,則輸出為經(jīng)過激活函數(shù)的輸出。
參數(shù)
filters:卷積核的數(shù)目(即輸出的維度)
kernel_size:整數(shù)或由單個整數(shù)構(gòu)成的list/tuple,卷積核的空域或時域窗長度
strides:整數(shù)或由單個整數(shù)構(gòu)成的list/tuple披粟,為卷積的步長咒锻。任何不為1的strides均與任何不為1的dilation_rate均不兼容
padding:補0策略,為“valid”, “same” 或“causal”僻爽,“causal”將產(chǎn)生因果(膨脹的)卷積虫碉,即output[t]不依賴于input[t+1:]。當對不能違反時間順序的時序信號建模時有用胸梆。參考WaveNet: A Generative Model for Raw Audio, section 2.1.敦捧。“valid”代表只進行有效的卷積碰镜,即對邊界數(shù)據(jù)不處理兢卵。“same”代表保留邊界處的卷積結(jié)果绪颖,通常會導(dǎo)致輸出shape與輸入shape相同秽荤。
activation:激活函數(shù),為預(yù)定義的激活函數(shù)名(參考激活函數(shù))柠横,或逐元素(element-wise)的Theano函數(shù)窃款。如果不指定該參數(shù),將不會使用任何激活函數(shù)(即使用線性激活函數(shù):a(x)=x)
dilation_rate:整數(shù)或由單個整數(shù)構(gòu)成的list/tuple牍氛,指定dilated convolution中的膨脹比例晨继。任何不為1的dilation_rate均與任何不為1的strides均不兼容。
use_bias:布爾值搬俊,是否使用偏置項
kernel_initializer:權(quán)值初始化方法紊扬,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器唉擂。參考initializers
bias_initializer:權(quán)值初始化方法餐屎,為預(yù)定義初始化方法名的字符串,或用于初始化權(quán)重的初始化器玩祟。參考initializers
kernel_regularizer:施加在權(quán)重上的正則項腹缩,為Regularizer對象
bias_regularizer:施加在偏置向量上的正則項,為Regularizer對象
activity_regularizer:施加在輸出上的正則項空扎,為Regularizer對象
kernel_constraints:施加在權(quán)重上的約束項庆聘,為Constraints對象
bias_constraints:施加在偏置上的約束項,為Constraints對象
輸入shape
形如(samples勺卢,steps伙判,input_dim)的3D張量
輸出shape
形如(samples,new_steps黑忱,nb_filter)的3D張量宴抚,因為有向量填充的原因勒魔,steps
的值會改變
【Tips】可以將Convolution1D看作Convolution2D的快捷版,對例子中(10菇曲,32)的信號進行1D卷積相當于對其進行卷積核為(filter_length, 32)的2D卷積冠绢。