吴恩达作业10:用卷积神经网络识别人脸happy(基于Keras)

数据集提供的代码放在kt_utils.py:

import keras.backend as K
import math
import numpy as np
import h5py
import matplotlib.pyplot as pltdef 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 featurestrain_set_y_orig = np.array(train_dataset["train_set_y"][:]) # your train set labels#print(train_set_x_orig.shape) ##(600, 64, 64, 3)#print(train_set_y_orig)##(600,)test_dataset = h5py.File('datasets/test_happy.h5', "r")test_set_x_orig = np.array(test_dataset["test_set_x"][:]) # your test set featurestest_set_y_orig = np.array(test_dataset["test_set_y"][:]) # your test set labels#print(test_set_x_orig.shape)#(150, 64, 64, 3)#print(test_set_y_orig.shape)#(150,)classes = np.array(test_dataset["list_classes"][:]) # the list of classes#print(classes) #[0,1]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]))#print(train_set_y_orig.shape)  (1, 600)#print(test_set_y_orig.shape)   (1, 150)return train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes
#load_dataset()

查看数据集:

import kt_utils
import cv2
import matplotlib.pyplot as plt
train_set_x_orig, train_set_Y, test_set_x_orig, test_set_Y, classes = kt_utils.load_dataset()
print('训练样本={}'.format(train_set_x_orig.shape))
print('训练样本标签={}'.format(train_set_Y.shape))
print('测试样本={}'.format(test_set_x_orig.shape))
print('测试样本标签={}'.format(test_set_Y.shape))
print('第五个样本={}'.format(train_set_Y[0,5]))
cv2.imshow('1.jpg',train_set_x_orig[5,:,:,:])
cv2.waitKey()
print('第六个样本={}'.format(train_set_Y[0,6]))
cv2.imshow('1.jpg',train_set_x_orig[6,:,:,:])
cv2.waitKey()
# plt.imshow(train_set_x_orig[5,:,:,:])
# plt.show()

打印结果:可看出600个训练样本,150个测试样本,size=(64,64,3),其中happy的标签为1,not happy的标签为0,故标签也要经过one-hot。

开始训练模型代码如下:

import numpy as np
import matplotlib.pyplot as plt
from keras.models import Model
from keras.layers import Input,ZeroPadding2D,Conv2D,BatchNormalization,Activation,MaxPooling2D
from keras.layers import Flatten,Dense
import kt_utils
from keras.preprocessing import image
from keras.applications.imagenet_utils import preprocess_input
from keras.utils import plot_model
from IPython.display import SVG
from keras.utils.vis_utils import model_to_dot
import time
import cv2
"""
转换成one-hot
"""
def convert_to_one_hot(Y, C):Y = np.eye(C)[Y.reshape(-1)].Treturn Y
"""
获取数据  并将标签转换成one-hot
"""
def convert_data():train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes=kt_utils.load_dataset()train_x=train_set_x_orig/255test_x = test_set_x_orig / 255train_y=convert_to_one_hot(train_set_y_orig,2).Ttest_y = convert_to_one_hot(test_set_y_orig, 2).T#print(train_y.shape)return train_x,train_y,test_x,test_y
"""
查看样本
"""
def test():train_set_x_orig, train_set_y_orig, test_set_x_orig, test_set_y_orig, classes=kt_utils.load_dataset()X_train=train_set_x_orig/255X_test = test_set_x_orig / 255Y_train=train_set_y_orig.TY_test = test_set_y_orig.Tplt.imshow(train_set_x_orig[63,:,:,:])plt.show()
"""
构建CNN模型
"""
def model(input_shape):X_input=Input(input_shape)print('输入尺寸={}'.format(X_input.shape))#Zero paddingX=ZeroPadding2D((3,3))(X_input)print('输补完零尺寸={}'.format(X.shape))#CONV->BN->RELUX=Conv2D(32,(7,7),strides=(1,1),name='conv0')(X)print('第一次卷积尺寸={}'.format(X.shape))X=BatchNormalization(axis=-1,name='bn0')(X)X=Activation('relu')(X)#MAXPOOLX=MaxPooling2D((2,2),name='max_pool')(X)print('第一池化尺寸={}'.format(X.shape))#FLATTEN+FULLYCONNECTEDX=Flatten()(X)X=Dense(2,activation='sigmoid',name='fc')(X)model=Model(inputs=X_input,outputs=X,name='HappyModel')return model
"""
测试模型
"""
def testModel():train_x, train_y, test_x, test_y=convert_data()#定义好模型结构happyModel=model(input_shape=[64,64,3])#模型编译happyModel.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])#模型训练start_time=time.time()print('============模型开始训练=====================')happyModel.fit(x=train_x,y=train_y,epochs=1,batch_size=32)end_time=time.time()print('train_time={}'.format(end_time-start_time))# save the model#happyModel.save('my_model_v1.h5')print('============模型开始测试=====================')preds=happyModel.evaluate(x=test_x,y=test_y,batch_size=32)print()print('loss={}'.format(preds[0]))print('Test accuarcy={}'.format(preds[1]))#打印参数happyModel.summary()#可视化模型plot_model(happyModel,to_file='HappyModel.png')SVG(model_to_dot(happyModel).create(prog='dot',format='svg'))#test my_imageprint('============测试自己的照片===================')path = 'images/my_image.jpg'img = image.load_img(path, target_size=(64, 64))plt.imshow(img)plt.show()x = image.img_to_array(img)  # (64,64,3)x = x.reshape(1, 64, 64, 3)x=preprocess_input(x)y=happyModel.predict(x)print('预测值={}'.format(y))
def testPicture():# img=cv2.imread('my_image.jpg')# cv2.imshow('img',img)path='images/my_image.jpg'img=image.load_img(path,target_size=(64,64))plt.imshow(img)plt.show()print('img=',img)x=image.img_to_array(img)#(64,64,3)print('x=',x)print(x.shape)#x = np.expand_dims(x, axis=0)#(1,64,64,3)x=x.reshape(64,64,3)print('x=',x)print(x.shape)plt.imshow(x)plt.show()
if __name__=='__main__':#test()testModel()#testPicture()

