最近關注了一陣keras,感覺這個東西挺方便的,今天嘗試了一下發現確實還挺方便。不但提供了常用的layers、normalization、regularation、activation等演算法,甚至還包括了幾個常用的資料庫例如cifar-10和mnist等等。
下面的**算是keras的helloworld吧!利用mlp實現的mnist手寫數字識別:
from
keras
.models
import
sequential
from
keras
.layers
.core
import
dense
,dropout
,activation
from
keras
.optimizers
import
sgd
from
keras
.datasets
import
mnist
import
numpy
model
=sequential
()model
.add
(dense
(784
,500
,init
='glorot_uniform'
))# 輸入層,28*28=784
model
.add
(activation
('tanh'
))# 啟用函式是tanh
model
.add
(dropout
(0.5
))# 採用50%的dropout
model
.add
(dense
(500
,500
,init
='glorot_uniform'
))# 隱層節點500個
model
.add
(activation
('tanh'
))model
.add
(dropout
(0.5
))model
.add
(dense
(500,10
,init
='glorot_uniform'
))# 輸出結果是10個類別,所以維度是10
model
.add
(activation
('softmax'
))# 最後一層用softmax
sgd
=sgd(lr
=0.01
,decay
=1e-6
,momentum
=0.9
,nesterov
=true
)# 設定學習率(lr)等引數
model
.compile
(loss
='categorical_crossentropy'
,optimizer
=sgd
,class_mode
='categorical'
)# 使用交叉熵作為loss函式
(x_train
,y_train),(
x_test
,y_test)=
mnist
.load_data
()# 使用keras自帶的mnist工具讀取資料(第一次需要聯網)
x_train
=x_train
.reshape
(x_train
.shape[0
],x_train
.shape[1
]*x_train
.shape[2
])# 由於mist的輸入資料維度是(num, 28, 28),這裡需要把後面的維度直接拼起來變成784維
x_test
=x_test
.reshape
(x_test
.shape[0
],x_test
.shape[1
]*x_test
.shape[2
])y_train =(
numpy
.arange(10
)==y_train
[:,none
]).astype
(int
)y_test =(
numpy
.arange(10
)==y_test
[:,none
]).astype
(int
)# 開始訓練,這裡引數比較多。batch_size就是batch_size,nb_epoch就是最多迭代的次數, shuffle就是是否把資料隨機打亂之後再進行訓練
# verbose是屏顯模式,官方這麼說的:verbose: 0 for no logging to stdout, 1 for progress bar logging, 2 for one log line per epoch.
# 就是說0是不屏顯,1是顯示乙個進度條,2是每個epoch都顯示一行資料
# show_accuracy就是顯示每次迭代後的正確率
# validation_split就是拿出百分之多少用來做交叉驗證
model
.fit
(x_train
,y_train
,batch_size
=200
,nb_epoch
=100
,shuffle
=true
,verbose=1
,show_accuracy
=true
,validation_split
=0.3
)print
'test set'
model
.evaluate
(x_test
,y_test
,batch_size
=200
,show_accuracy
=true
,verbose=1
)
屏顯輸出了這麼一大堆東西:
ssh
://shibotian@***.***.***.***:22/usr/bin/python -u /usr/local/shared_dir/local/ipython_shibotian/shibotian/code/kreas_test1/run.py
using
gpu device 0:
tesla
k40m
train
on 42000
samples
,validate on
18000
samples
epoch00
/42000
[******************************]-1s
-loss
:0.9894
-acc
.:0.7386
-val
.loss
:0.4795
-val
.acc
.:0.8807
epoch10
/42000
[******************************]-1s
-loss
:0.5635
-acc
.:0.8360
-val
.loss
:0.4084
-val
.acc
.:0.8889
省略。。。。。
epoch980
/42000
[******************************]-1s
-loss
:0.2838
-acc
.:0.9116
-val
.loss
:0.1872
-val
.acc
.:0.9418
epoch990
/42000
[******************************]-1s
-loss
:0.2740
-acc
.:0.9163
-val
.loss
:0.1842
-val
.acc
.:0.9434
test
set0
/10000
[******************************]-0s
-loss
:0.1712
-acc
.:0.9480
process
finished
with
exit
code
0
p.s. verbose=1時候的進度條很可愛啊點讚 keras 實現mnist手寫數字集識別
coding utf 8 classifier mnist import numpy as np np.random.seed 1337 from keras.datasets import mnist from keras.utils import np utils from keras.mode...
用Keras進行手寫字型識別(MNIST資料集)
首先載入資料 from keras.datasets import mnist train images,train labels test images,test labels mnist.load data 接下來,看看這個資料集的基本情況 train images.shape 60000,28...
Keras入門實戰(1) MNIST手寫數字分類
目錄 1 首先我們載入keras中的資料集 2 網路架構 3 選擇編譯 compile引數 4 準備影象資料 5 訓練模型 6 測試資料 前面的部落格中已經介紹了如何在ubuntu下安裝keras深度學習框架。現在我們使用 keras 庫來學習手寫數字分類。我們這裡要解決的問題是 將手寫數字的灰度影...