前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习|tensorflow识别手写字体

深度学习|tensorflow识别手写字体

作者头像
罗罗攀
发布2019-03-21 16:23:33
3.3K0
发布2019-03-21 16:23:33
举报

我们依旧以MNIST手写字体数据集,来看看我们如何使用tensorflow来实现MLP。

数据

数据下载

这里我们通过tensorflow的模块,来下载数据集。

代码语言:javascript
复制
import tensorflow as tf
import tensorflow.examples.tutorials.mnist.input_data as input_data
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

这样,我们就下载了数据集,这里的one_hot的意思是label为独热编码,也就是说我们的label就不需要预处理了。

数据情况

我们通过下面代码看看数据的情况:

  • 55000训练集
  • 5000验证集
  • 10000测试集

MLP模型

之前我们使用过keras进行训练,只需要建立一个model,然后add加入神经网络层。tensorflow是要复杂很多,那我们一步步构建我们的模型吧。

  • 首先是输入层,我们用placeholder来输入
  • 隐含层256个神经元
  • 输出10个神经元
代码语言:javascript
复制
def layer(output_dim,input_dim,inputs, activation=None):
    W = tf.Variable(tf.random_normal([input_dim, output_dim]))
    b = tf.Variable(tf.random_normal([1, output_dim]))
    XWb = tf.matmul(inputs, W) + b
    if activation is None:
        outputs = XWb
    else:
        outputs = activation(XWb)
    return outputs

x = tf.placeholder("float", [None, 784])

h1=layer(output_dim=256,input_dim=784,
         inputs=x ,activation=tf.nn.relu) 

y_predict=layer(output_dim=10,input_dim=256,
                    inputs=h1,activation=None)
定义损失函数

这里我们需要自己定义函数,并进行优化处理。

代码语言:javascript
复制
y_label = tf.placeholder("float", [None, 10])

loss_function = tf.reduce_mean(
                  tf.nn.softmax_cross_entropy_with_logits
                         (logits=y_predict , 
                          labels=y_label))

optimizer = tf.train.AdamOptimizer(learning_rate=0.001) \
                    .minimize(loss_function)
准确性评价
代码语言:javascript
复制
correct_prediction = tf.equal(tf.argmax(y_label  , 1),
                              tf.argmax(y_predict, 1))

accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
训练

训练我们定义15轮。

代码语言:javascript
复制
trainEpochs = 15
batchSize = 100
totalBatchs = int(mnist.train.num_examples/batchSize)
epoch_list=[];loss_list=[];accuracy_list=[]
from time import time
startTime=time()
sess = tf.Session()
sess.run(tf.global_variables_initializer())

for epoch in range(trainEpochs):
    for i in range(totalBatchs):
        batch_x, batch_y = mnist.train.next_batch(batchSize)
        sess.run(optimizer,feed_dict={x: batch_x,y_label: batch_y})
        
    loss,acc = sess.run([loss_function,accuracy],
                        feed_dict={x: mnist.validation.images, 
                                   y_label: mnist.validation.labels})

    epoch_list.append(epoch);loss_list.append(loss)
    accuracy_list.append(acc)    
    print("Train Epoch:", '%02d' % (epoch+1), "Loss=", \
                "{:.9f}".format(loss)," Accuracy=",acc)
    
duration =time()-startTime
print("Train Finished takes:",duration)  
测试加预测
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.03.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据
    • 数据下载
      • 数据情况
      • MLP模型
        • 定义损失函数
          • 准确性评价
            • 训练
              • 测试加预测
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档