打印结果:?号代表样本数,可知池化过后尺寸为(32,32,32)

训练次数是一次,结果如下:可知每张图片训练时间为17ms,600张时间为10s,跟自己记录的train_time差一点点,因为还有别的开支。

测试结果:测试精度一般

打印出模型参数,并且可视化:可看成conv0参数=7×7×3×32(W的参数)+32(b的参数)=4736

测试自己的照片:

打印结果:貌似是happy 貌似又不是 样本量少 加上训练次数少 肯定是不准的。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清华大学:智能驾驶背景下转向系统发展趋势

来源:智车科技这里近几年,自动驾驶汽车的研发与推广发展迅速,根据国家工业和信息化部等发布的《汽车产业中长期发展规划》,2025 年,高度和完全自动驾驶汽车开始进入市场,在此背景下,线控转向技术…

TensorFlow学习之——checkpoints

在看别人的训练网络中一开头就遇到这样一行代码: ckpt tf.train.get_checkpoint_state(directories.checkpoints) 鼠标放在函数名上,ctrlB,或者ctrl点击函数名,可以跳转到函数的定义,可以知道tf.train.get_checkpoi…

jQuery.ajax

(摘录)http://www.cnblogs.com/XuebinDing/archive/2012/03/01/2376041.html 情况一、使用WebService验证 1.新建demo.aspx页面。2.首先在该页面的后台文件demos.aspx.cs中添加引用。 using System.Web.Services; 3.无参数的方法调用. 大家注意了,这个版本不能低于.…

基于Keras的卷积神经网络用于猫狗分类(未进行数据增强)+卷积层可视化

首先看数据集路径: cats和dogs存放的就是各种大小的猫狗图片。 读取数据集代码: import os import matplotlib.pyplot as plt """ 读取数据 返回数据的文件夹名字,和具体的猫狗的路径 """ def read_data(): …

芯片植入:“增强人类”的生物黑科技

来源:资本实验室摘要:当医疗、电子、生物科技快速发展,并紧密融合的时候,许多科幻电影中的场景正在不断变为现实,而“增强人类”、”赛博格“、“电子人”、“生化人”正在成为这个时代最值得期待,又多少让…

如何通过VC的 CHttpFile 抓取网页内容

