import keras
from keras.layers import Dense, Dropout, Activation, Flatten,Conv2D, MaxPooling2D
from keras.layers.normalization import BatchNormalization
from keras.models import Sequential
from keras.preprocessing.image import ImageDataGenerator
from keras.callbacks import EarlyStopping
from keras.optimizers import SGD
from keras.utils import plot_model
batch_siz = 128
num_classes = 7
nb_epoch = 70
img_size=48
root_path='./fer2013'
model_path='./model'
class Model:
def __init__(self):
#声明一个成员变量model
self.model = None
def build_model(self):
#建立序贯模型
self.model = Sequential()
self.model.add(Conv2D(32, (1, 1), strides=1, padding='same', input_shape=(img_size, img_size, 1)))
self.model.add(Activation('relu'))
self.model.add(Conv2D(32, (5, 5), padding='same'))
self.model.add(Activation('relu'))
self.model.add(MaxPooling2D(pool_size=(2, 2)))
self.model.add(Conv2D(32, (3, 3), padding='same'))
self.model.add(Activation('relu'))
self.model.add(MaxPooling2D(pool_size=(2, 2)))
self.model.add(Conv2D(64, (5, 5), padding='same'))
self.model.add(Activation('relu'))
self.model.add(MaxPooling2D(pool_size=(2, 2)))
self.model.add(Flatten())
self.model.add(Dense(2048))
self.model.add(Activation('relu'))
self.model.add(Dropout(0.5))
self.model.add(Dense(1024))
self.model.add(Activation('relu'))
self.model.add(Dropout(0.5))
self.model.add(Dense(num_classes))
self.model.add(Activation('softmax'))
self.model.summary()
def train_model(self):
sgd=SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
self.model.compile(loss='categorical_crossentropy',
optimizer=sgd,
#optimizer='rmsprop',
metrics=['accuracy'])
#使用生成器来生成batch数据
#首先进行图片预处理
#自动扩充训练样本(旋转、翻转等)
train_datagen = ImageDataGenerator(
rescale = 1./255, #重放缩因子,数值乘以1.0/255(归一化)
shear_range = 0.2, #剪切强度(逆时针方向的剪切变换角度)
zoom_range = 0.2, #随机缩放的幅度
#进行随机水平翻转
horizontal_flip=True)
#归一化验证集
val_datagen = ImageDataGenerator(
rescale = 1./255)
eval_datagen = ImageDataGenerator(
rescale = 1./255)
#flow_from_directory(dictory)方法
#以文件分类名划分label
train_generator = train_datagen.flow_from_directory(
root_path+'/train', #dictory参数,该路径下的所有子文件夹的图片都会被生成器使用,无限产生batch数据
target_size=(img_size,img_size), #图片将被resize成该尺寸
color_mode='grayscale', #颜色模式,graycsale或rgb(默认rgb)
batch_size=batch_siz, #batch数据的大小,默认为32
class_mode='categorical') #返回的标签形式,默认为‘category’,返回2D的独热码标签
val_generator = val_datagen.flow_from_directory(
root_path+'/val', #同上
target_size=(img_size,img_size),
color_mode='grayscale',
batch_size=batch_siz,
class_mode='categorical')
eval_generator = eval_datagen.flow_from_directory(
root_path+'/test', #同上
target_size=(img_size,img_size),
color_mode='grayscale',
batch_size=batch_siz,
class_mode='categorical')
early_stopping = EarlyStopping(monitor='loss',patience=3)
#利用生成器进行训练 调用fit_generator方法
history_fit=self.model.fit_generator(
train_generator, #generator参数,生成训练集的生成器
steps_per_epoch=800/(batch_siz/32),#28709 生成器返回这么多次数据时记为一个epoch结束,执行下一个epoch
nb_epoch=nb_epoch, #数据迭代轮数
validation_data=val_generator, #生成验证集的生成器
validation_steps=2000, #指定验证集的生成器返回次数
#callbacks=[early_stopping]
)
# history_eval=self.model.evaluate_generator(
# eval_generator,
# steps=2000)
#从一个生成器上来获取数据,进行预测
history_predict=self.model.predict_generator(
eval_generator,
steps=2000)
#保存训练日志
with open(root_path+'/model_fit_log','w') as f:
f.write(str(history_fit.history))
with open(root_path+'/model_predict_log','w') as f:
f.write(str(history_predict))
# print("%s: %.2f%%" % (self.model.metrics_names[1], history_eval[1] * 100))
print('model trained')
def save_model(self):
model_json=self.model.to_json()
with open(model_path+"/model_json.json", "w") as json_file:
json_file.write(model_json)
self.model.save_weights(model_path+'/model_weight.h5')
self.model.save(model_path+'/model.h5')
print('model saved')
if __name__=='__main__':
model=Model()
model.build_model()
print('model built')
model.train_model()
print('model trained')
model.save_model()
print('model saved')
# plot_model(model.model,to_file='model.png')
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
keras人脸表情识别.rar (2000个子文件)
model_weight.h5 26.4MB
6.jpg 74KB
4.jpg 63KB
2.jpg 45KB
5.jpg 38KB
surprise2.jpg 36KB
1.jpg 34KB
3.jpg 33KB
sad.jpg 32KB
happy.jpg 21KB
surprise1.jpg 18KB
neatual.jpg 17KB
angry.jpg 16KB
02782.jpg 1KB
22277.jpg 1KB
00497.jpg 1KB
00000.jpg 1KB
02593.jpg 1KB
10490.jpg 1KB
02325.jpg 1KB
02797.jpg 1KB
03519.jpg 1KB
02455.jpg 1KB
01928.jpg 1KB
05081.jpg 1KB
12596.jpg 1KB
23810.jpg 1KB
25170.jpg 1KB
01112.jpg 1KB
09767.jpg 1KB
15114.jpg 1KB
20332.jpg 1KB
25769.jpg 1KB
03432.jpg 1KB
02996.jpg 1KB
01753.jpg 1KB
17421.jpg 1KB
15483.jpg 1KB
24072.jpg 1KB
12592.jpg 1KB
15343.jpg 1KB
10860.jpg 1KB
08859.jpg 1KB
10634.jpg 1KB
12332.jpg 1KB
10947.jpg 1KB
08006.jpg 1KB
18905.jpg 1KB
01243.jpg 1KB
02724.jpg 1KB
13000.jpg 1KB
02892.jpg 1KB
26123.jpg 1KB
00038.jpg 1KB
27488.jpg 1KB
08990.jpg 1KB
00194.jpg 1KB
01740.jpg 1KB
17461.jpg 1KB
17317.jpg 1KB
00716.jpg 1KB
03521.jpg 1KB
01598.jpg 1KB
10338.jpg 1KB
27523.jpg 1KB
02152.jpg 1KB
02724.jpg 1KB
17620.jpg 1KB
01192.jpg 1KB
06424.jpg 1KB
01016.jpg 1KB
06726.jpg 1KB
19610.jpg 1KB
16574.jpg 1KB
00051.jpg 1KB
24121.jpg 1KB
01204.jpg 1KB
04577.jpg 1KB
03269.jpg 1KB
00272.jpg 1KB
23275.jpg 1KB
09639.jpg 1KB
15183.jpg 1KB
26656.jpg 1KB
27585.jpg 1KB
25442.jpg 1KB
09785.jpg 1KB
11044.jpg 1KB
08801.jpg 1KB
02360.jpg 1KB
15752.jpg 1KB
01836.jpg 1KB
27181.jpg 1KB
22012.jpg 1KB
02235.jpg 1KB
17442.jpg 1KB
19236.jpg 1KB
12479.jpg 1KB
18434.jpg 1KB
01819.jpg 1KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
- wyl_blogs2020-03-24非常的完整
- 新道寺2019-07-12是完整的代码,数据集和模型都直接放进去了不用自己另外下载。下载下来可以直接运行
- Conspiratorx2019-07-11好用!搭配博主对应的讲解博客食用,效果极佳
pmj110119
- 粉丝: 2885
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功