keras卷积神经网络入门-笑脸检测

2023-11-14

Keras简介

Keras以其强大的封装结构,让我们不必过多的考虑神经网络间的计算,极大简化了tensorflow中的图计算,我们可以利用函数式编程来快速制定想要的神经网络结构。本案例基于卷积神经网络,向大家给出Keras入门案例。

1.库函数导入

import numpy as np
from keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D
from keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalMaxPooling2D, GlobalAveragePooling2D
from keras.models import Model
from keras.preprocessing import image
from keras.applications.imagenet_utils import preprocess_input
import kt_utils 
import keras.backend as K
K.set_image_data_format('channels_last')
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow

2.查看数据集

#加载数据
#图像维度:(64,64,3)训练集数量:600  测试集数量:150
X_train, Y_train, X_test, Y_test, classes = kt_utils.load_dataset()
#挑选一张图片查看
plt.imshow(X_train[1])
#查看标签
print(Y_train[:,1])

标签为1是笑脸

3.构建模型

在这里插入图片描述


##模型各层矩阵维度

input_2 (InputLayer) (None, 64, 64, 3) 0


zero_padding2d_2 (ZeroPaddin (None, 70, 70, 3) 0


conv0 (Conv2D) (None, 64, 64, 32) 4736


bn0 (BatchNormalization) (None, 64, 64, 32) 128


activation_2 (Activation) (None, 64, 64, 32) 0


max_pool (MaxPooling2D) (None, 32, 32, 32) 0


flatten_2 (Flatten) (None, 32768) 0


fc (Dense) (None, 1) 32769

=================================================================
Total params: 37,633
Trainable params: 37,569
Non-trainable params: 64



    #定义输入层
    X_input = Input(input_shape)

    #使用0填充,filter大小为3*3
    X = ZeroPadding2D((3, 3))(X_input)

    #卷积filter大小为7*7通道数为32,步长为1
    X = Conv2D(32, (7, 7), strides=(1, 1), name='conv0')(X)
    #采用BN,减少层与层的联系,增加模型健壮性
    X = BatchNormalization(axis=3, name='bn0')(X)
    #选取relu作为激活函数
    X = Activation('relu')(X)
    #最大值池化层,filter尺寸为2*2
    X = MaxPooling2D((2, 2), name='max_pool')(X)
    #降维,矩阵转化为向量 
    X = Flatten()(X)
    #+ 全连接层
    X = Dense(1, activation='sigmoid', name='fc')(X)

4.训练模型


#编译模型采用Adam优化器
happy_model.compile("adam","binary_crossentropy", metrics=['accuracy'])
#训练模型
happy_model.fit(X_train, Y_train, epochs=40, batch_size=50)
#评估模型
preds = happy_model.evaluate(X_test, Y_test, batch_size=32, verbose=1, sample_weight=None)
print ("误差值 = " + str(preds[0]))
print ("准确度 = " + str(preds[1]))

5.预测自己的图片

#测试自己的图片
img_path = './smile.jpg'

img = image.load_img(img_path, target_size=(64, 64))
imshow(img)
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

if happy_model.predict(x)==1:
    print("笑脸")
else:
    print("哭脸")
    
happy_model.summary()

代码附上
kt_utils.py

import keras.backend as K
import math
import numpy as np
import h5py
import matplotlib.pyplot as plt


def mean_pred(y_true, y_pred):
    return K.mean(y_pred)

def load_dataset():
    train_dataset = h5py.File('datasets/train_happy.h5', "r")
    train_set_x_orig = np.array(train_dataset["train_set_x"][:]) # your train set features
    train_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels

    test_dataset = h5py.File('datasets/test_happy.h5', "r")
    test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set features
    test_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels

    classes = np.array(test_dataset["list_classes"][:]) # the list of classes
    
    train_set_y_orig = train_set_y_orig.reshape((1, train_set_y_orig.shape[0]))
    test_set_y_orig = test_set_y_orig.reshape((1, test_set_y_orig.shape[0]))
    
    return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 18 22:06:57 2019

@author: 17319
"""

import numpy as np
from keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D
from keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalMaxPooling2D, GlobalAveragePooling2D
from keras.models import Model
from keras.preprocessing import image
from keras.applications.imagenet_utils import preprocess_input
import kt_utils 
import keras.backend as K
K.set_image_data_format('channels_last')
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow

#加载数据
#图像维度:(64,64,3)训练集数量:600  测试集数量:150
X_train, Y_train, X_test, Y_test, classes = kt_utils.load_dataset()
#挑选一张图片查看
plt.imshow(X_train[1])
print(Y_train[:,1])
# Normalize image vectors
X_train = X_train/255.
X_test = X_test/255.

# Reshape
Y_train = Y_train.T
Y_test = Y_test.T

#print ("number of training examples = " + str(X_train.shape[0]))
#print ("number of test examples = " + str(X_test.shape[0]))
#print ("X_train shape: " + str(X_train.shape))
#print ("Y_train shape: " + str(Y_train.shape))
#print ("X_test shape: " + str(X_test.shape))
#print ("Y_test shape: " + str(Y_test.shape))


def HappyModel(input_shape):


    X_input = Input(input_shape)
    X = ZeroPadding2D((3, 3))(X_input)
    X = Conv2D(32, (7, 7), strides=(1, 1), name='conv0')(X)
    X = BatchNormalization(axis=3, name='bn0')(X)
    X = Activation('relu')(X)
    X = MaxPooling2D((2, 2), name='max_pool')(X)
    #降维,矩阵转化为向量 + 全连接层
    X = Flatten()(X)
    X = Dense(1, activation='sigmoid', name='fc')(X)

    model = Model(inputs=X_input, outputs=X, name='HappyModel')

    return model

#创建一个模型实体
happy_model = HappyModel(X_train.shape[1:])
#编译模型
happy_model.compile("adam","binary_crossentropy", metrics=['accuracy'])
#训练
#初始化优化器和模型
history = happy_model.fit(X_train,Y_train,batch_size=64,epochs=20,
                    validation_split=0.2)
score = happy_model.evaluate(X_test,Y_test)
print("test score:",score[0])
print("test accuracy",score[1])

#列出所有历史数据
print(history.history.keys())

#汇总损失函数历史数据
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model_loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train','test'],loc='upper left')
plt.show()


#测试自己的图片
img_path = './smile.jpg'

img = image.load_img(img_path, target_size=(64, 64))
imshow(img)

x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

if happy_model.predict(x)==1:
    print("笑脸")
else:
    print("哭脸")
    
happy_model.summary()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

keras卷积神经网络入门-笑脸检测 的相关文章

随机推荐

  • 通信协议之应用层

    通信协议之应用层 应用层包含所有的高层协议 例如FTP File Transfer Protocol的简写 中文名称是文件传输协议 SMTP Simple Mail Transfer Protocol的简写 中文名称是简单电子邮件传输协议
  • 位运算符规则

    位运算符规则 左移运算符 lt lt 右移运算符 gt gt 无符号右移运算符 gt gt gt 左移运算符 lt lt 运算规则 丢弃左边 高位 指定位数 右边 低位 补0 右移运算符 gt gt 运算规则 丢弃右边 低位 指定位数 左边
  • 软件测试的职业发展和规划(一)

    作为很多软件测试岗位的朋友来说 职业发展和规划一直是一个比较模糊的概念 知道其重要 却不知如何规划更符合自己的实际情况 下面 我们就分三种情况来简单说一说 一 高管理 低技能 即是我们通常所说的管理路线 在IT业 这个方向的成功者不乏项目经
  • 使用react-pdf预览pdf

    在使用umi构建的react项目中如何实现预览pdf 如果PDF中包含印章该如何使印章展示出来 1 安装依赖 yarn add react pdf react pdf https github com wojtekmaj react pdf
  • Mapped Statements collection does not contain value for

    Caused by java lang IllegalArgumentException Mapped Statements collection does not contain value for com wt mss dao daoi
  • React+Ant.Design 从零开始搭建个人博客实战教程01 —— 起步

    简介 刚入手一个服务器 打算搭个个站 平时工作都是用vue 为了扩展自己的实战能力 来从头开始实战用用react吧 结合ant design一起开发 然后后台nodejs来写 编写我的第一个教程文章 从头到尾记录整个过程 因为是实战项目 部
  • ad中封装绿色解决办法

    1是在工具 检查规则中 把一些项取消检查
  • 推荐一个将MD格式的文档轻松转换到微信公众号的工具

    因为微信公众号自带的编辑器不是特别友好 这也是一个痛点 之前也有使用过google插件 但不是特别灵活 现在推荐的这款工具可以很好的支持将MD格式的文档直接进行渲染 还是非常好用的 话不多说 先给出工具地址 https md openwri
  • 花生壳 Linux arm

    安装和使用Linux花生壳服务 一 安装说明 以CentOS 5为例 1 安装必要的开发包 root localhost yum install gcc gcc c autoconf automake 2 下载phddns 2 0 2 16
  • MongoDB图形化工具下载和使用

    文章目录 MongoDB图形化工具 1 下载地址 2 打开MongoDB服务 3 Compass界面 3 1 连接Mongo 3 2 创建数据库 3 3 创建集合 3 4 删除集合 3 5 增 3 6 改 3 7 删 3 8 查 3 9 导
  • TRPO算法详解

    答主最近学到TRPO 这算法确实很难理解 现在记录答主现在的一点想法 留存记录 先放参考文献 方便大家学习 Reference 1 Sutton R S Barto A G Reinforcement learning An introdu
  • 数组指针数组的定义及使用(about array of pointer of array)

    数组指针数组 array pointer array 该怎么定义和使用呢 如下 定义 define MsgCnt 3 define MsgLen 8 typedef char MsgArray MsgCnt MsgLen typedef c
  • J2EE之XML建模

    目录 一 什么叫XML建模 二 XML建模 1 根据XML配置文件元素节点创建元素节点实体类 2 利用dom4j xpath技术实现XML建模 一 什么叫XML建模 将XML配置文件中的元素 属性 文本信息转换成对象的过程叫做XML建模 二
  • 实验四,静态成员与友元

    一 实验目的和要求 了解成员函数的特性 掌握静态成员 友元等概念 二 实验内容 1 调试下列程序 写出输出结果 并分析输出结果 sy4 1 cpp include
  • python 大乐透号码生成器

    选号规则 前区1 35的范围随机产生不重复的5个号码 后区在1 12范围内随机生成2个不重复的2个号码 如下 from random import sample def number front sample str i for i in
  • 一、PWM 输出控制电机

    PWM 输出控制电机 电机系列 一 PWM 输出控制电机 1 相关 IO 介绍 2 编写 PWM 输出库函数 PWM h PWM c 3 控制函数 control h control c 4 main函数 电机系列 一 PWM 输出控制电机
  • 关闭jvm的方式

    1 System exit status 不管status为何值都会退出程序 System exit 0 是正常退出程序 而System exit 1 或者说非0表示非正常退出程序 2 System exit 0 和dispose Syst
  • MySQL踩坑笔记(1)

    mysql gt set password for 用户名 localhost password 新密码 这个是错的 mysql gt alter user 用户名 登录主机 identified by 密码 自定义 这个是对的 mysql
  • Linux全网超详细RHLinux安装PHP8.2.9 (2023年8月最新版)

    目录 进入PHP官方网站 1 下载安装包 2 解压安装包文件 3 安装php文件 安装提示sqlite3 4 安装过程中出现错误修复 5 查看一下php版本 6 启动php服务 进入PHP官方网站 PHP网址 https www php n
  • keras卷积神经网络入门-笑脸检测

    keras卷积神经网络入门 笑脸检测 Keras简介 1 库函数导入 2 查看数据集 3 构建模型 4 训练模型 5 预测自己的图片 Keras简介 Keras以其强大的封装结构 让我们不必过多的考虑神经网络间的计算 极大简化了tensor