前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CIFAR-10数据集 图像识别

CIFAR-10数据集 图像识别

作者头像
用户6021899
发布于 2019-12-25 06:42:15
发布于 2019-12-25 06:42:15
1.3K00
代码可运行
举报
运行总次数:0
代码可运行

之前我是在CPU上跑Tensorflow,计算速度着实让人捉急。最近更新了显卡驱动,安装了CUDA和 GPU版的TensorFlow,同样的神经网络结构,学习速度有了百倍提升。

下面言归正传,我们来讲代码。本篇我们还是用序列化的(串行的)卷积神经网络,基于CIFAR-10数据集创建图像识别模型。由于我的GTX750Ti连入门级显卡都算不上,因此仅仅用了3个卷积层+1个池化层+两个全连接层(中间还加了两个Dropout以避免过拟合)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""
Created on Tue Dec 10 20:04:58 2019
@author: wsp
Tensorflow version:2.0
Python version 3.7
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
from load_dataset import train_dataset, train_labels, valid_dataset, valid_labels
from matplotlib import pyplot as plt

cifar10 = tf.keras.datasets.cifar10
#(x_train, y_train), (x_test, y_test) = cifar10.load_data() #从网络下载数据集
x_train, y_train = train_dataset, train_labels
x_test, y_test= valid_dataset, valid_labels
x_train, x_test = x_train / 255.0, x_test / 255.0

tf.keras.models.Sequential()用于创建序列化的神经网络模型。

tf.keras.layers.Flatten() 用于将tensor展平,展平后才能做全连接层的input。

