Keras-mnist

Keras-mnist111

日期:2016 /06 /03 15:15:52

版本 python ??

!/usr/bin/python

-- coding:utf-8 --

fromfutureimport print_function

import numpy as np

np.random.seed(1337) # for reproducibility

from keras.datasets import mnist

from keras.models import Sequential

from keras.layers.core import Dense, Dropout, Activation

from keras.optimizers import SGD, Adam, RMSprop

from keras.utils import np_utils

batch_size = 128

nb_classes = 10

nb_epoch = 1

初始化一個模型

model = Sequential()

輸入向量是784維度的,第一個影藏層是1000個節(jié)點,init代表的是鏈接矩陣中的權值初始化

'''

init 初始化參數(shù):

uniform(scale=0.05) :均勻分布,最常用的。Scale就是均勻分布的每個數(shù)據(jù)在-scale~scale之間。此處就是-0.05~0.05。scale默認值是0.05;

lecun_uniform:是在LeCun在98年發(fā)表的論文中基于uniform的一種方法。區(qū)別就是lecun_uniform的scale=sqrt(3/f_in)。f_in就是待初始化權值矩陣的行。

normal:正態(tài)分布(高斯分布)。

identity :用于2維方陣,返回一個單位陣

orthogonal:用于2維方陣,返回一個正交矩陣。

zero:產(chǎn)生一個全0矩陣。

glorot_normal:基于normal分布,normal的默認 sigma^2=scale=0.05,而此處sigma^2=scale=sqrt(2 / (f_in+ f_out)),其中,f_in和f_out是待初始化矩陣的行和列。

glorot_uniform:基于uniform分布,uniform的默認scale=0.05,而此處scale=sqrt( 6 / (f_in +f_out)) ,其中,f_in和f_out是待初始化矩陣的行和列。

he_normal:基于normal分布,normal的默認 scale=0.05,而此處scale=sqrt(2 / f_in),其中,f_in是待初始化矩陣的行。

he_uniform:基于uniform分布,uniform的默認scale=0.05,而此處scale=sqrt( 6 / f_in),其中,f_in待初始化矩陣的行。

'''

model.add(Dense(1000, input_dim=784, init='glorot_uniform'))

model.add(Activation('relu')) # 激活函數(shù)是tanh

model.add(Dropout(0.5)) # 采用50%的dropout

第二個隱藏層是500個節(jié)點

model.add(Dense(500, init='glorot_uniform'))

model.add(Activation('relu'))

model.add(Dropout(0.5))

第三層是輸出層,輸出結果是10個類別,所以維度是10

model.add(Dense(10, init='glorot_uniform'))

model.add(Activation('softmax')) # 最后一層用softmax

設定參數(shù)

lr表示學習速率,decay是學習速率的衰減系數(shù)(每個epoch衰減一次),momentum表示動量項,Nesterov的值是False或者True,表示使不使用Nesterov momentum。

sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9,nesterov=True)

loss代表的是損失函數(shù), optimizer代表的是優(yōu)化方法, class_mode代表

使用交叉熵作為loss函數(shù),就是熟知的log損失函數(shù)

model.compile(loss='categorical_crossentropy',optimizer=sgd, class_mode='categorical')

使用Keras自帶的mnist工具讀取數(shù)據(jù)(第一次需要聯(lián)網(wǎng))

(X_train, y_train), (X_test, y_test) = mnist.load_data()

由于輸入數(shù)據(jù)維度是(num, 28, 28),這里需要把后面的維度直接拼起來變成784維

X_train = X_train.reshape(X_train.shape[0],X_train.shape[1]X_train.shape[2])

X_test = X_test.reshape(X_test.shape[0], X_test.shape[1]X_test.shape[2])

X_train = X_train.astype('float32')

X_test = X_test.astype('float32')

X_train /= 255

X_test /= 255

print(X_train.shape[0], 'train samples')

print(X_test.shape[0], 'test samples')

這里需要把index轉換成一個one hot的矩陣

Y_train = (np.arange(10) == y_train[:,None]).astype(int)

Y_test = (np.arange(10) == y_test[:,None]).astype(int)

'''

convert class vectors to binary class matrices

Y_train = np_utils.to_categorical(y_train, nb_classes)

Y_test = np_utils.to_categorical(y_test, nb_classes)

'''

開始訓練,這里參數(shù)比較多。batch_size就是batch_size,nb_epoch就是最多迭代的次數(shù), shuffle就是是否把數(shù)據(jù)隨機打亂之后再進行訓練

verbose是屏顯模式,官方這么說的:verbose: 0 for no logging to stdout, 1 for progress bar logging, 2 for one log line per epoch.

就是說0是不屏顯,1是顯示一個進度條,2是每個epoch都顯示一行數(shù)據(jù)

show_accuracy就是顯示每次迭代后的正確率

validation_split就是拿出百分之多少用來做交叉驗證

model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,shuffle=True, verbose=1, show_accuracy=True, validation_split=0.3)

print ('test set')

score = model.evaluate(X_test, Y_test, batch_size=200,show_accuracy=True, verbose=1)

print('Test score:', score[0])

print('Test accuracy:', score[1])

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,406評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,034評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,413評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,449評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,165評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,559評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,606評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,781評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,327評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,084評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,278評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,849評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,495評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,927評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,172評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,010評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,241評論 2 375

推薦閱讀更多精彩內容