卜若的代码笔记-python系列-神经网络篇-第十四章:基于keras框架的男女性别识别

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去读取数据

数据解释器

发布了225 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37080133/article/details/104282135