全部**
上一步講了如何構建回歸演算法,這一次將怎麼進行簡單分類。
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階張量...