神經網路學習小記錄6 利用Keras進行簡單分類

2021-09-27 08:22:34 字數 3354 閱讀 4120

全部**

上一步講了如何構建回歸演算法,這一次將怎麼進行簡單分類。

np_utils.to_categorical用於將標籤轉化為形如(nb_samples, nb_classes)的二值序列。

假設num_classes = 10。

如將[1,2,3,……4]轉化成:

[[0,1,0,0,0,0,0,0]

[0,0,1,0,0,0,0,0]

[0,0,0,1,0,0,0,0]

……[0,0,0,0,1,0,0,0]]

這樣的形態。

如將y_train轉化為二值序列,可以用如下方式:

y_train = np_utils.to_categorical(y_train,num_classes=

10)

activation是啟用函式,一般在每一層的輸出使用。

當我們使用sequential模型構建函式的時候,只需要在每一層dense後面新增activation就可以了。

sequential函式也支援直接在引數中完成所有層的構建,使用方法如下。

model = sequential(

[ dense(

32,input_dim =

784)

, activation(

"relu"),

dense(10)

, activation(

"softmax")]

)

其中兩次activation分別使用了relu函式和softmax函式。

在model.compile中新增metrics=[『accuracy』]表示需要計算分類精確度,具體使用方式如下:

model.

compile

( loss =

'categorical_crossentropy'

, optimizer = rmsprop,

metrics=

['accuracy'

])

這是乙個簡單的僅含有乙個隱含層的神經網路,用於完成手寫體識別。在本例中,使用的優化器是rmsprop,具體可以使用的優化器可以參照keras中文文件。

import numpy as np

from keras.models import sequential

from keras.layers import dense,activation ## 全連線層

from keras.datasets import mnist

from keras.utils import np_utils

from keras.optimizers import rmsprop

# 獲取訓練集

(x_train,y_train)

,(x_test,y_test)

= mnist.load_data(

)# 首先進行標準化

x_train = x_train.reshape(x_train.shape[0]

,-1)

/255

x_test = x_test.reshape(x_test.shape[0]

,-1)

/255

# 計算categorical_crossentropy需要對分類結果進行categorical

# 即需要將標籤轉化為形如(nb_samples, nb_classes)的二值序列

y_train = np_utils.to_categorical(y_train,num_classes=10)

y_test = np_utils.to_categorical(y_test,num_classes=10)

# 構建模型

model = sequential(

[ dense(

32,input_dim =

784)

, activation(

"relu"),

dense(10)

, activation(

"softmax")]

)rmsprop = rmsprop(lr =

0.001

,rho =

0.9,epsilon =1e-

08,decay =0)

## compile

model.

compile

(loss =

'categorical_crossentropy'

,optimizer = rmsprop,metrics=

['accuracy'])

print

("\ntraining"

)cost = model.fit(x_train,y_train,nb_epoch =

2,batch_size =32)

print

("\ntest"

)cost,accuracy = model.evaluate(x_test,y_test)

## w,b = model.layers[0].get_weights()

print

("accuracy:"

,accuracy)

實驗結果為:

epoch 1/2

60000

/60000[==

====

====

====

====

====

====

====

]- 12s 202us/step - loss:

0.3512

- acc:

0.9022

epoch 2/2

60000

/60000[==

====

====

====

====

====

====

====

]- 11s 183us/step - loss:

0.2037

- acc:

0.9419

test

10000

/10000[==

====

====

====

====

====

====

====

]- 1s 108us/step

accuracy:

0.9464

神經網路小記

神經網路在最近幾年特別火,不管是做傳統機器學習的,還是分類 nlp的都需要去學習了解它。只有一層隱藏層的神經網路 這時候相當於整合學習,隱藏層相當於bagging學習多個模型,輸出層使用上一層的結果作為輸入相當於boosting。也即模型擁有降低偏差和方差的能力。沒有隱藏層的相當於感知機。沒有隱藏層...

神經網路深度學習 學習小記

一 sigmod function出現的必要性 為什麼不直接用stage function?在feedback時,假如說我們現在用的是stage function,直接用樓梯式的跳躍函式,我們每次做很小的引數改動時。如果說這個之前這個引數使函式值落在0 1 改變的那一塊區域,即便我們做的change...

搭建神經網路 Tensorflow學習記錄(一)

一 基本概念 tensorflow 用張量表示資料,用計算圖搭建神經網路,用會話執 行計算圖,優化線上的權重 引數 得到模型。張量 張量就是多維陣列 列表 用 階 表示張量的維度。0階張量稱作標量,表示乙個單獨的數 舉例 s 123 1階張量稱作向量,表示乙個一維陣列 舉例 v 1,2,3 2階張量...