手写识别系统怎么安装 千彩手写识别系统( 二 )


文章插图
2.2网络模型的总体结构

手写识别系统怎么安装 千彩手写识别系统

文章插图
其实本文的网络建设是参考了TensorFlow提供的手写数字资源网络识别官方教程,有兴趣的读者可以详细浏览 。
2.3编程算法
本文利用Python调用TensorFlow的api来完成手写数字识别算法 。
注意:这个程序的运行环境是:Win10,python3.5.2,当然也可以在Linux下运行 。因为TensorFlow与py2和py3兼容性相当,所以可以在Linux下的python2.7中运行 。
#!/usr/bin/env python2
# -*-编码:utf-8 -*-
创建于Fri 2017年2月17日19:50:49
@作者:黄永浩
#导入模块
将numpy作为np导入
将matplotlib.pyplot导入为plt
将张量流导入为tf
导入时间
从日期时间导入时间增量
导入数学
来自tensorflow . examples . tutors . mnist导入输入数据
定义新权重(形状):
返回tf 。变量(tf .截断_normal(shape,stddev=0.05))
def new _ biases(长度):
返回tf 。变量(tf.constant(0.1,形状=长度))
def conv2d(x,W):
return tf.nn.conv2d(x,W,跨步=[1,1,1,1],填充= SAME)
def max_pool_2x2(输入):
返回tf.nn.max_pool(inputx,ksize=[1,2,2,1],跨步=[1,2,2,1],填充= SAME)
#导入数据
data = http://www.laomaozy.com/W-Z/input _ data.read _ data _ sets( 。/data,one_hot=True) # one_hot表示[0 0 1 0 0 0 0 0]代表2
打印(尺寸: )
打印(-训练集:\t\t{} 。格式(len(data.train.labels))
打印(- Testing-set:\t\t{} 。格式(len(data.test.labels))
打印(-验证集:\ t \ t { } & quot 。格式(len(data.validation.labels))
data . test . cls = NP . arg max(data . test . labels,axis=1) #显示真实的测试标签:[7 2 1...,4 5 6],10000个值
x = tf.placeholder( float,shape=[None,784],name= x)
x _ image = TF . resform(x,[-1,28,28,1])
y_true = tf.placeholder( float,shape=[None,10],name= y_true)
y_true_cls = tf.argmax(y_true,维度=1)
# Conv 1
layer _ conv 1 = { weights:new _ weights([5,5,1,32]),
偏差:new _ bias([32])
h _ con v1 = TF . nn . relu(con v2d(x _ image,layer_conv1[权重])+layer_conv1[偏差])
h_pool1 = max_pool_2x2(h_conv1)
# Conv 2
layer _ conv 2 = { weights:new _ weights([5,5,32,64]),
偏差:new _ bias([64])
h _ con v2 = TF . nn . relu(con v2d(h _ pool 1,layer_conv2[权重])+layer _ con v2[bias & quot;])
h_pool2 = max_pool_2x2(h_conv2)
#全连接第1层
【手写识别系统怎么安装 千彩手写识别系统】fc1 _ layer = { weights:new _ weights([7 * 7 * 64,1024]),
偏差:new _ bias([1024])
h _ pool 2 _ flat = TF . resform(h _ pool 2,[-1,7*7*64])
h _ fc1 = TF . nn . relu(TF . mat mul(h _ pool 2 _ flat,fc1 _ layer[weights])+fc1 _ layer[bias])
#导出层
keep_prob = tf.placeholder( float)
h_fc1_drop = tf.nn.dropout(h_fc1,keep_prob)
#全连接第2层
fc2 _ layer = { weights:new _ weights([1024,10]),
偏差:new_weights([10])}
#预测类
y _ pred = TF . nn . soft max(TF . matmul(h _ fc1 _ drop,fc2 _ layer[weights])+fc2 _ layer[bias])#输出类似[0 0 1 0 0 0 0 0 0 0 0]
y_pred_cls = tf.argmax(y_pred,dimension=1) #显示像2这样的真实预测数
#有待优化的成本函数
交叉熵=-TF . reduce _ mean(y _ true * TF . log(y _ pred))
optimizer = TF . train . adamotimizer(learning _ rate = 1e-4) 。最小化(交叉熵)
#绩效衡量标准
正确预测= tf.equal(y_pred_cls,y_true_cls)
精确度= tf.reduce_mean(tf.cast(正确预测,浮点))
和tf一起 。会话()作为会话:
init = TF . global _ variables _ initializer()
sess.run(init)
train_batch_size = 50
def优化(迭代次数):
total_iterations=0
start_time = time.time()
对于范围内的I(total _ iterations,total _ iterations+num _ iterations):
x_batch,y _ true _ batch = data . train . next _ batch(train _ batch _ size)
feed_dict_train_op = {x:x_batch,y_true:y_true_batch,keep_prob:0.5}
feed_dict_train = {x:x_batch,y_true:y_true_batch,keep_prob:1.0}
sess.run(优化器,feed_dict=feed_dict_train_op)
#每100次迭代打印状态 。
如果i%100==0:
#计算训练集的精确度 。
acc = sess.run(精度,feed_dict=feed_dict_train)
#要打印的消息 。
msg =优化迭代:{0: 6},训练精度:{1: 6.1%}
#打印出来 。
print(msg.format(i+1,acc))
#更新执行的迭代总数
total _ iterations+= num _ iterations
#结束时间
end_time = time.time()
#开始和结束时间之间的差异 。
时间_dif =结束时间-开始时间
#打印时间使用情况


推荐阅读