当前位置: 首页 > 编程日记 > 正文

Tensorflow学习教程------模型参数和网络结构保存且载入,输入一张手写数字图片判断是几...

首先是模型参数和网络结构的保存

#coding:utf-8
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_datamnist = input_data.read_data_sets('MNIST_data',one_hot=True)
#每个批次的大小
batch_size = 100
n_batch = mnist.train._num_examples // batch_size
#定义两个placeholder
x = tf.placeholder(tf.float32, [None,784],name='x-input' )  #模型输入的地方加名字
y = tf.placeholder(tf.float32,[None,10])
keep_prob  = tf.placeholder(tf.float32,name='keepProb')def weight_variable(shape):initial = tf.truncated_normal(shape,stddev=0.1) #生成一个截断的正态分布return tf.Variable(initial)
def bias_variable(shape):initial = tf.constant(0.1,shape = shape)return tf.Variable(initial)
#卷基层
def conv2d(x,W):return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding='SAME')
#池化层
def max_pool_2x2(x):return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')#改变x的格式转为4D的向量[batch,in_height,in_width,in_channels]
x_image = tf.reshape(x, [-1,28,28,1])#初始化第一个卷基层的权值和偏置
W_conv1 = weight_variable([5,5,1,32]) #5*5的采样窗口 32个卷积核从一个平面抽取特征 32个卷积核是自定义的
b_conv1 = bias_variable([32])  #每个卷积核一个偏置值#把x_image和权值向量进行卷积,再加上偏置值,然后应用于relu激活函数
h_conv1 = tf.nn.relu(conv2d(x_image,W_conv1)+b_conv1)
h_pool1 = max_pool_2x2(h_conv1) #进行max-pooling#初始化第二个卷基层的权值和偏置
W_conv2 = weight_variable([5,5,32,64]) # 5*5的采样窗口 64个卷积核从32个平面抽取特征  由于前一层操作得到了32个特征图
b_conv2 = bias_variable([64]) #每一个卷积核一个偏置值#把h_pool1和权值向量进行卷积 再加上偏置值 然后应用于relu激活函数
h_conv2 = tf.nn.relu(conv2d(h_pool1,W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2) #进行max-pooling#28x28的图片第一次卷积后还是28x28 第一次池化后变为14x14
#第二次卷积后 变为14x14 第二次池化后变为7x7
#通过上面操作后得到64张7x7的平面#初始化第一个全连接层的权值
W_fc1 = weight_variable([7*7*64,1024])#上一层有7*7*64个神经元,全连接层有1024个神经元
b_fc1 = bias_variable([1024]) #1024个节点#把第二个池化层的输出扁平化为一维
h_pool2_flat = tf.reshape(h_pool2,[-1,7*7*64])
#求第一个全连接层的输出
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat,W_fc1)+b_fc1)#keep_prob用来表示神经元的输出概率h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob)#初始化第二个全连接层
W_fc2 = weight_variable([1024,10])
b_fc2 = bias_variable([10])#计算输出
prediction = tf.nn.softmax(tf.matmul(h_fc1_drop,W_fc2)+b_fc2, name='output')   #模型输出的地方加名字#交叉熵代价函数
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y,logits=prediction))#使用AdamOptimizer进行优化
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
#结果存放在一个布尔列表中
correct_prediction = tf.equal(tf.argmax(prediction,1),tf.argmax(y,1)) #argmax返回一维张量中最大的值所在的位置
#求准确率
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))with tf.Session() as sess:sess.run(tf.global_variables_initializer())for epoch in range(10):for batch in range(n_batch):batch_xs,batch_ys = mnist.train.next_batch(batch_size)sess.run(train_step,feed_dict={x:batch_xs,y:batch_ys,keep_prob:0.7})acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels,keep_prob:1.0})print ("Iter "+ str(epoch) + ", Testing Accuracy= " + str(acc))#保存模型参数与网络结构output_graph_def = tf.graph_util.convert_variables_to_constants(sess,sess.graph_def,output_node_names=['output'])#保存模型到目录下的model文件夹中with tf.gfile.FastGFile('/home/bayes/mymodel.pb',mode='wb') as f:f.write(output_graph_def.SerializeToString())

结果

Iter 0, Testing Accuracy= 0.8616
Iter 1, Testing Accuracy= 0.9663
Iter 2, Testing Accuracy= 0.9776
Iter 3, Testing Accuracy= 0.9815
Iter 4, Testing Accuracy= 0.985
Iter 5, Testing Accuracy= 0.9863
Iter 6, Testing Accuracy= 0.9871
Iter 7, Testing Accuracy= 0.9895
Iter 8, Testing Accuracy= 0.9878
Iter 9, Testing Accuracy= 0.9894
Converted 8 variables to const ops.