tf.keras.layers.Dense()用于创建全连接层。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model = tf.keras.models.Sequential([
  tf.keras.layers.Conv2D(input_shape=(32,32,3),filters= 16,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  tf.keras.layers.Conv2D(filters= 32,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  tf.keras.layers.Conv2D(filters= 64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'), 
  tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(1,1)),
  tf.keras.layers.Dropout(0.25),

  #tf.keras.layers.Conv2D(filters= 32,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  #tf.keras.layers.Conv2D(filters= 64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  #tf.keras.layers.Conv2D(filters= 64,kernel_size=(3,3),strides=(1,1),padding='same',activation='relu'),
  #tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(1,1)),
  #tf.keras.layers.Dropout(0.25),

  tf.keras.layers.Flatten(),
  tf.keras.layers.Dense(500, activation='relu'),
  tf.keras.layers.Dropout(0.25),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile()用于配置模型的训练流程。tf.keras.Model.compile 采用三个重要参数:

  • optimizer:此对象会指定训练过程。从tf.train模块向其传递优化器实例,例如AdamOptimizer、RMSPropOptimizer或GradientDescentOptimizer。
  • loss:要在优化期间最小化的函数。常见选择包括均方误差(mse)、categorical_crossentropy 和 binary_crossentropy。损失函数由名称或通过从 tf.keras.losses 模块传递可调用对象来指定。
  • metrics:用于监控训练。它们是 tf.keras.metrics 模块中的字符串名称或可调用对象。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

tf.keras.Model.fit()进行测试试数据与模型的拟合

model.fit(data,labels,epochs=20,batch_size=500,validation_data=(val_data, val_labels))

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
history = model.fit(x_train, y_train, epochs=50) # 训练50

tf.keras.Model.evaluate() 用于评估模型

verbose:日志显示 verbose = 0 为不在标准输出流输出日志信息 verbose = 1 为输出进度条记录 verbose = 2 为每个epoch输出一行记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.evaluate(x_test,  y_test, verbose=2)

保存模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
model.save('my_cifar10_model.h5')

下面这段的作用仅仅是绘制出Loss和预测准确度曲线:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.subplot(121)
accuracy = history.history['accuracy']
plt.plot(range(1,len(accuracy)+1), accuracy)
#plt.plot(history.history['val_acc'])
plt.title('train set accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.subplot(122)
plt.plot(range(1,len(accuracy)+1), history.history['loss'])
#plt.plot(history.history['val_acc'])
plt.title('train set loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

可以看出,训练完后模型在验证集上的预测准确度高达98%。

下面我们可以使用已经保存好的模型来预测从网上下载的图片的分类:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding: utf-8 -*-
"""

@author: wsp
"""
from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf
#from load_dataset import train_dataset, train_labels, valid_dataset, valid_labels,names
from matplotlib import pyplot as plt
#x_train, y_train = train_dataset, train_labels
#x_test, y_test= valid_dataset, valid_labels
#x_train, x_test = x_train / 255.0, x_test / 255.0

#加载模型
new_model = tf.keras.models.load_model('my_cifar10_model.h5')
#利用加载后的模型对整个验证集做预测
#预测一组样本
#y_ = new_model.predict(x_test) 
#result = tf.argmax(y_, 1) #
#print(result)
#for i in range(5):
    #index = int(result[i])
    #print("验证集第%d张图片的分类索引是 %d:"% (i, index))
    #print("分类名称是:%s "% names[index])
#print()

#预测单张图片
def resize(img_path): 
    '''将图片resize为 32x32x3'''
    image = plt.imread(img_path)
    resized = tf.image.resize(image,[32,32],method='bilinear')
    #return tf.cast(resized, tf.uint8)
    return resized
 
from load_dataset import names
my_img = resize('4.jpg')/255.0 #要符合xinput的格式
my_input = tf.reshape(my_img,(1,32,32,3))
result = tf.argmax(new_model.predict(my_input) , 1)
print("分类名称是:%s "% names[int(result[0])])

分类名称是:b'bird'

分类名称是:b'horse'

分类名称是:b'cat'

还行!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
msfconsole是什么意思_msfconsole渗透手机
以社工等方法获取到xp主机的shell 通过metasploit会话,使用Windows xp靶机作为跳板,扫描和攻击内部网络主机
全栈程序员站长
2022/10/29
5870
msfconsole是什么意思_msfconsole渗透手机
一次实战内网漫游
本人喜欢在各大群里吹牛X,突然看到有人问3389端口怎么转发,卧槽搞事情,连忙加上好友怕装X赶不上热乎,从此刻开始了一次内网漫游。
重生信息安全
2020/04/26
1.8K0
一次实战内网漫游
内网渗透-代理篇
利用代理工具将内网的流量代理到本地进行访问,这样就可以对内网进行下一步渗透,同时也可以利用代理工具将其他网段的流量转发到本地进行纵向渗透。代理的本质是Socks协议(防火墙安全会话转换协议),工作在OSI参考模型的第5层(会话层)。使用TCP协议传输数据,因而不提供如传递ICMP信息之类的网络层相关服务。目前支持SOCKS4和SOCKS5两个版本:
Power7089
2021/05/27
5.1K0
红蓝对抗 | 内网渗透实战技巧
本文章是关于内网方面渗透技巧的一个文章,用的环境是VulnStack1,VulnStack是红日安全团队出的一个内网渗透的靶机环境,感谢红日团队
天钧
2020/03/12
2K0
KALI 内网渗透记录
虚拟机 KALI: 192.168.180.128 目标机器: 192.168.1.52
院长技术
2020/08/19
2.9K0
使用msf入侵多层级网络架构
假设,有一个多层网络环境,每层靶机只与相邻服务器互通,那么,如何从Hack的笔记本层层突破,获取到第4层靶机Server5的系统权限呢?
Bypass
2020/06/04
9910
史上最强内网渗透知识点总结
文章内容没谈 snmp 利用,可以去乌云等社区获取,没有后续内网持久化,日志处理等内容。
信安之路
2018/08/08
9.2K0
小白入门学习内网之横向渗透攻击流程
这里有绝对路径的情况下,可直接写入webshell。这里使用sqlmap os-shell的功能
Power7089
2020/05/25
3.2K1
小白入门学习内网之横向渗透攻击流程
Vulnstack1 - 内网部分
漏洞环境为ATT&CK实战系列——红队实战(一),主要记录拿到Shell后再反弹MSF Shell、Mimikatz抓取密码以及登录域控等内网部分。前面漏洞环境搭建及打点等不作记录,可查看参考文章。 环境 Kali:192.168.8.128,攻击机 Win7: Web服务器,192.168.8.129 域用户stu1.god.org,192.168.52.143 Win2003:域控制器owa.god.org,192.168.52.138 反弹Shell 攻击机制作木马文件,实际环境中需做免杀 $ ms
Naraku
2021/07/29
7780
Vulnstack1 - 内网部分
工具的使用 | Metasploit Framework(MSF)的使用
Metasploit Framework(MSF)是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。
谢公子
2022/01/13
2.5K0
工具的使用 | Metasploit Framework(MSF)的使用
实战 | 记一次站库分离的内网渗透
WEB服务器,但是首页只有一个IIS 7的欢迎界面,所以先看一下端口顺便扫个目录。
HACK学习
2021/04/26
2.5K1
实战 | 记一次站库分离的内网渗透
Linux内网渗透
能够成功地通过web漏洞获取到webshell,对于一次完整的渗透测试来说,仅仅相当于万里长征的第一步。并不是所有渗透测试都会遇到几百台机器的大内网。
HACK学习
2019/08/07
7K0
浅谈MSF渗透测试
在渗透过程中,MSF漏洞利用神器是不可或缺的。更何况它是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。是信息收集、漏洞扫描、权限提升、内网渗透等集成的工具。
顾翔
2019/12/12
1.1K0
浅谈MSF渗透测试
一次简单的内网渗透靶场练习
当开启general log为on时,所执行的sql语句都会出现在stu1.log文件中。那么,如果修改generallogfile的值,那么所执行的sql语句就会对应生成对应的文件中,进而getshell。所以为了get shell,我们将general log设为on,将general log file设为C:/phpStudy/WWW/test.php
HACK学习
2020/11/03
2.1K0
一次简单的内网渗透靶场练习
浅谈MSF渗透测试
在渗透过程中,MSF漏洞利用神器是不可或缺的。更何况它是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。是信息收集、漏洞扫描、权限提升、内网渗透等集成的工具。
FB客服
2019/08/20
1.6K0
学习之详细说说MSF渗透测试
在渗透过程中,MSF漏洞利用神器是不可或缺的。更何况它是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。是信息收集、漏洞扫描、权限提升、内网渗透等集成的工具。
TRY博客-简单的网络技术
2022/07/18
1.7K0
学习之详细说说MSF渗透测试
内网渗透的一次记录
‍‍‍ ‍‍在对目标进行渗透‍‍时‍,一般‍情况下,我们首先获得对方‍服务器的webshell或者反弹shell,如果权限比较低,则需要进行权限提升;后续再对目标服务器进行进一步的权限控制。‍‍比如布置后门、‍跳板、‍‍维持权限等‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍‍;我这就简单的就靶机演示一下内网的渗透。
洛米唯熊
2019/08/05
1K0
内网渗透的一次记录
实战中内网穿透的打法
在内网渗透时,一个WebShell或CobaltStrike、Metasploit上线等,只是开端,更多是要内网横向移动,扩大战果,打到核心区域。但后渗透的前提是需要搭建一条通向内网的“专属通道”,才能进一步攻击。可实战中因为网络环境不同,所利用的方式就不同。
洛米唯熊
2020/04/29
2.7K0
实战中内网穿透的打法
记一次内网渗透靶场学习
首先nmap扫描一下端口发现了1433端口判断是sql server,另外一个特征端口就是7001端口,判断为weblogic端口
红队蓝军
2022/05/17
3340
记一次内网渗透靶场学习
内网靶场实战——ATT&CK实战系列(一)
靶场地址http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 下载过文件后,需配置如下两个虚拟网络(一个内网,一个外网)
用户9691112
2023/05/18
7510
内网靶场实战——ATT&CK实战系列(一)
相关推荐
msfconsole是什么意思_msfconsole渗透手机
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档