热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

深度卷积网络:实例探究week2编程题1(Keras入门笑脸识别)

在完成作业之前需要在虚拟环境中安装TensorFlow和Keras

Keras中几个函数用法https://blog.csdn.net/u012969412/article/details/70882296/

导包

 1 import numpy as np
 2 from keras import layers
 3 from keras.layers import Input, Dense, Activation, ZeroPadding2D, BatchNormalization, Flatten, Conv2D
 4 from keras.layers import AveragePooling2D, MaxPooling2D, Dropout, GlobalMaxPooling2D, GlobalAveragePooling2D
 5 from keras.models import Model
 6 from keras.preprocessing import image
 7 from keras.utils import layer_utils
 8 from keras.utils.data_utils import get_file
 9 from keras.applications.imagenet_utils import preprocess_input
10 import pydot
11 from IPython.display import SVG
12 from keras.utils.vis_utils import model_to_dot
13 from keras.utils import plot_model
14 from kt_utils import *
15 
16 import keras.backend as K
17 K.set_image_data_format('channels_last')
18 import matplotlib.pyplot as plt
19 from matplotlib.pyplot import imshow

加载数据

1 X_train_orig, Y_train_orig, X_test_orig, Y_test_orig, classes = load_dataset()
2 
3 # Normalize image vectors
4 X_train = X_train_orig/255.          #(600, 64, 64, 3)
5 X_test = X_test_orig/255.            #(150, 64, 64, 3)
6 
7 # Reshape
8 Y_train = Y_train_orig.T             #(600, 1)
9 Y_test = Y_test_orig.T               #(150, 1)

构建模型

Keras框架使用的变量名和我们以前使用的numpy和TensorFlow变量不一样。它不是在前向传播的每一步上创建新变量(比如X, Z1, A1, Z2, A2,…)以便于不同层之间的计算。在Keras中,我们使用X覆盖了所有的值,没有保存每一层结果,我们只需要最新的值,唯一例外的就是X_input,我们将它分离出来是因为它是输入的数据,我们要在最后的创建模型那一步中用到。

深度卷积网络:实例探究-week2编程题1(Keras 入门 - 笑脸识别)

 1 def HappyModel(input_shape):
 2     """
 3     Implementation of the HappyModel.
 4     
 5     Arguments:
 6     input_shape -- shape of the images of the dataset
 7 
 8     Returns:
 9     model -- a Model() instance in Keras
10     """
11     
12     ### START CODE HERE ###
13     # Feel free to use the suggested outline in the text above to get started, and run through the whole
14     # exercise (including the later portions of this notebook) once. The come back also try out other
15     # network architectures as well. 
16     X_input = Input(input_shape)
17     
18     # Zero-Padding: pads the border of X_input with zeroes
19     X = ZeroPadding2D((3, 3))(X_input)
20 
21     # CONV -> BN -> RELU Block applied to X
22     X = Conv2D(32, (3, 3), strides = (1, 1), name = 'conv0')(X)
23     X = BatchNormalization(axis = 3, name = 'bn0')(X)
24     X = Activation('relu')(X)
25     
26     # MAXPOOL
27     X = MaxPooling2D((2, 2), name='max_pool')(X)
28     
29     X = Conv2D(16, (3, 3), strides = (1, 1), name = 'conv1')(X)  
30     X = Activation('relu')(X)
31     X = MaxPooling2D((2, 2), name='max_pool1')(X)
32     
33     # FLATTEN X (means convert it to a vector) + FULLYCONNECTED
34     X = Flatten()(X)
35     X = Dense(1, activation='sigmoid', name='fc')(X)
36 
37     # Create model. This creates your Keras model instance, you'll use this instance to train/test the model.
38     model = Model(inputs = X_input, outputs = X, name='HappyModel')
39     ### END CODE HERE ###
40     
41     return model

训练、评估模型

 1 #1.Create the model
 2 happy_model=HappyModel(X_train.shape[1:])
 3 #2.Compile the model
 4 happy_model.compile(optimizer = "adam", loss = "binary_crossentropy", metrics = ["accuracy"])
 5 #3.Train the model on train data
 6 happy_model.fit(x =X_train, y = Y_train, epochs = 40, batch_size = 50)
 7 #4.Test the model on test data
 8 preds=happy_model.evaluate(x = X_test, y = Y_test)
 9 
10 print ("Loss = " + str(preds[0]))
11 print ("Test Accuracy = " + str(preds[1]))

