TensorFlow MNIST手写数据集的实现方法
MNIST数据集介绍
MNIST数据集中包含了各种各样的手写数字图片,数据集的官网是:http://yann.lecun.com/exdb/mnist/index.html,我们可以从这里下载数据集。使用如下的代码对数据集进行加载:
fromtensorflow.examples.tutorials.mnistimportinput_data mnist=input_data.read_data_sets('MNIST_data',one_hot=True)
运行上述代码会自动下载数据集并将文件解压在MNIST_data文件夹下面。代码中的one_hot=True,表示将样本的标签转化为one_hot编码。
MNIST数据集中的图片是28*28的,每张图被转化为一个行向量,长度是28*28=784,每一个值代表一个像素点。数据集中共有60000张手写数据图片,其中55000张训练数据,5000张测试数据。
在MNIST中,mnist.train.images是一个形状为[55000,784]的张量,其中的第一个维度是用来索引图片,第二个维度图片中的像素。MNIST数据集包含有三部分,训练数据集,验证数据集,测试数据集(mnist.validation)。
标签是介于0-9之间的数字,用于描述图片中的数字,转化为one-hot向量即表示的数字对应的下标为1,其余的值为0。标签的训练数据是[55000,10]的数字矩阵。
下面定义了一个简单的网络对数据集进行训练,代码如下:
importtensorflowastf importnumpyasnp fromtensorflow.examples.tutorials.mnistimportinput_data importmatplotlib.pyplotasplt mnist=input_data.read_data_sets('MNIST_data',one_hot=True) tf.reset_default_graph() x=tf.placeholder(tf.float32,[None,784]) y=tf.placeholder(tf.float32,[None,10]) w=tf.Variable(tf.random_normal([784,10])) b=tf.Variable(tf.zeros([10])) pred=tf.matmul(x,w)+b pred=tf.nn.softmax(pred) cost=tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred),reduction_indices=1)) learning_rate=0.01 optimizer=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) training_epochs=25 batch_size=100 display_step=1 save_path='model/' saver=tf.train.Saver() withtf.Session()assess: sess.run(tf.global_variables_initializer()) forepochinrange(training_epochs): avg_cost=0 total_batch=int(mnist.train.num_examples/batch_size) foriinrange(total_batch): batch_xs,batch_ys=mnist.train.next_batch(batch_size) _,c=sess.run([optimizer,cost],feed_dict={x:batch_xs,y:batch_ys}) avg_cost+=c/total_batch if(epoch+1)%display_step==0: print('epoch=',epoch+1,'cost=',avg_cost) print('finished') correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1)) accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) print('accuracy:',accuracy.eval({x:mnist.test.images,y:mnist.test.labels})) save=saver.save(sess,save_path=save_path+'mnist.cpkt') print("starting2ndsession......") withtf.Session()assess: sess.run(tf.global_variables_initializer()) saver.restore(sess,save_path=save_path+'mnist.cpkt') correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1)) accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32)) print('accuracy:',accuracy.eval({x:mnist.test.images,y:mnist.test.labels})) output=tf.argmax(pred,1) batch_xs,batch_ys=mnist.test.next_batch(2) outputval=sess.run([output],feed_dict={x:batch_xs,y:batch_ys}) print(outputval) im=batch_xs[0] im=im.reshape(-1,28) plt.imshow(im,cmap='gray') plt.show() im=batch_xs[1] im=im.reshape(-1,28) plt.imshow(im,cmap='gray') plt.show()
总结
以上所述是小编给大家介绍的TensorFlowMNIST手写数据集的实现方法,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。