keras是構建在tensorflow基礎上的python第三方庫,專門用於神經網路的構建與計算,同時還整合了scikit-learn庫,使得可以在神經網路的構建中運用機器學習的方法。現在就用keras來構建之前構建過的神經網路。
實現**
首先匯入所需要的包:
from keras.models import sequential
from keras.layers import dense, dropout
from keras.optimizers import rmsprop
from tensorflow.examples.tutorials.mnist import input_data
mnist=input_data.read_data_sets('mnist_data/',one_hot=true)
匯入資料並進行預處理:
train_labels=mnist.train.labels
test_labels=mnist.test.labels
train_images = mnist.train.images.reshape(55000, 784)
test_images = mnist.test.images.reshape(10000, 784)
train_images = train_images.astype('float32')
test_images = test_images.astype('float32')
train_images /= 255
test_images /= 255
最後除以灰度的最大值是為了將資料歸一化到0-1的範圍,基本上使用梯度下降法學習的資料都要進行歸一化。
然後開始構建神經網路:
model = sequential()
model.add(dense(512, activation='relu', input_shape=(784,)))
model.add(dropout(0.2))
model.add(dense(10, activation='softmax'))
model.summary()
1.首先使用sequential()定義模型,然後使用add()函式新增層,首先新增輸入層,input_shape用於指定輸入資料的維度,啟用函式使用relu。
2.接著使用dropout()隨機捨去20%的節點,捨去節點的目的是為了防止overfitting,原因可以查詢這篇**:《a ****** way to prevent neural networks from overfitting》。
3.最後新增輸出層,節點為10個,使用softmax函式處理輸出。
4.最後,可以看看構建好的網路:
然後,設定損失函式與優化方法:
model.compile(loss='categorical_crossentropy',optimizer=rmsprop(),metrics=['accuracy'])
因為是multi-label classification,所以使用categorical_crossentropy,如果是binary classification,則使用binary_corssentropy,優化方法可以在之前keras.optimizer中匯入,也可以直接輸入optimizer='rmsorop',兩者個人感覺應該沒有區別。
接著就可以開始訓練模型了:
history = model.fit(train_images,train_labels,batch_size=100,epochs=20,verbose=2,validation_data=(test_images, test_labels))
score = model.evaluate(test_images, test_labels, verbose=0)
print('test loss:', score[0])
print('test accuracy:', score[1])
1.我們設定batch資料量為100,epoch次數為20次。對於模型的訓練,使用不同的batch與epoch,都會得到不同的模型,epoch大了可能會產生過擬合,而小了則會產生欠擬合。
2.validation_data是指用於測試的資料集,使用我們的測試集進行模型的評價,可以看到結果如下:
迴圈過程:
最終評價結果:
另外,由於keras整合了scikit-learn,我們可以很方便的使用keras進行k-fold cross validataion:
def creatmodel():
model = sequential()
model.add(dense(512, activation='relu', input_shape=(784,)))
model.add(dropout(0.2))
model.add(dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy',optimizer=rmsprop(),metrics=['accuracy'])
return model
estimator=kerasclassifier(build_fn=creatmodel,nb_epoch=20,verbose=2)
from sklearn.model_selection import cross_val_score
cv_scores=cross_val_score(estimator,train_images,train_labels,cv=10)
print (cv_scores.mean())
得到結果如下:
Keras實現神經網路步驟
from keras.models import sequential,model from keras.layers import dense,activation,input input input shape 784,x1 dense 64,activation relu input 第一根隱...
Keras實現卷積神經網路
1 coding utf 8 2 3created on sun jan 20 11 25 29 201945 author zhen 6 78 import numpy as np 9from keras.datasets import mnist 10from keras.models impo...
Keras 2 3 keras實現卷積神經網路
cnn convolutional neural networks 卷積神經網路在 keras 上的 實現。用到的資料集還是mnist。不同的是這次用到的層比較多,匯入的模組也相應增加了一些。下面直接進入 部分 import numpy as np np.random.seed 1337 for r...