LSTM Keras下的程式碼解讀

WX_Chen發表於2017-09-08

可以參考 官方文件

https://keras.io/

 

首先,

model = Sequential()

是給神經網路起了頭,後面的model.add()是一直加層。

 

model.add(Activation('relu'))

這個啟用函式(Activation)keras提供了很多備選的,我這兒用的是ReLU這個,其他還有

  • tanh
  • sigmoid
  • hard_sigmoid
  • linear
    等等,keras庫是不斷更新的,新出來的論文裡面用到的更優化的啟用函式裡面也會有,比如:
  • LeakyReLU
  • PReLU
  • ELU

目標函式

model.compile(loss='mean_squared_error', optimizer='sgd'

 

compile

編譯用來配置模型的學習過程

 

fit

本函式將模型訓練nb_epoch

 

儲存模型

from keras.models import load_model

 

model.save('my_model.h5')

# creates a HDF5 file 'my_model.h5'

del model

# deletes the existing model

 

# returns a compiled model

# identical to the previous one

model = load_model('my_model.h5')



以下例子可以直接執行,學習參考用。

 

# -*- coding: utf-8 -*-

import numpy as np

from keras.models import Sequential

from keras.layers import Dense

from keras.optimizers import SGD

import cPickle

 

# 構建資料集

X_data = np.linspace(-1,1,100)[:, np.newaxis]

noise = np.random.normal(0,0.05,X_data.shape)

y_data = np.square(X_data) + noise + 0.5

 

# 構建神經網路

model = Sequential()

model.add(Dense(10, input_dim=1, init='normal', activation='relu'))  #全連線層, 10個神經元,1維向量,啟用函式是relu

model.add(Dense(1, init='normal'))

sgd = SGD(lr=0.1)  #梯度下降法,用在神經網路的反饋階段,不斷地學習,調整每一層卷積的引數

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

 

# 訓練

model.fit(X_data, y_data, nb_epoch=1000, batch_size=100, verbose=0)

 

# 儲存模型

model.save_weights('MyNets.h5')

cPickle.dump(model, open('MyNets.pkl',"wb"))

 

# 呼叫模型

#model = cPickle.load(open('MyNets.pkl',"rb"))

 

# 在原資料上預測

y_predict=model.predict(X_data,batch_size=100,verbose=1)

 

# 視覺化

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

ax.scatter(X_data, y_data)

ax.plot(X_data,y_predict,'r-',lw=5)

plt.show()

 

 

相關文章