载入模型参数与网络结构,并且预测图片

#coding:utf-8
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from PIL import Image,ImageFilter
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
#定义一个placeholder
y = tf.placeholder(tf.float32,[None,10])def imageprepare(argv): # 该函数读一张图片,处理后返回一个数组,进到网络中预测im = Image.open(argv).convert('L')width = float(im.size[0])height = float(im.size[1])newImage = Image.new('L', (28, 28), (255))  # creates white canvas of 28x28 pixelsif width > height:  # check which dimension is bigger# Width is bigger. Width becomes 20 pixels.nheight = int(round((20.0 / width * height), 0))  # resize height according to ratio widthif nheight == 0:  # rare case but minimum is 1 pixelnheight = 1# resize and sharpenimg = im.resize((20, nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)wtop = int(round(((28 - nheight) / 2), 0))  # caculate horizontal pozitionnewImage.paste(img, (4, wtop))  # paste resized image on white canvaselse:# Height is bigger. Heigth becomes 20 pixels.nwidth = int(round((20.0 / height * width), 0))  # resize width according to ratio heightif (nwidth == 0):  # rare case but minimum is 1 pixelnwidth = 1# resize and sharpenimg = im.resize((nwidth, 20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)wleft = int(round(((28 - nwidth) / 2), 0))  # caculate vertical pozitionnewImage.paste(img, (wleft, 4))  # paste resized image on white canvas# newImage.save("sample.png")
tv = list(newImage.getdata())  # get pixel values# normalize pixels to 0 and 1. 0 is pure white, 1 is pure black.tva = [(255 - x) * 1.0 / 255.0 for x in tv]return tva
#载入模型
with tf.gfile.FastGFile('/home/bayes/mymodel.pb','rb' ) as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read())tf.import_graph_def(graph_def,name='')with tf.Session() as sess:output = sess.graph.get_tensor_by_name('output:0')#结果存放在一个布尔列表中correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(output,1)) #argmax返回一维张量中最大的值所在的位置#求准确率accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))  #训练的时候加了dropout,载入模型进行预测或者计算准确率的时候一定记得也加入dropoutprint (sess.run(accuracy,feed_dict={'x-input:0':mnist.test.images, y:mnist.test.labels,'keepProb:0':1.0})) array = imageprepare('/home/bayes/logs/3.jpg') prediction = tf.argmax(output,1)finalClass = sess.run(prediction,feed_dict={'x-input:0':[array],'keepProb:0':1.0})print('The digits in this image is:%d' % finalClass)

手写数字图片3

结果

I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080 Ti, pci bus id: 0000:03:00.0)
0.9894
The digits in this image is:3

转载于:https://www.cnblogs.com/cnugis/p/7651921.html

相关文章:

IntelliJ IDEA乱码问题解决方法

目录 1、设置文件编码 2、设置控制台编码 3、设置Tomcat Server编码 4、修改配置文件编码内容 1、设置文件编码 第1步:打开IDEA,依次点击File、Settings... 打开Setting窗口; 第2步:在Settings窗口中,依次点击Ed…

Windows 7的CMD中 Telnet 无法执行的解决办法

在Windows 7的CMD中,执行telnet 192.168.1.10 80 会提示没有这个命令的提示,这是因为Win7默认是没有安装Telnet的(在以往的WINDOWS系统中都是默认安装的)。解决办法:在Win7中,进入控制面板,然后…

Qt——模态、非模态

模态: 只能操作对话框非模态:要使用 QDialog *_d new QDialog();_d->setattribute(Qt::WA_DeleteOnClose);_d->show();转载于:https://www.cnblogs.com/yangxinrui/p/10515249.html

c# 取两个时间的间隔

c#可以取两个时间的年月日时分秒之间的间隔,不受跨年月的影响。声明一个 TimeSpan System.TimeSpan ts dtNightEnd.Subtract(dtAmStart); dtNightEnd是原始时间 减去 dtAmStart 这个时间 获得一个TimeSpan TimeSpan 自带了间隔属性 ts.Days.ToString(); ts.Hours.…

MySQL数据表命令

显示表的相关信息: show table status like "表名"; show table status like "表名" \G 格式化,以记录条目形式显示,更清晰 注意:\G后面不能加分号,不然会出现查询错误。因为\G在…

