首先在理解CNN之前揭措,我們有必要先理解一下什么是神經(jīng)網(wǎng)絡(luò),這樣我們才能開始了解更高級的卷積神經(jīng)網(wǎng)絡(luò)完慧。
要學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)當(dāng)然有很多途徑谋旦,網(wǎng)上不少的大牛寫了很多攻略,有的推崇從理論到工程完成深度學(xué)習(xí)屈尼,有的希望從工程出發(fā)發(fā)現(xiàn)問題册着,解決問題。各種各樣的方式都有不同的人去嘗試脾歧,攻略也是一大推甲捏,這使得不少的小白直接倒在了選擇材料的路上,一直在補(bǔ)先修知識鞭执,待到熱情結(jié)束就放棄了學(xué)習(xí)司顿,連卷積網(wǎng)絡(luò)都不知道是什么,大大地打擊了大家的學(xué)習(xí)熱情兄纺。今天免猾,sherlock在這里給大家推薦一個學(xué)習(xí)材料,保證你能夠快速入門cnn囤热,出去裝逼也能夠和別人聊幾句。
這個材料是什么呢获三,就是大名鼎鼎的standford的cs231n這門課程 http://cs231n.github.io/ stanford大學(xué)確實算是深度學(xué)習(xí)和人工智能領(lǐng)域非常牛逼的學(xué)校旁蔼。
神經(jīng)網(wǎng)絡(luò)
廢話不多說锨苏,我們開始學(xué)習(xí)我們的神經(jīng)網(wǎng)絡(luò)。
這是一張腦神經(jīng)的圖片棺聊,神經(jīng)網(wǎng)絡(luò)的發(fā)明也是由此開始的伞租,這就是所謂的一個神經(jīng)元,上面有各種接受突觸限佩,然后通過一個腦神經(jīng)來接受葵诈,最后得到輸出的結(jié)果。
那么由這張腦神經(jīng)圖能夠抽象出來的神經(jīng)網(wǎng)絡(luò)是什么呢?就是下面這個神經(jīng)網(wǎng)絡(luò)模型祟同。
這個怎么理解呢作喘?就是輸入一個向量,然后給向量的每一個元素分配一個權(quán)重晕城,然后通過權(quán)重求和得到一個結(jié)果泞坦,然后將這個結(jié)果輸入一個激活函數(shù),得到最后的輸出結(jié)果砖顷。
激活函數(shù)又是什么鬼贰锁?激活函數(shù)的出現(xiàn)是因為人腦的構(gòu)造,人腦里面接受信息得到結(jié)果這個過程是非線性的滤蝠,比如你看到一樣?xùn)|西豌熄,你不可能保留這個東西的全部特征,你會重點觀察你感興趣的地方物咳,這就是非線性的锣险,也就是說需要一個非線性變化將輸入的結(jié)果變換為非線性的結(jié)果。現(xiàn)在常用的非線性函數(shù)就是Relu(x) = max(x, 0)所森,就是將小于0的部分去掉囱持,只保留大于0的部分。
這就是個單元的輸入和輸出焕济,將這些單元合在一起就是一個神經(jīng)網(wǎng)絡(luò)纷妆。
這就是簡單的一層網(wǎng)絡(luò),也可以由多層網(wǎng)絡(luò)
這里面的input layer就是所謂的單個訓(xùn)練集的維數(shù)晴弃,將所有的訓(xùn)練集輸入就可以開始訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)掩幢。
Keras實現(xiàn)簡單的神經(jīng)網(wǎng)絡(luò)
知道了神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)和原理,如果大家還記得我前面一篇文章說的工具keras上鞠,我們可以開始使用keras去實現(xiàn)一個簡單的神經(jīng)網(wǎng)絡(luò)际邻。
import keras
from keras.models import Sequential
from keras.layers import Dense
import numpy as np
導(dǎo)入必要的package
x = np.array([[0, 1, 0], [0, 0, 1], [1, 3, 2], [3, 2, 1]])
y = np.array([0, 0, 1, 1]).T
設(shè)定輸入的x和y
simple_model = Sequential()
simple_model.add(Dense(5, input_shape=(x.shape[1],), activation='relu', name='layer1'))
simple_model.add(Dense(4, activation='relu', name='layer2'))
simple_model.add(Dense(1, activation='sigmoid', name='layer3'))
輸入一個三層的神經(jīng)網(wǎng)絡(luò),中間的hidden layer的元素個數(shù)是5和4芍阎,最后一層輸出一個結(jié)果
simple_model.compile(optimizer='sgd', loss='mean_squared_error')
complie這個簡單的模型
simple_model.fit(x, y, epochs=20000)
訓(xùn)練20000次模型
simple_model.predict(x[0:1])
可以預(yù)測一下第一個輸入的x的結(jié)果與實際的是否相符
這就是一個簡單三層網(wǎng)絡(luò)的keras實現(xiàn)世曾,下一篇文章我們將正式進(jìn)入Convolutional Neural Network