-
大小: 14.64MB文件類型: .rar金幣: 1下載: 0 次發布日期: 2023-07-22
- 語言: 其他
- 標簽:
資源簡介
《DeepLearning tutorial(5)CNN卷積神經網絡應用于人臉識別(詳細流程+代碼實現)》這篇文章的代碼,將CNN用于人臉識別,整個實現流程請見:http://blog.csdn.net/u012162613/article/details/43277187
代碼片段和文件信息
#?-*-coding:utf8-*-#
“““
本程序基于python+numpy+theano+PIL開發,采用類似LeNet5的CNN模型,應用于olivettifaces人臉數據庫,
實現人臉識別的功能,模型的誤差降到了5%以下。
本程序只是個人學習過程的一個toy?implement,模型可能存在overfitting,因為樣本小,這一點也無從驗證。
但是,本程序意在理清程序開發CNN模型的具體步驟,特別是針對圖像識別,從拿到圖像數據庫,到實現一個針對這個圖像數據庫的CNN模型,
我覺得本程序對這些流程的實現具有參考意義。
@author:wepon(http://2hwp.com)
講解這份代碼的文章:http://blog.csdn.net/u012162613/article/details/43277187
“““
import?os
import?sys
import?time
import?numpy
from?PIL?import?Image
import?theano
import?theano.tensor?as?T
from?theano.tensor.signal?import?downsample
from?theano.tensor.nnet?import?conv
“““
加載圖像數據的函數dataset_path即圖像olivettifaces的路徑
加載olivettifaces后,劃分為train_datavalid_datatest_data三個數據集
函數返回train_datavalid_datatest_data以及對應的label
“““
def?load_data(dataset_path):
????img?=?Image.open(dataset_path)
????img_ndarray?=?numpy.asarray(img?dtype=‘float64‘)/256
????faces=numpy.empty((4002679))
????for?row?in?range(20):
???for?column?in?range(20):
faces[row*20+column]=numpy.ndarray.flatten(img_ndarray?[row*57:(row+1)*57column*47:(column+1)*47])
????label=numpy.empty(400)
????for?i?in?range(40):
label[i*10:i*10+10]=i
????label=label.astype(numpy.int)
????#分成訓練集、驗證集、測試集,大小如下
????train_data=numpy.empty((3202679))
????train_label=numpy.empty(320)
????valid_data=numpy.empty((402679))
????valid_label=numpy.empty(40)
????test_data=numpy.empty((402679))
????test_label=numpy.empty(40)
????for?i?in?range(40):
train_data[i*8:i*8+8]=faces[i*10:i*10+8]
train_label[i*8:i*8+8]=label[i*10:i*10+8]
valid_data[i]=faces[i*10+8]
valid_label[i]=label[i*10+8]
test_data[i]=faces[i*10+9]
test_label[i]=label[i*10+9]
????#將數據集定義成shared類型,才能將數據復制進GPU,利用GPU加速程序。
????def?shared_dataset(data_x?data_y?borrow=True):
????????shared_x?=?theano.shared(numpy.asarray(data_x
???????????????????????????????????????????????dtype=theano.config.floatX)
?????????????????????????????????borrow=borrow)
????????shared_y?=?theano.shared(numpy.asarray(data_y
???????????????????????????????????????????????dtype=theano.config.floatX)
?????????????????????????????????borrow=borrow)
????????return?shared_x?T.cast(shared_y?‘int32‘)
????train_set_x?train_set_y?=?shared_dataset(train_datatrain_label)
????valid_set_x?valid_set_y?=?shared_dataset(valid_datavalid_label)
????test_set_x?test_set_y?=?shared_dataset(test_datatest_label)
????rval?=?[(train_set_x?train_set_y)?(valid_set_x?valid_set_y)
????????????(test_set_x?test_set_y)]
????return?rval
#分類器,即CNN最后一層,采用邏輯回歸(softmax)
class?LogisticRegression(object):
????def?__init__(self?input?n_in?n_out):
????????self.W?=?theano.shared(
????????????value=numpy.zeros(
????????????????(n_in?n_out)
????????????????dtype=theano.config.floatX
????????????)
????????????name=‘W‘
????????????borrow=True
????????)
????????self.b?=?theano.shared(
????????????value=numpy.zeros(
????????????????(n_out)
????????????????dtype=theano.config.floatX
????????????)
????????????name=‘b‘
????????????borrow=True
????????)
????????self.p_y_given_x?=?T.nnet.softm
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????1182905??2015-01-27?10:53??FaceRecognition_CNN(olivettifaces)\olivettifaces.gif
?????文件???14750086??2015-01-29?15:30??FaceRecognition_CNN(olivettifaces)\params.pkl
?????文件??????15554??2015-01-30?07:21??FaceRecognition_CNN(olivettifaces)\train_CNN_olivettifaces.py
?????文件???????7042??2015-01-30?07:21??FaceRecognition_CNN(olivettifaces)\use_CNN_olivettifaces.py
?????目錄??????????0??2015-01-30?07:18??FaceRecognition_CNN(olivettifaces)
-----------?---------??----------?-----??----
?????????????15955587????????????????????5
評論
共有 條評論