Keras利用卷积神经网络玛丽莲梦露与爱因斯坦的识别Part1

目的
突发奇想想会认为下面这张图片究竟是玛丽莲梦露还是爱因斯坦,主要目的顺便实践练习《Python深度学习》书中的例子,只采用了很小批量的数据,也没有深究如何提高正确率,解决过拟合的问题。详细可以参见《python深度学习》第五章前两节。

在这里插入图片描述
数据准备

从百度图片中找到了风格各异的爱因斯坦的图片,直接采用下载整个网页的方式获取图片。选的量不多,100张作为训练,25张用于验证。本来是留有测试的数据,不小心删掉了就跳过在新数据上测试的步骤。(数据量太小也是一个严重的问题)
手动删掉一些不合适的图片,分别放到train和validation文件夹下的E,M两个文件中。

在这里插入图片描述

在这里插入图片描述

构建网络
建立序列模型,采用这个网络是因为之前在一个SAR图像的识别中表现优异,预测准确率达到96%以上(尽管并不能说明它在区分爱因斯坦和玛丽莲梦露也能表现得很好)

import os
from keras import layers
from keras import models
model = models.Sequential()
model.add(layers.Conv2D(64, (3, 3), activation='relu',input_shape=(88, 88,3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 86, 86, 64)        1792      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 43, 43, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 41, 41, 64)        36928     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 20, 20, 64)        0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 18, 18, 128)       73856     
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 9, 9, 128)         0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 7, 7, 128)         147584    
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 3, 3, 128)         0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 1152)              0         
_________________________________________________________________
dropout_1 (Dropout)          (None, 1152)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 512)               590336    
_________________________________________________________________
dropout_2 (Dropout)          (None, 512)               0         
_________________________________________________________________
dense_2 (Dense)              (None, 512)               262656    
_________________________________________________________________
dense_3 (Dense)              (None, 1)                 513       
=================================================================
Total params: 1,113,665
Trainable params: 1,113,665
Non-trainable params: 0

读入图片并训练

base_dir = r'dir\Einstein'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'v')from keras import optimizers
model.compile(loss='binary_crossentropy',optimizer=optimizers.RMSprop(lr=1e-4),metrics=['acc'])from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1. / 255)
test_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory(train_dir,target_size=(88,88),batch_size=20,class_mode='binary')validation_generator = test_datagen.flow_from_directory(validation_dir,target_size=(88, 88),batch_size=20,class_mode='binary')
history = model.fit_generator(train_generator,steps_per_epoch=128,epochs=20,validation_data=validation_generator,validation_steps=50)#保存模型
model.save('EM.h5')

训练结果
绘制性能曲线

import matplotlib.pyplot as pltacc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()

在这里插入图片描述
在这里插入图片描述l最终结果:
oss: 0.0050 - acc: 0.9996 -
val_loss: 2.4635 - val_acc: 0.6614
结果显然过拟合了,预测的正确率只有66%。但不妨碍用于用的预测。
预测

from keras.preprocessing import image
import matplotlib.image as mpimg
from keras import models
import numpy as np
img = image.load_img(r'dir\Einstein\EM.jpg',target_size=(88,88,3))
img = np.array(img)
img = img/255
model = models.load_model(r'dir\Einstein\EM.h5')
img = img.reshape(1,88,88,3)
pre = model.predict(img)
print('预测结果:',pre)预测结果: [[0.00376787]]

Keras添加的标签是E(爱因斯坦)文件夹中的为0,M(玛丽莲梦露)为1。通过网络最后的sigmoid单元,输出值为0.00376787,这个神经网络十分倾向于认为这张图片是爱因斯坦。

尝试了很多种不同的结构(数据量小训练也很快),验证集的正确率一直在70%左右,仅有一次认为该图片是玛丽莲梦露,其余结果都认为这张图片是爱因斯坦。

结论
在搭建的这样的简单的网络下,更倾向于认为这种图片里的人是爱因斯坦。

不足之处

  • 样本太少
  • 过拟合,验证集的识别正确率不高

参考资料
《python深度学习》

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

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

相关文章

玛丽莲·梦露从未公开的照片

世界著名的摄影师伊夫 阿诺德最近将几张玛丽莲梦露从未公开的照片限量分发给了英国几个选定的画廊。 已经94岁高龄的阿诺德当年与梦露建立了互相信任的关系,拍了许多反映梦露私秘生活的照片,但她很少将这些照片公之于众,借助曝露名人的隐私来…

定制化需求|一个人工智能大模型应用的算力成本有多高?

“ 人工智能的核心是算力。” 01 — 需要多少预算? 最近在学习大模型ChatGPT、ChatGLM,研究结合企业的应用场景,解决一些业务难点、痛点,不免涉及本地化部署、微调、训练、知识库文档数据提取等等方面的问题。‍‍‍‍ 同时还需要…

一键在线生成朋友圈转发点赞截图教程

1.我们首先打开朋友圈转发截图生成工具网站:https://oss.361s.cn/tool/pyq/ 2.输入自己的微信昵称,上传头像,撰写文本等等,自定义设置完成之后点击生成即可获得你想要的朋友圈截图。 3.点击保存即可完成全部流程。 本文转载自…

朋友圈转发截图生成工具HTML源码

