神經網路的keras實現

2021-09-10 14:23:17 字數 3137 閱讀 6646

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...