python實(shí)戰(zhàn)keras初步(python2.7+神經(jīng)網(wǎng)絡(luò)+keras+tensorflow+linux)

學(xué)長大大給了個(gè)小作業(yè),自定義分類規(guī)則(二分類,最好包含了二次冪以上的運(yùn)算),輸入樣本隨機(jī)產(chǎn)生,真實(shí)的分類0和1基本達(dá)到五五開,然后用keras構(gòu)建神經(jīng)網(wǎng)絡(luò),實(shí)現(xiàn)較好的擬合到自定義的分類規(guī)則。

#!/usr/bin/python
#-*-coding:utf-8-*- 
from keras.models import Sequential
from keras.layers import Dense
import numpy
from numpy import random
#在需要隨機(jī)初始化的時(shí)候,最好先設(shè)定隨機(jī)種子,因?yàn)殡S機(jī)種子確定下來之后,每一次運(yùn)行代碼得到的都
#一樣的隨機(jī)序列,保證了實(shí)驗(yàn)結(jié)果的一致性。如果需要每一次隨機(jī)種子都不同,可以用當(dāng)前時(shí)間來做seed
seed=7
numpy.random.seed(seed)
#產(chǎn)生一個(gè)隨機(jī)1000x2的數(shù)組作為輸入樣本
randArray=random.random(size=(1000,2))
print(randArray)
#分別求兩個(gè)維度的均值
avg1=numpy.mean(randArray[:,0])
avg2=numpy.mean(randArray[:,1])
y=numpy.zeros([1000,1])
j=0
#自定義分類規(guī)則,當(dāng) (x1-avg1+x2-avg2 )**2> 0.1時(shí),將其x1與x2的輸出定義為1,否則為0
#將自定義的分類結(jié)果保存在y上。
for i  in range(0,1000):
    x1=randArray[i,0]
    x2=randArray[i,1]
    if (x1-avg1+x2-avg2 )**2> 0.09:
        y[j,0]=1
    j+=1
#為了使分類基本實(shí)現(xiàn)五五開,對于上面閾值0.1通過計(jì)算y的元素總和來看,因?yàn)槭?,1分類,
#y.sum()就代表了分類為1的數(shù)量,若y.sum()>500,將閾值0.1增大,反之亦然。
#這里測試到閾值為0.1時(shí),y.sum()也就是分類為1的數(shù)量為470多,
#修改閾值為0.09,分類1達(dá)到493個(gè),接近50%,就采用0.09作為分類閾值
print(y.sum())
print(y.T)
x=randArray
#初始化序貫?zāi)P?model=Sequential()
#依次增加全連接層,input_dim=2,因?yàn)檩斎霕颖镜木S度為2,每個(gè)樣本輸入只有x1與x2
model.add(Dense(4,activation="relu",kernel_initializer="random_normal",input_dim=2))
model.add(Dense(3,activation='sigmoid',kernel_initializer="random_normal"))
model.add(Dense(2,activation='sigmoid‘,kernel_initializer="random_normal"))
#要實(shí)現(xiàn)二分類,最后一層定義神經(jīng)元個(gè)數(shù)為1
model.add(Dense(1,activation="sigmoid",kernel_initializer="random_normal"))
#神經(jīng)網(wǎng)絡(luò)構(gòu)建好之后,就是編譯網(wǎng)絡(luò),設(shè)定一些參數(shù)。
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy'])
#訓(xùn)練網(wǎng)絡(luò),一共1000個(gè)樣本,就選擇迭代200次,每一批取5個(gè)樣本
#(這里不是一定的,上面的構(gòu)建也不是一定的)
model.fit(x,y,epochs=200,batch_size=5)
scores=model.evaluate(x,y)
print("%s: %.2f%%" % (model.metrics_names[1],scores[1]*100))
#更換隨機(jī)種子,避免相同隨機(jī)種子產(chǎn)生的樣本進(jìn)行干擾(其實(shí)可能也無所謂,大概是想多了),
#2+產(chǎn)生100x2的隨機(jī)輸入樣本,對訓(xùn)練好的模型進(jìn)行檢驗(yàn)
seed=3
numpy.random.seed(seed)
test_x=random.random(size=(100,2))
test_avg1=numpy.mean(test_x[:,0])
test_avg2=numpy.mean(test_x[:,1])
test_y=numpy.zeros([100,1])
j=0
#for循環(huán)產(chǎn)生在自定義規(guī)則下的100個(gè)測試樣本的真實(shí)分類
for i  in range(0,100):
    x1=test_x[i,0]
    x2=test_x[i,1]
    if (x1-test_avg1+x2-test_avg2 )**2> 0.09:
        test_y[j,0]=1
    j+=1
print('測試樣本的真實(shí)分類:')
print(test_y.T)
predictions=model.predict(test_x)
#因?yàn)槟P妥詈蟮募せ詈瘮?shù)為sigmoid,整個(gè)函數(shù)的輸出在0到1之間,
#所以對輸出進(jìn)行簡單的四舍五入,就可以達(dá)到真正的二分類了。
rounded = [round(w) for w in predictions]
print('模型對樣本的預(yù)測分類:')
print(["%.0f"%n for n in rounded])
a_array=numpy.array(test_y.T)
b_array=numpy.array(rounded)
#100個(gè)測試樣本中,真實(shí)的輸出與模型的預(yù)測輸出,兩數(shù)組相減,得到的結(jié)果數(shù)組就很直觀了。
#因?yàn)槭?,1分類,相減結(jié)果只有哪幾種可能?
result_array = a_array - b_array
numpy.set_printoptions(threshold='nan')
print('結(jié)果對比,真實(shí)減去預(yù)測:')
print(result_array)

最后,上個(gè)圖吧。。可以看到,模型在迭代過程中,精度到達(dá)了99%。
在測試模型的時(shí)候,用重新隨機(jī)生成的100個(gè)二維輸入,用訓(xùn)練好的模型來做分類,與實(shí)際的分類結(jié)果相比,一百個(gè)只有1個(gè)不一致,可以認(rèn)為模型較好地達(dá)到了在這種自定義分類下進(jìn)行分類的目的。

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

推薦閱讀更多精彩內(nèi)容