undefined reference to 'pthread_create'问题解决(转)

undefined reference to pthread_createundefined reference to pthread_join问题原因:pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数…

C语言程序设计第一次作业

(一)实验总结 1.圆的面积和周长问题 (1)题目: 输入圆的半径,计算圆的周长和面积。 (2)流程图 (3)测试数据及运行结果 (4)实验分析 问题…

U盘中毒,无法删除System Volume Information文件夹

情景:U盘中毒,U盘内的文件夹名称变成.exe后缀,且多出一个名为System Volume Information的文件夹,对U盘进行格式化后,所有文件消失,当拔出U盘,再次插入电脑时,发现System Volume Inf…

用Javascript修正12个常见的浏览器问题

我们提倡尽可能使用CSS,而且我们常常能做到这一点。现代浏览器有很好的CSS支持-这无疑足够好让你使用CSS来控制布局和版面设计。但是有时候,某些网页元素在不同的浏览器会出现不同。 如果你不知道原因,不要过于担心,请研究CSS规则…

读书笔记之知识杂点

1.xx1,x1,x,哪个效率最高?为什么? xx1最低,因为它的执行过程如下: (1)读取右x的地址 (2)x1 (3)读取左x的地址 (4)将右值传给左边的x(编译器并不认为左右的x…

Codeforces.487C.Prefix Product Sequence(构造)

题目链接 \(Description\) 对于一个序列\(a_i\),定义其前缀积序列为\(a_1\ \mathbb{mod}\ n,\ (a_1a_2)\ \mathbb{mod}\ n,...,(a_1a_2...a_n)\ \mathbb{mod}\ n\)。 给定\(n\),求一个\(n\)的排列,使得该排列的前缀积序列是\([0,1,2,...,n-1]…

读取CSV文件内容,将其转换成JSON字符串输出

CsvToJsonUtil 工具类作用:读取CSV文件内容,将其转换成JSON字符串输出 转换工具类代码如下: package com.test.util;import java.io.*; import java.io.IOException;public class CsvToJsonUtil {/*** 根据文件路径读取CSV文件 返回String字…

component-scan和annotation-driven

<context:component-scan/>该xml配置作用是启动Spring的组件扫描功能&#xff0c;自动扫描base-package指定的包及其子文件下的java文件&#xff0c;如果扫描到有controller、Service、Repository、Component等注解的java类&#xff0c;就会将这些类注册为bean。指定的包…

“不亦乐乎”是“乐”还是“悦”?

看了六七年的《咬文嚼字》&#xff0c;在2009年的第一期第一次对其内容产生了巨大的质疑。这是《咬文嚼字》2009年第一期特稿&#xff1a;“《2008年十大语文差错》”&#xff0c;里面公布了《咬文嚼字》编辑部总结的2008年度十大语文差错&#xff1a;  一、“有朋自远方来&a…

mysql 数据操作 单表查询 where约束 between and or

WHERE约束 where字句中可以使用&#xff1a; 比较运算符&#xff1a;>< > < !between 80 and 100 值在80到100之间 >80 <100in(80,90,100) 值是80或90或100 满足这个条件就可以like egon%pattern可以是%或_&#xff0c;%表示任意多字符_表示一个字符…

查看计算机连接的WIFI密码

方法1&#xff1a;通过cmd命令获取 使用WinR组合键&#xff0c;打开命令提示符窗口&#xff0c;输入以下命令&#xff1a; netsh wlan show profiles WIFI名称 keyclear 或者 netsh wlan show profiles name"WIFI名称" keyclear 在输出的内容中&#xff0c;安全…

[VBScript] 自动删除2小时以前生成的文件

保存为deleteTempFiles.vbs&#xff0c;双击即可运行 dim folder, file, mFSO, subfolderSet mFSO CreateObject("Scripting.FileSystemObject") set foldermFSO.GetFolder("C:\Users\msautotestuser\AppData\Local\Temp") Delete files dim df For Each …

超市购物打印小票的简单程序 记录下来

做了2个版本的超市购物小票打印程序&#xff0c;做过记录一、C/S样图如下&#xff1a;其中 输入商品的编码 回车 将会调用该商品的信息&#xff0c;显示在下面的DataGridView中 ,DataGridView中数量是可以修改的&#xff0c;修改数量&#xff0c;下面的合计 将会自动计算 &…

Asp.net控件开发学习笔记(三)-控件开发基础

封装 在asp.net中&#xff0c;控件被分为两类.用户控件和自定义服务器控件。前者就是我们经常用来将一些可复用的内容封装成的.ascx文件。这里主要研究后者. 创建自定义服务器控件 创建自定义控件的第一步是选择以哪一个类作为基类来创建控件&#xff0c;Asp.net最常见的几个基…

Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学

题目链接 题意&#xff1a;给你三个数n,m,k;让你构造出一个nm的矩阵&#xff0c;矩阵元素只有两个值&#xff08;1&#xff0c;-1),且满足每行每列的乘积为k&#xff0c;问你多少个矩阵。 解法&#xff1a;首先&#xff0c;如果n&#xff0c;m奇偶不同&#xff0c;且k-1时&…

剑指offer三十六之两个链表的第一个公共结点

一、题目 输入两个链表&#xff0c;找出它们的第一个公共结点。 二、思路 如果存在共同节点的话&#xff0c;那么从该节点&#xff0c;两个链表之后的元素都是相同的。也就是说两个链表从尾部往前到某个点&#xff0c;节点都是一样的。我们可以用两个栈分别来装这两条链表。一个…

Oracle数据库相关命令

从cmd窗口进入SQL命令行 sqlplus / as sysdba; 查询所有用户 &#xff08;1&#xff09;使用具有DBA权限的账号登录数据库。 &#xff08;2&#xff09;执行如下命令。 SQL> select username from dba_users; -- 或者使用如下语句 SQL> select * from all_users; 创…

实时传输协议(RTP)

RTP简介 RTP是一种提供端对端传输服务的实时传输协议&#xff0c;用来支持在单目标广播和多目标广播网络服务中传输实时数据&#xff0c;而实时数据的传输则由RTCP协议来监视和控制。 RTP定义在RFC 使用RTP协议的应用程序运行在RTP之上&#xff0c;而执行RTP的程序运行在UDP…

Windows LTSC、LTSB、Server 安装 Windows Store 应用商店

下载安装包 打开网址 https://store.rg-adguard.net/ 以 PackageFamilyName 方式搜索 Microsoft.WindowsStore_8wekyb3d8bbwe 根据系统选择对应的包&#xff0c;每一种都要下载 安装 在下载目录按住 shift 键&#xff0c;然后鼠标右键&#xff0c;打开 Powershell 执行安装命令…

sybase Invalid command line argument 'and'.

解决方法&#xff1a; 先到sybase central安装目录下&#xff08;我这里是&#xff1a;C:\sybase\ASE-12_0\bin\syconfig.exe&#xff09;双击看能不能正常运行。如果可以&#xff0c;就证明是开始菜单里的“配置服务器”的快捷方式有问题&#xff1b; 然后删除开始菜单里面“配…

Jmeter调试工具---Debug Sampler

使用场景&#xff1a;脚本开发是&#xff0c;调试用&#xff08;正式测试时需删除&#xff09;&#xff0c;Debug Sampler会把我们自定义的变量输出在response data中 使用设置&#xff1a;JMeter properties和System properties通常都选false&#xff0c;这两个就是JMeter和系…

Cannot resolve method 'getParameter( )'

在JSP页面中&#xff0c;getParameter 和 setAttribute 显示红色&#xff0c;IDEA的提示信息为&#xff1a; Cannot resolve method getParameter(...) 和 Cannot resolve method setAttribute(...) 原因是缺少servlet-api.jar和jsp-api.jar这两个jar包。 将这两个jar包导入项…

产品设计体会(1011)少做就是多做

有100个需求&#xff0c;资源只够做10个&#xff0c;是的&#xff0c;当时就是这样。标题是马云的一句话。2007年国庆长假回来&#xff0c;基本在全力做网店版“批量定时上架”的需求&#xff0c;n多的pk、评审、确认会搞得头昏脑胀&#xff0c;不过终于算是把需求确认掉了。其…

socket与TcpListener/TcpClient/UdpClient 的区别及联系

点击此处下载源代码 应用程序可以通过 TCPClient、TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务。这些协议类建立在 System.Net.Sockets.Socket 类的基础之上&#xff0c;负责数据传送的细节。(也就是说TCPClient、TCPListener 和 UDP…

Sql Server 中锁的概念

锁的类型:(1) 共享锁:共享锁用于所有的只读数据操作.(2) 修改锁:修改锁在修改操作的初始化阶段用来锁定可能要被修改的资源&#xff0c;这样可以避免使用共享锁造成的死锁现象(3) 独占锁:独占锁是为修改数据而保留的。它所锁定的资源&#xff0c;其他事务不能读取也不能修改。独…