在点击一个按钮时开始请求你输入的地址。void CHttpFileDlg::OnButton1() {   CString url;   GetDlgItemText(IDC_EDIT1,url); // IDC_EDIT1 是一个输入框的名字。   char* headers"Accept:*/*\r\nAccept-Language:zh-cn\r\nUser-Agent:VCTestClient\r\n"; …

windows安装ubuntu16.04LTS 更换系统源为阿里源 安装ubuntu找不到windows 删除内核 更换pip源 升级pip源报错 ubuntu命令

一,安装ubuntu ubuntu镜像Index of /ubuntu-releases/18.04/ 首先在windows下硬盘划分出100G的空间,并且制作一个ubuntu的启动盘。在windows安装easy BCD用于开机启动ubuntu。下面看安装过程: 选择语言,我选择是英语 我选择的是…

基本系统部署完成!北斗三号闪耀中国智慧

▲ 第四十二、四十三颗北斗导航卫星乘长三乙火箭升空来源:航天501部2018年11月19日,第四十二、四十三颗北斗导航卫星在西昌卫星发射中心腾空而起。作为北斗三号第十八颗、第十九颗卫星,此次双星的成功发射,标志着北斗三号全球组网…

基于Keras的卷积神经网络用于猫狗分类(进行了数据增强)+卷积层可视化

接着我上一篇博客,https://blog.csdn.net/fanzonghao/article/details/81149153。 在上一篇基础上对数据集进行数据增强。函数如下: """ 查看图像增强是否发生作用 """ def see_pic_aug():train_datagen ImageDataGene…

深圳神经科学研究院院长谭力海: AI取代人脑? 不, 必须向人脑“学习”!

来源:读创科技摘要:从“深蓝”到“阿尔法狗”,人工智能技术日益成熟,“AI何时替代人脑”的争论也在不断升级。人工智能真的能超越人脑吗?11月15日在高交会“颠覆性创新技术”主题论坛上,深圳神经科学研究院…

好的PPT——准备工作

首先介绍PPT的一些基本技巧。 在选项界面,我们需要调整一些选项:控制最大可回退次数;语法自动检查;字体嵌入PPT,调整自动保存的时间间隔。 对于一些常用操作,可以右键添加到常用工具栏。 可以很方便地调整不…

ubuntu安装谷歌浏览器 typora+出现编码错误‘ascii‘ codec can‘t encode character ‘\u6b66‘+docker里安装tensorrt报错

一.首先下载谷歌浏览器 https://www.google.cn/chrome/ sudo dpkg -i google-chrome-stable_current_amd64.deb 就安装好了,search谷歌浏览器就可以啦。 二,安装typora # optional, but recommendedsudo apt-key adv --keyserver keyserver.ubuntu.com --recv-ke…

中国安防为何世界最强?中科院AI+安防报告,解密8大趋势和8大限制【附下载】| 智东西内参...

来源:智东西传统的安防企业、新兴的 AI 初创企业,开始积极从技术各个维度拥抱人工智能,在模式识别基础理论、图像处理、计算机视觉以及语音信息处理展开了集中研究与持续创新,探索模式识别机理以及有效计算方法,为解决…

利用Inception-V3训练的权重微调,实现猫狗分类(基于keras)

利用Inception-V3训练的权重微调实现猫狗的分类,其中权重的下载在我的博客下载资源处,https://download.csdn.net/download/fanzonghao/10566634 第一种权重不改变直接用mixed7层(mixed7呆会把打印结果一放就知道了)进行特征提取…

刘锋:互联网左右大脑结构与钱学森开放复杂巨系统

作者:刘锋 互联网进化论作者 计算机博士前言:1990年,钱学森提出了开放的复杂巨系统理论,并提出以人为主,人机结合,从定性到定量的综合集成研究方法,他也预见性的提出“因特网正好生动地体现了…

手写字母数据集转换为.pickle文件

首先是数据集,我上传了相关的资源,https://download.csdn.net/download/fanzonghao/10566701 转换代码如下: import numpy as np import os import matplotlib.pyplot as plt import matplotlib.image as mpig import imageio import pickle…

一文看懂谷歌的AI芯片布局,边缘端TPU将大发神威

来源:新电子2018年7月Google在其云端服务年会Google Cloud Next上正式发表其边缘(Edge)技术,与另两家国际公有云服务大厂Amazon/AWS、Microsoft Azure相比,Google对于边缘技术已属较晚表态、较晚布局者,但其技术主张却与前两业者有…

opencv图像处理中的一些滤波器+利用滤波器提取条形码(解析二维码)+公交卡倾斜矫正+物体尺寸丈量

一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像中的细节信息也主要集中在其高频部分,因此,如何去掉高频干扰同时又保持细节信息是关键。为了去除噪声,有必要对图像进行平滑,可以采用低通滤波的方法去除高频干扰。图像平滑包括空域法和频域法两大…

智联汽车:复盘国内巨头布局

来源:申万宏源摘要:从今年阿里9月云栖大会、华为10月全联接大会、百度11月世界大会、腾讯11月合作伙伴大会可以发现BATH均高调展示了各自在汽车科技领域的研发成果;而京东、滴滴两家公司近两年来关于汽车科技领域的动态亦在频频更新。▌车联网:车载OS竞争…

Tomcat基础教程(一)

Tomcat, 是Servlet和JSP容器,其是实现了JSP规范的servlet容器。它在servlet生命周期内包容,装载,运行,和停止servlet容器。 Servlet容器的三种工作模式: 1. 独立的Servlet容器 Servlet容器与基于JAVA技术的Web服务器集…