1.我们来看一下整个网络的实现构架
以下显示面板利用的是keras的summary函数
(None, 65536)
(None, 512)
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 32, 128, 128) 832
_________________________________________________________________
re_lu_1 (ReLU) (None, 32, 128, 128) 0
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 32, 64, 64) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 32, 64, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 64, 64, 64) 51264
_________________________________________________________________
re_lu_2 (ReLU) (None, 64, 64, 64) 0
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 64, 32, 32) 0
_________________________________________________________________
dropout_2 (Dropout) (None, 64, 32, 32) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 65536) 0
_________________________________________________________________
dense_1 (Dense) (None, 512) 33554944
_________________________________________________________________
activation_1 (Activation) (None, 512) 0
_________________________________________________________________
dropout_3 (Dropout) (None, 512) 0
_________________________________________________________________
dense_2 (Dense) (None, 2) 1026
_________________________________________________________________
activation_2 (Activation) (None, 2) 0
=================================================================
Total params: 33,608,066
Trainable params: 33,608,066
Non-trainable params: 0
_________________________________________________________________
利用的是wiki的数据集,准确率高达98%
优化器选用的是
Adam(lr=1e-4)
代价函数选用的是交叉熵
model.compile(loss='categorical_crossentropy',optimizer= adam,metrics=['accuracy'])
以下是源码:
from keras.models import Sequential
from tensorflow.examples.tutorials.mnist import input_data
from keras.layers import Dense,Dropout,Activation,Flatten
from keras.layers import Convolution2D,MaxPool2D,ReLU,Activation
from keras.utils import np_utils
from keras import backend as K
from keras.optimizers import Adam
import WikiReader as wr
import numpy as np
K.set_image_dim_ordering('th')
ld = wr.WikiReader('F:/DBForDeepLearning/wiki/wiki/','path.list','gender.list','faceScore.list',128,128)
faceData,male,female = ld.getBatch(4000)
faceData,labels = ld.getImageAndLabels(faceData)
FILE_PATH = "model.h5"
print(labels)
xtrain = faceData/255
ytrain = labels
print(xtrain.shape)
model = Sequential()
model.add(Convolution2D(32,(5,5),input_shape=(1,128,128),padding='SAME'))
model.add(ReLU())
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Convolution2D(64,(5,5),input_shape=(1,128,128),padding='SAME'))
model.add(ReLU())
model.add(MaxPool2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(2))
model.add(Activation('softmax'))
model.summary()
adam = Adam(lr=1e-4)
model.compile(loss='categorical_crossentropy',optimizer= adam,metrics=['accuracy'])
model.fit(xtrain,ytrain,batch_size=100,epochs=40)
model.save(FILE_PATH)
数据的解释器WikiReader是我自己写的解释器,你可以参照之前写的MinistDataAnalyser去写,你可以通过cv2,或者pylot去读取数据