正文: 朋友圈转发截图生成工具HTML源码,微信朋友圈截图模拟器源码,微信朋友圈装逼生成器大全,上传服务器即可使用,装逼必备,有条件的可以打包成AP。 下载方式: lanzou.com/iXBIb033ddgj

朋友圈转发截图生成工具源码

微信朋友圈截图模拟器源码,微信朋友圈装逼生成器大全,上传服务器即可使用!装逼必备!有条件的可以打包成APP 图片: 学习资料地址:朋友圈转发截图生成工具源码.zip - 蓝奏云

用itchat爬取朋友圈好友信息

用itchat爬取微信好友基本信息 Python有一个好玩的软件包itchat,提供了一个微信api接口,借此可以爬取朋友圈的一些基本信息,下面我们一起来玩玩吧。 import itchat import numpy as np import pandas as pd from collections import defaul…

微信转发指定的图文消息到朋友圈(JAVA版)

微信转发图文消息步骤 微信转发图文消息步骤 需求获取凭证 获取aceess_token获取jsapi_ticket缓存获取的jsapi_ticket代码 config接口注入权限 引入js文件微信权限注入接口 JS-SDK分享接口调用总结温馨提示 需求 当用户购买成功一样产品,为了使用户能够二次消费&a…

生成朋友圈转发点赞截图的小工具

当当当当!开工大吉! 新春虎年的第一个工作日,相信有不少的小伙伴跟TJ君一样,斗志满满的开始了新一年的工作之旅。 也肯定有不少的小伙伴还在休假,享受一年难得的相聚。 那么春节期间,大家都去了什么好玩的地…

微信截图不能截微信界面

有时候,大家用电脑微信快捷键 Alt A 时,不能截取 微信窗口 界面。 大家可能很迷茫,不要慌,so easy,一招搞定 1:点击微信聊天界面 小剪刀 2: 取消 截图时隐藏当前窗口 大功告成。

kafka消费指定每次最大消费消息数量 max.poll.records

一个属于new consumer的配置项,出现在0.10及其以上版本中。 #一次调用poll()操作时返回的最大记录数,默认值为500 spring.kafka.consumer.max-poll-records; Properties properties new Properties();properties.put("max.poll.records",2);…

Kafka 消费者读取数据

更多内容,前往 IT-BLOG 消费者不需要自行管理 offset(分组topic分区),系统通过 broker 将 offset 存放在本地。低版本通过 zk 自行管理。系统自行管理分区和副本情况。消费者断线后会自动根据上一次记录的 offset 去获取数据&…

Kafka消费异常处理

异常 org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the …

账户系统,余额与体现

参考连接: https://blog.pingxx.com/2018/02/27/用户账户系统该怎么用?/ 账户体系的建立实际上是将结清算分开(即实时清算/定时结算)利于更复杂的支付业务(如分账/层级分润等): 建立账户体系时要根据业务需求考虑各种账户(如余额账户/冻结资金账户/红包账户(不能提现但是能…

微信支付成功,如何刷新用户当前页面的余额

本项目中,使用微信支付,支付成功后,弹出提示框,并且目的是改变当前用户的余额。。。我们在互动直播项目中发现 ,然而事情并没有那么简单。 代码如下: 我们知道,应该在appdelegate中调用微信支…

开源趣事~ 记给 OpenHarmony 提 PR 的那些事

大家好哇,许久不见,也感谢大家这么久一直以来的关注,也感谢在短视频盛行的今天,你们还能静下心来坚守文字的阵地。 说到这次的主题,参加鸿蒙项目的开源,也是小编第一次拥抱开源,就像是别人有困…

基于大规模边缘计算的千万级聊天室技术实践

在技术的迭代更新下,面对大型、超大型的直播场景,大规模边缘聊天室成为新热潮。 作者 | 张超 责编 | 王子彧 出品 | CSDN(ID:CSDNnews) 当前直播成为一种流行趋势,带货直播,网红带货&#…

JavaScript成功背后的四个关键人物!

前言:JavaScript能如此成功,至少有四位关键人物: 1. JavaScript作者Brendan Eich 2. JSLint,JSON作者Douglas Crockford 3. jQuery作者John Resig 4. Node.js作者Ryan Dahl。 Brendan Eich以及JavaScript的发明过程大家已经非常熟…

爬虫教程( 3 ) --- 手机 APP 数据抓取

1. Fiddler 设置 这是使用 fiddler 进行手机 app 的抓包,也可以使用 Charles,burpSuite 等。。。 电脑安装 Fiddler,手机 和 安装 fiddler 的电脑处于同一个网络里, 否则手机不能把 HTTP 发送到 Fiddler 的机器上来。 配置 Fiddle…

以某乎为实战案例,教你用Python爬取手机App数据

1 前言 最近爬取的数据都是网页端,今天来教大家如何爬取手机端app数据(本文以ios苹果手机为例,其实安卓跟ios差不多)! 本文将以『某乎』为实战案例,手把手教你从配置到代码一步一步的爬取App数据&#xff0…

利用Python爬虫抓取手机APP的传输数据

大多数APP里面返回的是json格式数据,或者一堆加密过的数据 。这里以超级课程表APP为例,抓取超级课程表里用户发的话题。 1、抓取APP数据包 表单: 表单中包括了用户名和密码,当然都是加密过了的,还有一个设备信息&am…