Epoch 1/40
600/600 [==============================] - 14s - loss: 0.7618 - acc: 0.5683
Epoch 2/40
600/600 [==============================] - 12s - loss: 0.4747 - acc: 0.8100
Epoch 3/40
600/600 [==============================] - 11s - loss: 0.3806 - acc: 0.8467
Epoch 4/40
600/600 [==============================] - 12s - loss: 0.2832 - acc: 0.9183
Epoch 5/40
600/600 [==============================] - 13s - loss: 0.2239 - acc: 0.9367
Epoch 6/40
600/600 [==============================] - 13s - loss: 0.1918 - acc: 0.9500
Epoch 7/40
600/600 [==============================] - 12s - loss: 0.1568 - acc: 0.9550
Epoch 8/40
600/600 [==============================] - 13s - loss: 0.1326 - acc: 0.9683
Epoch 9/40
600/600 [==============================] - 13s - loss: 0.1152 - acc: 0.9717
Epoch 10/40
600/600 [==============================] - 13s - loss: 0.0982 - acc: 0.9800
Epoch 11/40
600/600 [==============================] - 12s - loss: 0.0980 - acc: 0.9817
Epoch 12/40
600/600 [==============================] - 12s - loss: 0.0836 - acc: 0.9817
Epoch 13/40
600/600 [==============================] - 12s - loss: 0.0732 - acc: 0.9883
Epoch 14/40
600/600 [==============================] - 12s - loss: 0.0687 - acc: 0.9817
Epoch 15/40
600/600 [==============================] - 12s - loss: 0.0770 - acc: 0.9817
Epoch 16/40
600/600 [==============================] - 12s - loss: 0.0592 - acc: 0.9933
Epoch 17/40
600/600 [==============================] - 11s - loss: 0.0545 - acc: 0.9900
Epoch 18/40
600/600 [==============================] - 11s - loss: 0.0475 - acc: 0.9917
Epoch 19/40
600/600 [==============================] - 11s - loss: 0.0541 - acc: 0.9867
Epoch 20/40
600/600 [==============================] - 11s - loss: 0.0564 - acc: 0.9867
Epoch 21/40
600/600 [==============================] - 11s - loss: 0.0700 - acc: 0.9783
Epoch 22/40
600/600 [==============================] - 11s - loss: 0.0428 - acc: 0.9900
Epoch 23/40
600/600 [==============================] - 12s - loss: 0.0348 - acc: 0.9917
Epoch 24/40
600/600 [==============================] - 11s - loss: 0.0347 - acc: 0.9900
Epoch 25/40
600/600 [==============================] - 11s - loss: 0.0353 - acc: 0.9933
Epoch 26/40
600/600 [==============================] - 12s - loss: 0.0307 - acc: 0.9917
Epoch 27/40
600/600 [==============================] - 12s - loss: 0.0286 - acc: 0.9950
Epoch 28/40
600/600 [==============================] - 11s - loss: 0.0313 - acc: 0.9967
Epoch 29/40
600/600 [==============================] - 11s - loss: 0.0436 - acc: 0.9883
Epoch 30/40
600/600 [==============================] - 11s - loss: 0.0303 - acc: 0.9900
Epoch 31/40
600/600 [==============================] - 12s - loss: 0.0241 - acc: 0.9983
Epoch 32/40
600/600 [==============================] - 11s - loss: 0.0246 - acc: 0.9933
Epoch 33/40
600/600 [==============================] - 11s - loss: 0.0259 - acc: 0.9950
Epoch 34/40
600/600 [==============================] - 12s - loss: 0.0293 - acc: 0.9917
Epoch 35/40
600/600 [==============================] - 12s - loss: 0.0255 - acc: 0.9900
Epoch 36/40
600/600 [==============================] - 12s - loss: 0.0200 - acc: 0.9933
Epoch 37/40
600/600 [==============================] - 12s - loss: 0.0175 - acc: 0.9983
Epoch 38/40
600/600 [==============================] - 11s - loss: 0.0187 - acc: 0.9967
Epoch 39/40
600/600 [==============================] - 11s - loss: 0.0148 - acc: 0.9983
Epoch 40/40
600/600 [==============================] - 11s - loss: 0.0174 - acc: 0.9983
150/150 [==============================] - 1s
Loss = 0.0885118440787
Test Accuracy = 0.973333330949

预测数据

 1 ### START CODE HERE ###
 2 img_path = 'images/a.jpg'
 3 ### END CODE HERE ###
 4 img = image.load_img(img_path, target_size=(64, 64))
 5 imshow(img)
 6 
 7 x = image.img_to_array(img)
 8 x = np.expand_dims(x, axis=0)
 9 x = preprocess_input(x)
10 
11 print(happy_model.predict(x))

[[ 1.]]

深度卷积网络:实例探究-week2编程题1(Keras 入门 - 笑脸识别)

打印出每一层的大小细节

print(happy_model.summary())

_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) (None, 64, 64, 3) 0
_________________________________________________________________
zero_padding2d_1 (ZeroPaddin (None, 70, 70, 3) 0
_________________________________________________________________
conv0 (Conv2D) (None, 68, 68, 32) 896
_________________________________________________________________
bn0 (BatchNormalization) (None, 68, 68, 32) 128
_________________________________________________________________
activation_1 (Activation) (None, 68, 68, 32) 0
_________________________________________________________________
max_pool (MaxPooling2D) (None, 34, 34, 32) 0
_________________________________________________________________
conv1 (Conv2D) (None, 32, 32, 16) 4624
_________________________________________________________________
activation_2 (Activation) (None, 32, 32, 16) 0
_________________________________________________________________
max_pool1 (MaxPooling2D) (None, 16, 16, 16) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 4096) 0
_________________________________________________________________
fc (Dense) (None, 1) 4097
=================================================================
Total params: 9,745
Trainable params: 9,681
Non-trainable params: 64
_________________________________________________________________
None

绘制布局图(下载、安装并配置Graphviz)

pip install pydot-ng & pip install graphviz

plot_model(happy_model, to_file='happy_model.png')
SVG(model_to_dot(happy_model).create(prog='dot', format='svg'))

深度卷积网络:实例探究-week2编程题1(Keras 入门 - 笑脸识别)


推荐阅读
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
author-avatar
545229628_efb16a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有